Phương pháp tiếp cận chức năng hoặc "Nhìn mẹ không có vòng lặp!":
from itertools import chain, repeat
prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
Enter a number: a
Not a number! Try again: b
Not a number! Try again: 1
1
Hoặc nếu bạn muốn có một thông báo "đầu vào xấu" được tách ra khỏi dấu nhắc đầu vào như trong các câu trả lời khác:
prompt_msg = "Enter a number: "
bad_input_msg = "Sorry, I didn't understand that."
prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
Enter a number: a
Sorry, I didn't understand that.
Enter a number: b
Sorry, I didn't understand that.
Enter a number: 1
1
Làm thế nào nó hoạt động?
Sự kết hợp này củaprompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
6 vàprompt_msg = "Enter a number: " bad_input_msg = "Sorry, I didn't understand that." prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]] replies = map[input, prompts] valid_response = next[filter[str.isdigit, replies]] print[valid_response]
7 sẽ tạo ra một trình lặp lại sẽ mang lại chuỗiprompt_msg = "Enter a number: " bad_input_msg = "Sorry, I didn't understand that." prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]] replies = map[input, prompts] valid_response = next[filter[str.isdigit, replies]] print[valid_response]
8 một lần vàprompt_msg = "Enter a number: " bad_input_msg = "Sorry, I didn't understand that." prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]] replies = map[input, prompts] valid_response = next[filter[str.isdigit, replies]] print[valid_response]
9 Số lần vô hạn:prompt_msg = "Enter a number: " bad_input_msg = "Sorry, I didn't understand that." prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]] replies = map[input, prompts] valid_response = next[filter[str.isdigit, replies]] print[valid_response]
for prompt in prompts: print[prompt]
Enter a number: Not a number! Try again: Not a number! Try again: Not a number! Try again: # ... and so on
0 - Ở đâyEnter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
1 sẽ áp dụng tất cả các chuỗiEnter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
2 từ bước trước vào hàmEnter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
3. Ví dụ:Enter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
for reply in replies: print[reply]
Enter a number: a a Not a number! Try again: 1 1 Not a number! Try again: it doesn't care now it doesn't care now # and so on...
- Chúng tôi sử dụng
4 vàEnter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
5 để lọc các chuỗi chỉ chứa các chữ số:Enter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
only_digits = filter[str.isdigit, replies] for reply in only_digits: print[reply]
0 và để chỉ nhận được chuỗi chỉ có chữ số đầu tiên mà chúng tôi sử dụngEnter a number: a Not a number! Try again: b Not a number! Try again: 1 1
6.Enter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
Các quy tắc xác nhận khác:
Phương thức chuỗi: Tất nhiên bạn có thể sử dụng các phương thức chuỗi khác như
7 để chỉ nhận chuỗi chữ cái hoặcEnter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
8 để chỉ có chữ hoa. Xem tài liệu cho danh sách đầy đủ. Of course you can use other string methods likeEnter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
7 to get only alphabetic strings, orEnter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
8 to get only uppercase. See docs for the full list.Enter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
Thử nghiệm thành viên: Có một số cách khác nhau để thực hiện nó. Một trong số đó là bằng cách sử dụng phương thức
9:Enter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
There are several different ways to perform it. One of them is by using
9 method:Enter a number: a Sorry, I didn't understand that. Enter a number: b Sorry, I didn't understand that. Enter a number: 1 1
1Enter a number: a Not a number! Try again: b Not a number! Try again: 1 1
2Enter a number: a Not a number! Try again: b Not a number! Try again: 1 1
So sánh số: Có các phương pháp so sánh hữu ích mà chúng ta có thể sử dụng ở đây. Ví dụ: đối với
0 [prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
1]:prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
There are useful comparison methods which we can use here. For example, for
0 [prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
1]:prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
3Enter a number: a Not a number! Try again: b Not a number! Try again: 1 1
4Enter a number: a Not a number! Try again: b Not a number! Try again: 1 1
Hoặc, nếu bạn không thích sử dụng các phương thức Dunder [Dunder = Double-Underscore], bạn luôn có thể xác định chức năng của riêng mình hoặc sử dụng các phương thức từ mô-đun
2.prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
Đường dẫn tồn tại: Ở đây người ta có thể sử dụng thư viện
3 và phương thứcprompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
4 của nó:prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
Here one can use
3 library and itsprompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
4 method:prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
5Enter a number: a Not a number! Try again: b Not a number! Try again: 1 1
6Enter a number: a Not a number! Try again: b Not a number! Try again: 1 1
Giới hạn số lần thử:
Nếu bạn không muốn tra tấn người dùng bằng cách hỏi anh ta một số lần vô hạn, bạn có thể chỉ định giới hạn trong cuộc gọi là
prompt_msg = "Enter a number: "
bad_input_msg = "Sorry, I didn't understand that."
prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
7. Điều này có thể được kết hợp với việc cung cấp giá trị mặc định cho hàm Enter a number: a
Sorry, I didn't understand that.
Enter a number: b
Sorry, I didn't understand that.
Enter a number: 1
1
6:Enter a number: a
Not a number! Try again: b
Not a number! Try again: 1
1
7Enter a number: a
Not a number! Try again: b
Not a number! Try again: 1
1
8Tiền xử lý dữ liệu đầu vào:
Đôi khi chúng tôi không muốn từ chối một đầu vào nếu người dùng vô tình cung cấp nó trong giới hạn hoặc với một khoảng trống ở đầu hoặc kết thúc của chuỗi. Để tính đến những sai lầm đơn giản này, chúng tôi có thể xử lý trước dữ liệu đầu vào bằng cách áp dụng các phương thức
prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
7 và prompts = chain[["Enter a number: "], repeat["Not a number! Try again: "]]
8. Ví dụ, đối với trường hợp kiểm tra thành viên, mã sẽ trông như thế này:Enter a number: a
Not a number! Try again: b
Not a number! Try again: 1
1
9prompt_msg = "Enter a number: "
bad_input_msg = "Sorry, I didn't understand that."
prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
0Trong trường hợp khi bạn có nhiều chức năng để sử dụng để xử lý tiền xử lý, có thể dễ dàng sử dụng chức năng thực hiện thành phần chức năng. Ví dụ: sử dụng một từ đây:
prompt_msg = "Enter a number: "
bad_input_msg = "Sorry, I didn't understand that."
prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
1prompt_msg = "Enter a number: "
bad_input_msg = "Sorry, I didn't understand that."
prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
2Kết hợp các quy tắc xác nhận:
Ví dụ, đối với một trường hợp đơn giản, khi chương trình yêu cầu tuổi từ 1 đến 120, người ta chỉ có thể thêm một
Enter a number: a
Sorry, I didn't understand that.
Enter a number: b
Sorry, I didn't understand that.
Enter a number: 1
1
4 khác:prompt_msg = "Enter a number: "
bad_input_msg = "Sorry, I didn't understand that."
prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
3Nhưng trong trường hợp khi có nhiều quy tắc, tốt hơn là thực hiện một chức năng thực hiện một kết hợp logic. Trong ví dụ sau, tôi sẽ sử dụng một cái sẵn sàng từ đây:
prompt_msg = "Enter a number: "
bad_input_msg = "Sorry, I didn't understand that."
prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
4prompt_msg = "Enter a number: "
bad_input_msg = "Sorry, I didn't understand that."
prompts = chain[[prompt_msg], repeat['\n'.join[[bad_input_msg, prompt_msg]]]]
replies = map[input, prompts]
valid_response = next[filter[str.isdigit, replies]]
print[valid_response]
5Thật không may, nếu ai đó cần một tin nhắn tùy chỉnh cho từng trường hợp thất bại, thì tôi sợ, không có cách nào khá chức năng. Hoặc, ít nhất, tôi không thể tìm thấy một.