cuốn sách gpt4 ai đã làm

python - newB Đấu tranh với Backus Naur tại Udacity Computer. khoa học. 101

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 16:47:10 26 4
mua khóa gpt4 Nike

Tôi đang hoàn thành lớp Giới thiệu Khoa học Máy tính 101 của Udacity và đang tìm kiếm sự trợ giúp cho một trong những câu hỏi trắc nghiệm cuối cùng. Đoạn mã sau trả về "đạt" khi gửi nhưng tôi cảm thấy như mình không nắm bắt được cốt lõi của thử thách trong bài kiểm tra này. Bất kỳ trợ giúp hoặc lời khuyên nào về cách tiếp cận và suy nghĩ về vấn đề sẽ được đánh giá rất cao.

câu hỏi:

"""
Xác định thủ tục Python, in_lingu(),
lấy đầu vào là một chuỗi và trả về True
nếu chuỗi đầu vào bằng ngôn ngữ được mô tả theo ngữ pháp BNF bên dưới
(bắt đầu từ S) và trả về Sai nếu không.

Mô tả ngữ pháp BNF:
S => 0 S 1
S => 1 S 0
S => 0
"""
# Tất cả các bài kiểm tra này sẽ in ra True nếu thủ tục của bạn được xác định chính xác.
in in_lingu("00011") == Đúng
in in_lingu("0") == Đúng
in in_lingu("01") == Sai
in in_lingu("011") == Sai
in in_lingu("01002") == Sai

Đây là mã của tôi cho đến nay:

def in_lingu(bnf):
nếu len(bnf) % 2 == 0:
trả về Sai
nếu có(i trong '23456789' cho i trong bnf) == Đúng:
trả về Sai
if bnf[len(bnf)/2] != '0':
trả về Sai
khác:
trả về Đúng

KHÔNGSau khi gửi biểu mẫu Backus-Nole, mã này sẽ trả về True:

S => 0 S 1 
S => 1 S 0
S => 0

Ví dụ: "11111011111"

in in_lingu('11111011111') == Sai

Tôi vẫn quan tâm đến đệ quy, nhưng dường như có cách nào để giải quyết vấn đề này một cách đệ quy? Hoặc bước tiếp theo của tôi sẽ là kiểm tra ký tự đầu tiên và cuối cùng của chuỗi để xem liệu chúng có chính xác là số 0 và số 1 hay không (không phải cả hai), sau đó xóa chúng và tiếp tục cắt bớt chuỗi cho đến khi tôi chuyển sang chữ hoa chữ thường hoặc "ở giữa". không. Tôi ngạc nhiên là mã đã vượt qua bài kiểm tra vào thời điểm này.

Đáng chú ý, suy nghĩ của tôi về mã:

nếu len(bnf) % 2 == 0:

Tôi nghĩ đến điều kiện if đầu tiên vì với dạng BN, bất kỳ phép lặp nào cũng sẽ tạo ra một số lẻ, do đó, độ dài chuỗi chia hết cho 2 có nghĩa là nó không thuộc dạng này.

nếu có(i trong '23456789' cho i trong bnf) == Đúng:

Chữ "nếu" thứ hai cũng là một chữ dễ xem xét, vì vấn đề chỉ là tìm một chuỗi gồm các số 1 và 0 (tôi đoán tôi cũng có thể bao gồm bảng chữ cái hoặc đơn giản là viết nếu có (tôi không ở '01' đại diện cho tôi ở bnf) .

if bnf[len(bnf)/2] != '0':

Tương tự, chữ "if" thứ ba tìm kiếm đặc tính đủ điều kiện của biểu mẫu BN đã cho - bất kể biểu thức theo cú pháp đã cho là gì, sẽ có số 0 ở giữa - và khai thác phép chia cơ sở của Python vì việc lập chỉ mục bắt đầu từ 0.

Mọi ý tưởng hoặc đề xuất về giải pháp thay thế sẽ được đánh giá rất cao, cảm ơn bạn!

Vì tôi mới làm quen với StackOverflow nên tôi đã nghiên cứu câu hỏi này trước khi đăng. Bất kỳ cân nhắc về phong cách bài đăng nào (quá dài dòng?) hoặc mối quan tâm cũng sẽ hữu ích :)

好的,

Tôi lấy gợi ý của Duskwoof và nghĩ ra điều này:

def in_lingu(bnf):
# tương ứng với: S => 0 S 1
nếu bnf[0] == '0' và bnf[-1] == '1':
trả về in_lingu(bnf[1:-1])
# tương ứng với: S => 0 S 1
nếu bnf[0] == '1' và bnf[-1] == '0':
trả về in_lingu(bnf[1:-1])
# tương ứng với: S => 0
nếu bnf == '0':
trả về Đúng
trả về Sai

Nó hoạt động với các trường hợp theo biểu mẫu, nhưng Python cảm thấy khó chịu khi tôi gửi các trường hợp không tuân theo biểu mẫu... và tôi vẫn cảm thấy như mình đang thiếu thứ gì đó về mặt đệ quy và phân tích chuỗi của biểu mẫu Backos-Knoll . Tôi nên xem xét xử lý những trường hợp không đúng hình thức như thế nào? Cảm ơn sự giúp đỡ của bạn. Tôi sẽ tiếp tục làm việc về vấn đề này.

Điều này dường như hoạt động tốt hơn - tất cả các trường hợp thử nghiệm đều vượt qua:

def in_lingu(bnf):
nếu len(bnf) > 2:
# tương ứng với: S => 0 S 1
nếu bnf[0] == '0' và bnf[-1] == '1':
trả về in_lingu(bnf[1:-1])
# tương ứng với: S => 0 S 1
nếu bnf[0] == '1' và bnf[-1] == '0':
trả về in_lingu(bnf[1:-1])
# tương ứng với: S => 0
nếu bnf == '0':
trả về Đúng
trả về Sai

Tuy nhiên, tôi hoàn toàn mới đối với @programming, vì vậy mọi lời khuyên hoặc thông tin đầu vào sẽ rất hữu ích... Tôi vẫn không cảm thấy mình có một giải pháp rất chung chung; chỉ có điều gì đó cụ thể cho cú pháp BNF cụ thể này.

câu trả lời hay nhất

Tôi vẫn đang loay hoay với đệ quy, nhưng có vẻ như có cách nào để giải quyết vấn đề này một cách đệ quy?

Đây chính xác là cách bạn giải quyết vấn đề này. Đừng suy nghĩ quá nhiều về vấn đề bằng cách cố gắng phân tích những thuộc tính mà một chuỗi trong ngôn ngữ đó sẽ có (ví dụ: độ dài modulo 2, nó sẽ chứa những ký tự nào, v.v.) Mặc dù điều đó có thể hiệu quả cho việc này!cụ thểngôn ngữ, nhưng nó không hoạt động trong trường hợp chung; một số ngôn ngữ quá phức tạp để viết các giải pháp lặp lại như ngôn ngữ bạn mô tả.

Giải pháp của bạn phải là bản dịch trực tiếp mô tả ngôn ngữ - bạn không cần phải suy nghĩ quá nhiều về ý nghĩa của các quy tắc - và nên hiểu về vế phải! S Các quy tắc sử dụng đệ quy. Nó nên được viết dưới dạng này:

def in_lingu(bnf):
if...: # tương ứng với: S => 0 S 1
trả về Đúng
if...: # tương ứng với: S => 1 S 0
trả về Đúng
if...: # tương ứng với: S => 0
trả về Đúng
trả về Sai

(Giải pháp bạn hiện có là "giải pháp sai" - nó sẽ vượt qua bài kiểm tra được đưa ra trong câu hỏi, nhưng lại thất bại ở một số đầu vào khác. Ví dụ: một chuỗi 000 Không phải bằng ngôn ngữ này, nhưng chức năng của bạn sẽ nói như vậy. )

Giới thiệu về python - newB Đấu tranh với Backus Naur tại Udacity Computer. khoa học. 101, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/36212435/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress