Cách tạo một bài kiểm tra tính cách bằng Python

Bài 32
Tác giả. Mike Dane
Cập nhật lần cuối. Tháng 10 năm 2017

Mã số

Copyclass Question:
     def __init__[self, prompt, answer]:
          self.prompt = prompt
          self.answer = answer

question_prompts = [
     "What color are apples?\n[a] Red/Green\n[b]Orange",
     "What color are bananas?\n[a] Red/Green\n[b]Yellow",
]

questions = [
     Question[question_prompts[0], "a"],
     Question[question_prompts[1], "b"],
]

def run_quiz[questions]:
     score = 0
     for question in questions:
          answer = input[question.prompt]
          if answer == question.answer:
               score += 1
     print["you got", score, "out of", len[questions]]

run_quiz[questions]

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Trong hướng dẫn này, bạn sẽ xây dựng ứng dụng bài kiểm tra Python cho thiết bị đầu cuối. Từ quiz có từ năm 1781 có nghĩa là người lập dị. Ngày nay, nó chủ yếu được sử dụng để mô tả các bài kiểm tra ngắn về kiến ​​thức chuyên môn hoặc kiến ​​thức chuyên môn với các câu hỏi như sau

Lần đầu tiên sử dụng từ đố được biết đến là khi nào?

Bằng cách làm theo dự án từng bước này, bạn sẽ xây dựng một ứng dụng có thể kiểm tra kiến ​​thức chuyên môn của một người về nhiều chủ đề. Bạn có thể sử dụng dự án này để củng cố kiến ​​thức của bản thân hoặc thách đấu bạn bè trong một trận đấu trí vui nhộn

Trong hướng dẫn này, bạn sẽ học cách

  • Tương tác với người dùng trong thiết bị đầu cuối
  • Cải thiện khả năng sử dụng ứng dụng của bạn
  • Tái cấu trúc ứng dụng của bạn để liên tục cải thiện nó
  • Lưu trữ dữ liệu trong các tệp dữ liệu chuyên dụng

Ứng dụng bài kiểm tra là một dự án toàn diện dành cho bất kỳ ai đã nắm vững kiến ​​thức cơ bản về Python. Trong suốt hướng dẫn, bạn sẽ nhận được tất cả mã mình cần theo các bước riêng biệt, ngắn gọn. Bạn cũng có thể tìm thấy mã nguồn đầy đủ của ứng dụng bằng cách nhấp vào liên kết bên dưới

Nhận mã nguồn. Nhấp vào đây để có quyền truy cập vào mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng bài kiểm tra của mình

Cho dù bạn có phải là người lập dị hay không, hãy đọc tiếp để biết cách tạo bài kiểm tra của riêng bạn

Thử nghiệm. Ứng dụng Câu đố Python của bạn

Trong dự án từng bước này, bạn sẽ xây dựng một ứng dụng đầu cuối có thể đố bạn và bạn bè của bạn về nhiều chủ đề

Trước tiên, bạn chọn một chủ đề cho câu hỏi của mình. Sau đó, đối với mỗi câu hỏi, bạn sẽ chọn một câu trả lời từ một tập hợp các lựa chọn thay thế. Một số câu hỏi có thể có nhiều câu trả lời đúng. Bạn có thể truy cập một gợi ý để giúp bạn trên đường đi. Sau khi trả lời một câu hỏi, bạn sẽ đọc phần giải thích có thể cung cấp thêm ngữ cảnh cho câu trả lời

Loại bỏ các quảng cáo

Tổng quan dự án

Bạn sẽ bắt đầu bằng cách tạo một ứng dụng bài kiểm tra Python cơ bản chỉ có khả năng đặt câu hỏi, thu thập câu trả lời và kiểm tra xem câu trả lời có đúng không. Từ đó, bạn sẽ thêm ngày càng nhiều tính năng để làm cho ứng dụng của bạn trở nên thú vị, thân thiện và thú vị hơn

Bạn sẽ lặp đi lặp lại việc xây dựng ứng dụng bài kiểm tra bằng cách thực hiện các bước sau

  1. Tạo một ứng dụng cơ bản có thể đặt câu hỏi trắc nghiệm
  2. Làm cho ứng dụng thân thiện hơn với người dùng bằng cách cải thiện giao diện và cách ứng dụng xử lý lỗi người dùng
  3. Tái cấu trúc mã để sử dụng các chức năng
  4. Tách dữ liệu câu hỏi khỏi mã nguồn bằng cách lưu trữ câu hỏi trong một tệp dữ liệu chuyên dụng
  5. Mở rộng ứng dụng để xử lý nhiều câu trả lời đúng, đưa ra gợi ý và giải thích
  6. Thêm sở thích bằng cách hỗ trợ các chủ đề câu đố khác nhau để lựa chọn

Khi bạn làm theo, bạn sẽ có kinh nghiệm khi bắt đầu với một tập lệnh nhỏ và mở rộng nó. Đây là một kỹ năng quan trọng trong và của chính nó. Chương trình, ứng dụng hoặc trò chơi yêu thích của bạn có thể bắt đầu như một bằng chứng nhỏ về khái niệm mà sau này phát triển thành như ngày nay

điều kiện tiên quyết

Trong hướng dẫn này, bạn sẽ xây dựng một ứng dụng bài kiểm tra bằng cách sử dụng các khối xây dựng cơ bản của Python. Trong khi thực hiện các bước, sẽ rất hữu ích nếu bạn cảm thấy thoải mái với các khái niệm sau

  • Đọc đầu vào từ người dùng tại thiết bị đầu cuối
  • Tổ chức dữ liệu trong các cấu trúc như , , và từ điển
  • Sử dụng câu lệnh
    [
        ["When was the first known use of the word 'quiz'", "1781"],
        ["Which built-in function can get information from the user", "input"],
    ]
    
    7 để kiểm tra các điều kiện khác nhau
  • Lặp lại hành động với các vòng lặp
    [
        ["When was the first known use of the word 'quiz'", "1781"],
        ["Which built-in function can get information from the user", "input"],
    ]
    
    8 và
    [
        ["When was the first known use of the word 'quiz'", "1781"],
        ["Which built-in function can get information from the user", "input"],
    ]
    
    9
  • Đóng gói mã với các chức năng

Nếu bạn không tự tin vào kiến ​​thức của mình về những điều kiện tiên quyết này, thì cũng không sao cả. Trên thực tế, xem qua hướng dẫn này sẽ giúp bạn thực hành các khái niệm này. Bạn luôn có thể dừng và xem lại các tài nguyên được liên kết ở trên nếu bạn gặp khó khăn

Bước 1. Hỏi câu hỏi

Trong bước này, bạn sẽ học cách tạo một chương trình có thể đặt câu hỏi và kiểm tra câu trả lời. Đây sẽ là nền tảng của ứng dụng bài kiểm tra của bạn, mà bạn sẽ cải thiện trong phần còn lại của hướng dẫn. Kết thúc bước này, chương trình của bạn sẽ như thế này

Chương trình của bạn sẽ có thể đặt câu hỏi và kiểm tra câu trả lời. Phiên bản này bao gồm chức năng cơ bản mà bạn cần, nhưng bạn sẽ thêm nhiều chức năng hơn trong các bước sau. Nếu muốn, bạn có thể tải xuống mã nguồn như khi bạn hoàn thành bước này bằng cách nhấp vào liên kết bên dưới và nhập thư mục

# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
0

Nhận mã nguồn. Nhấp vào đây để có quyền truy cập vào mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng bài kiểm tra của mình

Nhận thông tin người dùng với
# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1

Một trong những chức năng tích hợp sẵn của Python là. Bạn có thể sử dụng nó để lấy thông tin từ người dùng. Đối với ví dụ đầu tiên, hãy chạy phần sau trong Python REPL

>>>

>>> name = input["What's your name? "]
What's your name? Geir Arne

>>> name
'Geir Arne'

# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1 nhận lời nhắc tùy chọn được hiển thị cho người dùng trước khi người dùng nhập thông tin. Trong ví dụ trên, lời nhắc được hiển thị trong dòng được đánh dấu và người dùng nhập
# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
4 trước khi nhấn Enter . Bất cứ điều gì người dùng nhập vào đều được trả về từ
# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1. Điều này được thấy trong ví dụ REPL, vì chuỗi
# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
6 đã được gán cho
# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
7.

Bạn có thể sử dụng

# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1 để Python đặt câu hỏi cho bạn và kiểm tra câu trả lời của bạn. Hãy thử những điều sau đây

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
3

Ví dụ này cho thấy một điều mà bạn cần lưu ý.

# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1 luôn trả về một chuỗi văn bản, ngay cả khi chuỗi đó chỉ chứa các chữ số. Như bạn sẽ sớm thấy, đây sẽ không phải là vấn đề đối với ứng dụng bài kiểm tra. Tuy nhiên, nếu bạn muốn sử dụng kết quả của
# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1 để tính toán, thì trước tiên bạn cần

Đã đến lúc bắt đầu xây dựng ứng dụng bài kiểm tra của bạn. Mở trình soạn thảo của bạn và tạo tệp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 với nội dung sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
7

Mã này rất giống với mã bạn đã thử nghiệm trong REPL ở trên. Bạn có thể chạy ứng dụng của mình để kiểm tra kiến ​​thức của mình

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
8

Nếu bạn nào trả lời sai sẽ được chỉnh sửa nhẹ nhàng để lần sau bạn làm tốt hơn

Ghi chú.

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
62 trước chuỗi ký tự được trích dẫn của bạn bên trong mệnh đề
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
63 cho biết chuỗi đó là chuỗi được định dạng, thường được gọi là chuỗi f. Python đánh giá các biểu thức bên trong dấu ngoặc nhọn [
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
64] trong chuỗi f và chèn chúng vào chuỗi. Bạn có thể tùy ý thêm khác nhau

Ví dụ:

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
65 mà
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
66 nên được chèn vào dựa trên biểu diễn
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
67 của nó. Trong thực tế, điều này có nghĩa là các chuỗi được bao quanh bởi các dấu nháy đơn, chẳng hạn như
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
68

Một bài kiểm tra chỉ có một câu hỏi không thú vị lắm. Bạn có thể đặt câu hỏi khác bằng cách lặp lại mã của mình

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
6

Bạn đã thêm một câu hỏi bằng cách sao chép và dán mã trước đó, sau đó thay đổi nội dung câu hỏi và câu trả lời đúng. Một lần nữa, bạn có thể kiểm tra điều này bằng cách chạy tập lệnh

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
7

nó hoạt động. Tuy nhiên, sao chép và dán mã như thế này là không tốt. Có một nguyên tắc lập trình được gọi là Đừng lặp lại chính mình [DRY], nói rằng bạn thường nên tránh viết mã lặp lại vì nó khó bảo trì

Tiếp theo, bạn sẽ bắt đầu cải thiện mã của mình để làm việc dễ dàng hơn

Loại bỏ các quảng cáo

Sử dụng danh sách và bộ dữ liệu để tránh mã lặp lại

Python cung cấp một số cấu trúc dữ liệu linh hoạt và mạnh mẽ. Thông thường, bạn có thể thay thế mã lặp lại bằng a , a hoặc từ điển kết hợp với vòng lặp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
8 hoặc vòng lặp
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
9

Thay vì lặp lại mã, bạn sẽ coi câu hỏi và câu trả lời của mình là dữ liệu và chuyển chúng vào cấu trúc dữ liệu mà mã của bạn có thể lặp lại. Câu hỏi tức thì—và thường là thách thức—sau đó trở thành cách bạn nên cấu trúc dữ liệu của mình

Không bao giờ có một cấu trúc dữ liệu hoàn hảo duy nhất. Bạn thường sẽ chọn giữa một số lựa chọn thay thế. Trong suốt hướng dẫn này, bạn sẽ xem lại lựa chọn cấu trúc dữ liệu của mình nhiều lần khi ứng dụng của bạn phát triển

Hiện tại, hãy chọn một cấu trúc dữ liệu khá đơn giản

  • Một danh sách sẽ chứa một số yếu tố câu hỏi
  • Mỗi phần tử câu hỏi sẽ là một bộ hai bao gồm văn bản câu hỏi và câu trả lời

Sau đó, bạn có thể lưu trữ câu hỏi của mình như sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]

Điều này rất phù hợp với cách bạn muốn sử dụng dữ liệu của mình. Bạn sẽ lặp lại từng câu hỏi và đối với mỗi câu hỏi, bạn muốn truy cập vào cả câu hỏi và câu trả lời

Thay đổi tệp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 của bạn để bạn lưu trữ câu hỏi và câu trả lời của mình trong cấu trúc dữ liệu
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22

# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]

Khi bạn chạy mã này, nó sẽ không khác gì so với trước đó. Trên thực tế, bạn chưa thêm bất kỳ chức năng mới nào. Thay vào đó, bạn đã cấu trúc lại mã của mình để dễ dàng thêm nhiều câu hỏi hơn vào ứng dụng của bạn

Trong phiên bản trước của mã, bạn cần thêm năm dòng mã mới cho mỗi câu hỏi mà bạn đã thêm. Bây giờ, vòng lặp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
8 đảm nhận việc chạy năm dòng đó cho mỗi câu hỏi. Để thêm một câu hỏi mới, bạn chỉ cần thêm một dòng đánh vần câu hỏi và câu trả lời tương ứng

Ghi chú. Bạn đang tìm hiểu về các câu đố trong hướng dẫn này, vì vậy các câu hỏi và câu trả lời rất quan trọng. Mỗi ví dụ mã sẽ giới thiệu một câu hỏi mới. Để giữ danh sách mã trong hướng dẫn này ở kích thước có thể quản lý được, một số câu hỏi cũ hơn có thể bị xóa. Tuy nhiên, vui lòng giữ tất cả các câu hỏi trong mã của bạn hoặc thậm chí thay thế chúng bằng câu hỏi và câu trả lời của riêng bạn

Các câu hỏi bạn sẽ thấy trong các ví dụ có liên quan đến hướng dẫn, mặc dù bạn sẽ không tìm thấy tất cả các câu trả lời trong văn bản. Vui lòng tìm kiếm trực tuyến nếu bạn muốn biết thêm chi tiết về câu hỏi hoặc câu trả lời

Tiếp theo, bạn sẽ làm cho ứng dụng bài kiểm tra của mình dễ sử dụng hơn bằng cách thêm các phương án trả lời cho mỗi câu hỏi

Cung cấp nhiều lựa chọn

Sử dụng

# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1 là một cách tuyệt vời để đọc đầu vào từ người dùng của bạn. Tuy nhiên, cách bạn hiện đang sử dụng có thể khiến bạn bực bội. Ví dụ: ai đó có thể trả lời một trong những câu hỏi của bạn như thế này

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
6

Chúng có thực sự bị đánh dấu sai vì chúng bao gồm dấu ngoặc đơn để chỉ ra rằng hàm có thể gọi được không? . Ví dụ

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
2

Ở đây, các lựa chọn thay thế cho thấy rằng bạn muốn câu trả lời được nhập mà không có dấu ngoặc đơn. Trong ví dụ, các lựa chọn thay thế được liệt kê trước câu hỏi. Điều này hơi phản trực giác, nhưng việc triển khai vào mã hiện tại của bạn sẽ dễ dàng hơn. Bạn sẽ cải thiện điều này trong

Để triển khai các phương án trả lời, bạn cần cấu trúc dữ liệu của mình để có thể ghi lại ba mẩu thông tin cho mỗi câu hỏi

  1. Văn bản câu hỏi
  2. Câu trả lời đúng
  3. trả lời các lựa chọn thay thế

Đã đến lúc xem lại

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22 lần đầu tiên—nhưng không phải lần cuối cùng—và thực hiện một số thay đổi đối với nó. Sẽ rất hợp lý khi lưu trữ các phương án trả lời trong một danh sách, vì có thể có bất kỳ số lượng nào trong số đó và bạn chỉ muốn hiển thị chúng trên màn hình. Hơn nữa, bạn có thể coi câu trả lời đúng là một trong những lựa chọn thay thế câu trả lời và đưa nó vào danh sách, miễn là bạn có thể truy xuất nó sau này

Bạn quyết định thay đổi

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22 thành một từ điển trong đó khóa là câu hỏi của bạn và giá trị là danh sách các lựa chọn thay thế câu trả lời. Bạn luôn đặt câu trả lời đúng là mục đầu tiên trong danh sách các lựa chọn thay thế để bạn có thể xác định nó

Ghi chú. Bạn có thể tiếp tục sử dụng danh sách hai bộ để giữ câu hỏi của mình. Trên thực tế, bạn chỉ lặp đi lặp lại các câu hỏi và câu trả lời, không tra cứu câu trả lời bằng cách sử dụng câu hỏi làm chìa khóa. Do đó, bạn có thể lập luận rằng danh sách các bộ dữ liệu là cấu trúc dữ liệu tốt hơn cho trường hợp sử dụng của bạn so với từ điển

Tuy nhiên, bạn sử dụng từ điển vì nó trông đẹp hơn trong mã của bạn và vai trò của các câu hỏi và câu trả lời thay thế khác biệt hơn

Bạn cập nhật mã của mình để lặp lại từng mục trong từ điển mới tạo của bạn. Đối với mỗi câu hỏi, bạn chọn ra câu trả lời đúng từ các phương án và bạn in ra tất cả các phương án trước khi đặt câu hỏi

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
30

Nếu bạn luôn hiển thị câu trả lời đúng làm phương án thay thế đầu tiên, thì người dùng của bạn sẽ sớm nắm bắt và có thể đoán câu trả lời đúng mỗi lần. Thay vào đó, bạn thay đổi thứ tự của các phương án bằng cách sắp xếp chúng. Kiểm tra ứng dụng của bạn

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
31

Câu hỏi cuối cùng cho thấy một trải nghiệm khác có thể gây khó chịu cho người dùng. Trong ví dụ này, họ đã chọn phương án đúng. Tuy nhiên, khi họ đang gõ nó, một lỗi đánh máy đã xuất hiện. Bạn có thể làm cho ứng dụng của mình dễ tha thứ hơn không?

Bạn biết rằng người dùng sẽ trả lời bằng một trong các lựa chọn thay thế, vì vậy bạn chỉ cần một cách để họ truyền đạt lựa chọn thay thế mà họ chọn. Bạn có thể thêm nhãn cho từng giải pháp thay thế và chỉ yêu cầu người dùng nhập nhãn

Cập nhật ứng dụng để sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
27 để in chỉ mục của từng phương án trả lời

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
32

Bạn lưu trữ các phương án được sắp xếp lại dưới dạng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
28 để bạn có thể tra cứu câu trả lời đầy đủ dựa trên nhãn câu trả lời mà người dùng nhập vào. Nhớ lại rằng
# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1 luôn trả về một chuỗi, vì vậy bạn cần chuyển đổi nó thành một số nguyên trước khi coi nó như một chỉ mục danh sách

Bây giờ, nó thuận tiện hơn để trả lời các câu hỏi

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
33

Tuyệt quá. Bạn đã tạo ra một ứng dụng bài kiểm tra có khả năng. Trong bước tiếp theo, bạn sẽ không thêm bất kỳ chức năng nào nữa. Thay vào đó, bạn sẽ làm cho ứng dụng của mình thân thiện hơn với người dùng

Loại bỏ các quảng cáo

Bước 2. Làm cho ứng dụng của bạn thân thiện với người dùng

Trong bước thứ hai này, bạn sẽ cải thiện ứng dụng bài kiểm tra của mình để dễ sử dụng hơn. Đặc biệt, bạn sẽ cải thiện những điều sau

  • Ứng dụng trông và cảm nhận như thế nào
  • Cách bạn tóm tắt kết quả của người dùng
  • Điều gì xảy ra nếu người dùng của bạn nhập một lựa chọn thay thế không tồn tại
  • Thứ tự bạn trình bày các câu hỏi và lựa chọn thay thế trong

Kết thúc bước này, ứng dụng của bạn sẽ hoạt động như sau

Chương trình của bạn sẽ vẫn hoạt động tương tự như bây giờ, nhưng nó sẽ mạnh mẽ và hấp dẫn hơn. Bạn có thể tìm thấy mã nguồn ở cuối bước này trong thư mục

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
300 bằng cách nhấp vào bên dưới

Nhận mã nguồn. Nhấp vào đây để có quyền truy cập vào mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng bài kiểm tra của mình

Định dạng đầu ra đẹp hơn

về cách ứng dụng bài kiểm tra của bạn hiện đang được trình bày. Nó không hấp dẫn lắm. Không có dòng trống nào cho bạn biết câu hỏi mới bắt đầu từ đâu và các lựa chọn thay thế được liệt kê phía trên câu hỏi, điều này hơi khó hiểu. Hơn nữa, việc đánh số các lựa chọn khác nhau bắt đầu từ

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
301 thay vì
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
302, điều này sẽ tự nhiên hơn

Trong bản cập nhật tiếp theo của bạn cho

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61, bạn sẽ tự đánh số các câu hỏi và trình bày nội dung câu hỏi phía trên các phương án trả lời. Ngoài ra, bạn sẽ sử dụng chữ thường thay vì số để xác định câu trả lời

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
34

Bạn sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
304 để nhận các chữ cái đánh dấu các lựa chọn thay thế câu trả lời của bạn. Bạn kết hợp các chữ cái và các lựa chọn thay thế với
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
305 và lưu trữ chúng trong từ điển như sau

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
35

Bạn sử dụng các lựa chọn thay thế được gắn nhãn này khi bạn hiển thị các tùy chọn cho người dùng và khi bạn tra cứu câu trả lời của người dùng dựa trên nhãn mà họ đã nhập. Lưu ý việc sử dụng chuỗi thoát đặc biệt

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
306. Điều này được hiểu là xuống dòng và thêm một dòng trống trên màn hình. Đây là một cách đơn giản để thêm một số tổ chức vào đầu ra của bạn

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
36

Đầu ra của bạn vẫn chủ yếu là đơn sắc trong thiết bị đầu cuối, nhưng nó trông đẹp mắt hơn và dễ đọc hơn

Giữ điểm số

Bây giờ bạn đang đánh số các câu hỏi, sẽ rất tốt nếu bạn theo dõi xem có bao nhiêu câu hỏi mà người dùng trả lời đúng. Bạn có thể thêm một biến,

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
307, để giải quyết vấn đề này

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
37

Bạn tăng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
307 cho mỗi câu trả lời đúng. Biến vòng lặp
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
309 đã đếm tổng số câu hỏi, vì vậy bạn có thể sử dụng biến đó để báo cáo kết quả của người dùng

Loại bỏ các quảng cáo

Xử lý lỗi người dùng

Cho đến nay, bạn không phải lo lắng quá nhiều về điều gì sẽ xảy ra nếu người dùng nhập câu trả lời không hợp lệ. Trong các phiên bản khác nhau của ứng dụng, việc giám sát này có thể dẫn đến việc chương trình gây ra lỗi hoặc—ít nghiêm trọng hơn—làm sai câu trả lời không hợp lệ của người dùng

Bạn có thể xử lý lỗi của người dùng theo cách tốt hơn bằng cách cho phép người dùng nhập lại câu trả lời của họ khi họ nhập nội dung nào đó không hợp lệ. Một cách để làm điều này là bọc

# quiz.py

QUESTIONS = [
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
    ["Which keyword do you use to loop over a given list of elements", "for"]
]

for question, correct_answer in QUESTIONS:
    answer = input[f"{question}? "]
    if answer == correct_answer:
        print["Correct!"]
    else:
        print[f"The answer is {correct_answer!r}, not {answer!r}"]
1 trong vòng lặp
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
9

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
38

Điều kiện

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
312 thực hiện một số việc cùng một lúc. Nó sử dụng một biểu thức gán [______ 1313], thường được gọi là toán tử hải mã, để lưu dữ liệu nhập của người dùng là ________ 1314 và so sánh nó với chuỗi
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
315. Vòng lặp while sẽ chạy cho đến khi bạn gõ
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
316 tại dấu nhắc. Xem thêm ví dụ

Ghi chú. Nếu bạn đang sử dụng phiên bản Python cũ hơn 3. 8 thì biểu thức gán sẽ gây ra lỗi cú pháp. Bạn có thể mã để tránh sử dụng toán tử hải mã. Đã có phiên bản ứng dụng trắc nghiệm chạy trên Python 3. 7 trong mã nguồn mà bạn đã tải xuống

Trong ứng dụng bài kiểm tra của bạn, bạn sử dụng một cấu trúc tương tự để lặp cho đến khi người dùng đưa ra câu trả lời hợp lệ

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
39

Nếu bạn nhập một lựa chọn không hợp lệ tại lời nhắc, thì bạn sẽ được nhắc về các lựa chọn hợp lệ của mình

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
70

Lưu ý rằng sau khi vòng lặp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
9 kết thúc, bạn được đảm bảo rằng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
318 là một trong các khóa của
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
319, vì vậy sẽ an toàn khi tra cứu trực tiếp
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
66. Tiếp theo, bạn sẽ thêm một cải tiến nữa bằng cách đưa một số tính ngẫu nhiên vào bài kiểm tra của mình

Thêm sự đa dạng cho bài kiểm tra của bạn

Hiện tại, khi bạn chạy ứng dụng bài kiểm tra của mình, bạn luôn hỏi các câu hỏi theo thứ tự như chúng được liệt kê trong mã nguồn của bạn. Ngoài ra, các phương án trả lời cho một câu hỏi nhất định cũng có thứ tự cố định không bao giờ thay đổi

Bạn có thể thêm sự đa dạng cho bài kiểm tra của mình bằng cách thay đổi mọi thứ một chút. Bạn có thể chọn ngẫu nhiên cả thứ tự của câu hỏi và thứ tự của các phương án trả lời cho mỗi câu hỏi

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
71

Bạn sử dụng để sắp xếp ngẫu nhiên thứ tự câu hỏi của bạn và thứ tự của các phương án trả lời. Thông thường,

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
321 chọn ra một vài mẫu ngẫu nhiên từ bộ sưu tập. Tuy nhiên, nếu bạn yêu cầu nhiều mẫu bằng số lượng mục trong chuỗi, thì bạn đang sắp xếp lại toàn bộ chuỗi một cách ngẫu nhiên

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
72

Ngoài ra, số lượng câu hỏi trong bài kiểm tra của bạn là

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
323, ban đầu được đặt thành năm. Nếu bạn bao gồm hơn năm câu hỏi trong đơn đăng ký của mình, thì điều này cũng bổ sung thêm một số loại câu hỏi được hỏi ngoài thứ tự mà chúng được hỏi

Ghi chú. Bạn cũng có thể sử dụng để xáo trộn các câu hỏi và lựa chọn thay thế của mình. Sự khác biệt là

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
325 sắp xếp lại các trình tự tại chỗ, có nghĩa là nó thay đổi cấu trúc dữ liệu
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22 cơ bản của bạn. thay vào đó, tạo danh sách câu hỏi và lựa chọn thay thế mới

Trong mã hiện tại của bạn, việc sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
325 sẽ không thành vấn đề vì
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22 được đặt lại mỗi khi bạn chạy ứng dụng bài kiểm tra của mình. Nó có thể trở thành một vấn đề, chẳng hạn nếu bạn triển khai khả năng hỏi cùng một câu hỏi nhiều lần. Mã của bạn thường đơn giản hơn để giải thích nếu bạn không thay đổi hoặc thay đổi cấu trúc dữ liệu cơ bản của mình

Trong suốt bước này, bạn đã cải thiện ứng dụng bài kiểm tra của mình. Bây giờ là lúc lùi lại một bước và xem xét bản thân mã. Trong phần tiếp theo, bạn sẽ tổ chức lại mã để bạn giữ mã theo mô-đun và sẵn sàng để phát triển thêm

Loại bỏ các quảng cáo

Bước 3. Sắp xếp mã của bạn với các chức năng

Trong bước này, bạn sẽ cấu trúc lại mã của mình. Tái cấu trúc có nghĩa là bạn sẽ thay đổi mã của mình, nhưng hành vi của ứng dụng và trải nghiệm người dùng của bạn sẽ vẫn như cũ. Điều này nghe có vẻ không thú vị lắm, nhưng nó sẽ cực kỳ hữu ích sau này, vì việc tái cấu trúc tốt giúp việc duy trì và mở rộng mã của bạn trở nên thuận tiện hơn

Ghi chú. Nếu bạn muốn thấy hai thành viên nhóm Real Python làm việc thông qua việc tái cấu trúc một số mã, thì hãy xem phần Tái cấu trúc. Chuẩn bị mã của bạn để nhận trợ giúp. Bạn cũng sẽ học cách đặt câu hỏi lập trình rõ ràng, ngắn gọn

Hiện tại, mã của bạn không được tổ chức đặc biệt. Tất cả các tuyên bố của bạn ở mức khá thấp. Bạn sẽ xác định các chức năng để cải thiện mã của mình. Một số ưu điểm của chúng như sau

  • Các chức năng đặt tên cho các hoạt động cấp cao hơn có thể giúp bạn có cái nhìn tổng quan về mã của mình
  • Chức năng có thể được sử dụng lại

Để xem mã sẽ trông như thế nào sau khi bạn tái cấu trúc mã, hãy nhấp vào bên dưới và xem thư mục

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
330

Nhận mã nguồn. Nhấp vào đây để có quyền truy cập vào mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng bài kiểm tra của mình

chuẩn bị dữ liệu

Nhiều trò chơi và ứng dụng tuân theo một vòng đời chung

  1. tiền xử lý. Chuẩn bị dữ liệu ban đầu
  2. Tiến trình. Chạy vòng lặp chính
  3. hậu xử lý. Dọn dẹp và đóng ứng dụng

Trong ứng dụng bài kiểm tra của bạn, trước tiên bạn đọc các câu hỏi có sẵn, sau đó bạn hỏi từng câu hỏi, trước khi báo cáo điểm số cuối cùng. Nếu bạn nhìn lại mã hiện tại của mình, thì bạn sẽ thấy ba bước này trong mã. Nhưng tổ chức vẫn còn một chút ẩn trong tất cả các chi tiết

Bạn có thể làm cho chức năng chính rõ ràng hơn bằng cách đóng gói nó trong một chức năng. Bạn chưa cần cập nhật tệp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 của mình, nhưng lưu ý rằng bạn có thể dịch đoạn trước đó thành mã giống như sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
73

Mã này sẽ không chạy như vốn có. Hàm

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
332 và
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333 chưa được xác định và còn thiếu một số chi tiết khác. Tuy nhiên,
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334 đóng gói chức năng của ứng dụng của bạn ở mức cao

Viết ra quy trình ứng dụng của bạn ở cấp độ cao như thế này có thể là một khởi đầu tuyệt vời để khám phá chức năng nào là khối xây dựng tự nhiên trong mã của bạn. Trong phần còn lại của phần này, bạn sẽ điền vào các chi tiết còn thiếu

  • Triển khai
    [
        ["When was the first known use of the word 'quiz'", "1781"],
        ["Which built-in function can get information from the user", "input"],
    ]
    
    332
  • Thực hiện
    [
        ["When was the first known use of the word 'quiz'", "1781"],
        ["Which built-in function can get information from the user", "input"],
    ]
    
    333
  • Xem lại
    [
        ["When was the first known use of the word 'quiz'", "1781"],
        ["Which built-in function can get information from the user", "input"],
    ]
    
    334

Bây giờ, bạn sẽ thực hiện những thay đổi khá quan trọng đối với mã của ứng dụng bài kiểm tra khi bạn đang tái cấu trúc nó để sử dụng các hàm. Trước khi làm như vậy, bạn nên đảm bảo rằng mình có thể hoàn nguyên về trạng thái hiện tại mà bạn biết là có hiệu quả. Bạn có thể thực hiện việc này bằng cách lưu một bản sao mã của mình bằng một tên tệp khác hoặc bằng cách thực hiện cam kết nếu bạn đang sử dụng hệ thống kiểm soát phiên bản

Khi bạn đã lưu mã hiện tại của mình một cách an toàn, hãy bắt đầu với một

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 mới chỉ chứa các mục nhập và. Bạn có thể sao chép chúng từ phiên bản trước của bạn

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
74

Hãy nhớ rằng bạn chỉ sắp xếp lại mã của mình. Bạn không thêm chức năng mới, vì vậy bạn sẽ không cần nhập bất kỳ thư viện mới nào

Tiếp theo, bạn sẽ triển khai quá trình tiền xử lý cần thiết. Trong trường hợp này, điều này có nghĩa là bạn sẽ chuẩn bị cấu trúc dữ liệu

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22 để nó sẵn sàng được sử dụng trong vòng lặp chính của bạn. Hiện tại, bạn có thể giới hạn số lượng câu hỏi và đảm bảo rằng chúng được liệt kê theo thứ tự ngẫu nhiên

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
75

Lưu ý rằng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
332 xử lý các tham số chung của
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
341 và
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
342. Sau đó, bạn sẽ chuyển vào
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22 và
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
323 cụ thể của mình làm đối số. Điều này có nghĩa là
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
332 không phụ thuộc vào các biến toàn cầu của bạn. Với việc tách rời này, chức năng của bạn tổng quát hơn và sau này bạn có thể dễ dàng thay thế nguồn câu hỏi của mình hơn

Loại bỏ các quảng cáo

Hỏi câu hỏi

Nhìn lại bản phác thảo của bạn cho hàm

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334 và nhớ rằng nó chứa vòng lặp chính của bạn. Đối với mỗi câu hỏi, bạn sẽ gọi
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333. Nhiệm vụ tiếp theo của bạn là thực hiện chức năng trợ giúp đó

Hãy suy nghĩ về những gì

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333 cần làm

  1. Chọn ra câu trả lời đúng từ danh sách các lựa chọn thay thế
  2. Xáo trộn các lựa chọn thay thế
  3. In câu hỏi ra màn hình
  4. In tất cả các phương án ra màn hình
  5. Nhận câu trả lời từ người dùng
  6. Kiểm tra xem câu trả lời của người dùng có hợp lệ không
  7. Kiểm tra xem người dùng đã trả lời đúng hay chưa
  8. Thêm
    [
        ["When was the first known use of the word 'quiz'", "1781"],
        ["Which built-in function can get information from the user", "input"],
    ]
    
    302 vào số câu trả lời đúng nếu câu trả lời đúng

Có rất nhiều việc nhỏ cần làm trong một chức năng và bạn có thể xem xét liệu có khả năng mô đun hóa thêm hay không. Ví dụ: các mục từ 3 đến 6 trong danh sách trên đều liên quan đến tương tác với người dùng và bạn có thể kéo chúng vào một chức năng trợ giúp khác

Để đạt được sự mô đun hóa này, hãy thêm hàm trợ giúp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
350 sau vào mã nguồn của bạn

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
76

Chức năng này chấp nhận một văn bản câu hỏi và một danh sách các lựa chọn thay thế. Sau đó, bạn sử dụng các kỹ thuật tương tự như trước đó để gắn nhãn cho các lựa chọn thay thế và yêu cầu người dùng nhập nhãn hợp lệ. Cuối cùng, bạn trả lại câu trả lời của người dùng

Sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
350 giúp đơn giản hóa việc triển khai
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333 của bạn, vì bạn không còn cần phải xử lý tương tác người dùng. Bạn có thể làm một cái gì đó như sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
77

Trước tiên, bạn sắp xếp lại ngẫu nhiên các phương án trả lời bằng cách sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
324, như bạn đã làm trước đó. Tiếp theo, bạn gọi
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
350, nơi xử lý tất cả thông tin chi tiết về việc nhận câu trả lời từ người dùng. Do đó, bạn có thể hoàn thành
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333 bằng cách kiểm tra tính đúng đắn của câu trả lời. Quan sát rằng bạn trả về
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
302 hoặc
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
301, điều này cho biết hàm gọi liệu câu trả lời có đúng hay không

Ghi chú. Bạn có thể thay thế các giá trị trả về bằng Booleans. Thay vì

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
302, bạn có thể trả về
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
359 và thay vì
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
301, bạn có thể trả về
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
361. Điều này sẽ hiệu quả vì Python coi Booleans là số nguyên trong phép tính

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
78

Trong một số trường hợp, mã của bạn đọc tự nhiên hơn khi bạn sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
359 và
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
361. Trong trường hợp này, bạn đang đếm các câu trả lời đúng, vì vậy việc sử dụng các con số có vẻ trực quan hơn

Bây giờ bạn đã sẵn sàng để triển khai đúng cách

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334. Một điều bạn đã học được khi triển khai
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
332 và
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333 là bạn cần truyền lại những đối số nào

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
79

Như trước đây, bạn sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
27 để giữ bộ đếm đánh số các câu hỏi mà bạn đặt ra. Bạn có thể tăng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
307 dựa trên giá trị trả về của
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333. Lưu ý rằng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334 là chức năng duy nhất của bạn tương tác trực tiếp với
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22 và
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
323

Quá trình tái cấu trúc của bạn đã hoàn tất, ngoại trừ một điều. Nếu bạn chạy

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 ngay bây giờ, thì có vẻ như không có gì xảy ra. Trên thực tế, Python sẽ đọc các biến toàn cục của bạn và xác định các hàm của bạn. Tuy nhiên, bạn không gọi bất kỳ chức năng nào trong số đó. Do đó, bạn cần thêm một lệnh gọi hàm khởi động ứng dụng của mình

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
80

Bạn gọi

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334 ở cuối
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61, bên ngoài bất kỳ chức năng nào. Đó là một cách tốt để bảo vệ một cuộc gọi như vậy đến chức năng chính của bạn bằng một bài kiểm tra
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
376. Đây là một quy ước Python có nghĩa là
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334 được gọi khi bạn chạy
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 dưới dạng tập lệnh, nhưng nó không được gọi khi bạn nhập
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
379 dưới dạng mô-đun

Đó là nó. Bạn đã cấu trúc lại mã của mình thành một số chức năng. Điều này sẽ giúp bạn theo dõi các chức năng của ứng dụng của bạn. Nó cũng sẽ hữu ích trong hướng dẫn này, vì bạn có thể xem xét thay đổi các chức năng riêng lẻ thay vì thay đổi toàn bộ tập lệnh

Đối với phần còn lại của hướng dẫn, bạn sẽ thấy mã đầy đủ của mình được liệt kê trong các hộp có thể thu gọn như bên dưới. Mở rộng những điều này để xem trạng thái hiện tại và có cái nhìn tổng quan về toàn bộ ứng dụng của bạn

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 mã nguồnHiển thị/Ẩn

Mã nguồn đầy đủ của ứng dụng bài kiểm tra của bạn được liệt kê bên dưới

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
81

Chạy ứng dụng của bạn với

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
381

Thông qua bước này, bạn đã cấu trúc lại mã của mình để thuận tiện hơn khi làm việc với. Bạn đã tách các lệnh của mình thành các chức năng được tổ chức tốt mà bạn có thể tiếp tục phát triển. Trong bước tiếp theo, bạn sẽ tận dụng điều này bằng cách cải thiện cách bạn đọc câu hỏi trong ứng dụng của mình

Loại bỏ các quảng cáo

Bước 4. Tách dữ liệu thành tệp riêng

Bạn sẽ tiếp tục hành trình tái cấu trúc của mình trong bước này. Trọng tâm của bạn bây giờ sẽ là cách bạn cung cấp câu hỏi cho ứng dụng của mình

Cho đến nay, bạn đã lưu trữ các câu hỏi trực tiếp trong mã nguồn của mình trong cấu trúc dữ liệu

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22. Tốt hơn là nên tách dữ liệu của bạn khỏi mã của bạn. Sự tách biệt này có thể làm cho mã của bạn dễ đọc hơn, nhưng quan trọng hơn, bạn có thể tận dụng các hệ thống được thiết kế để xử lý dữ liệu nếu nó không ẩn bên trong mã của bạn

Trong phần này, bạn sẽ tìm hiểu cách lưu trữ các câu hỏi của mình trong một tệp dữ liệu riêng được định dạng theo tiêu chuẩn TOML. Các tùy chọn khác—mà bạn sẽ không trình bày trong hướng dẫn này—là lưu trữ câu hỏi ở định dạng tệp khác như JSON hoặc YAML hoặc lưu trữ chúng trong cơ sở dữ liệu, cơ sở dữ liệu quan hệ truyền thống hoặc cơ sở dữ liệu NoSQL

Để xem qua cách bạn sẽ cải thiện mã của mình trong bước này, hãy nhấp vào bên dưới và chuyển đến thư mục

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
383

Nhận mã nguồn. Nhấp vào đây để có quyền truy cập vào mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng bài kiểm tra của mình

Di chuyển câu hỏi sang tệp TOML

TOML được coi là “định dạng tệp cấu hình cho con người” [Nguồn]. Nó được thiết kế để con người có thể đọc được và không phức tạp để phân tích bằng máy tính. Thông tin được trình bày theo cặp khóa-giá trị có thể được ánh xạ tới cấu trúc dữ liệu bảng băm, giống như từ điển Python

TOML hỗ trợ một số loại dữ liệu, bao gồm chuỗi, số nguyên, số dấu phẩy động, Booleans và ngày tháng. Ngoài ra, dữ liệu có thể được cấu trúc trong mảng và bảng, tương tự như danh sách và từ điển của Python, tương ứng. TOML đã trở nên phổ biến trong những năm qua và định dạng này ổn định sau phiên bản 1. 0. 0 của đặc tả định dạng được phát hành vào tháng 1 năm 2021

Tạo một tệp văn bản mới mà bạn sẽ gọi là

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384 và thêm nội dung sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
82

Mặc dù có sự khác biệt giữa cú pháp TOML và cú pháp Python, nhưng bạn sẽ nhận ra các phần tử như sử dụng dấu ngoặc kép [

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
385] cho văn bản và dấu ngoặc vuông [
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
386] cho danh sách các phần tử

Để làm việc với các tệp TOML trong Python, bạn cần một thư viện phân tích chúng. Trong hướng dẫn này, bạn sẽ sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387. Đây sẽ là gói duy nhất bạn sử dụng trong dự án này không nằm trong thư viện chuẩn của Python

Ghi chú. Hỗ trợ TOML được thêm vào thư viện chuẩn của Python trong Python 3. 11. Nếu bạn đã sử dụng Python 3. 11 thì bạn có thể bỏ qua hướng dẫn bên dưới để tạo môi trường ảo và cài đặt

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387. Thay vào đó, bạn có thể bắt đầu viết mã ngay lập tức bằng cách thay thế bất kỳ đề cập nào về
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387 trong mã của mình bằng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
390 tương thích

Ở phần sau của phần này, bạn sẽ học cách viết mã có thể sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
390 nếu mã đó có sẵn và chuyển về
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387 nếu cần

Trước khi cài đặt

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387, bạn nên tạo và kích hoạt một môi trường ảo

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
83

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
84

Sau đó, bạn có thể cài đặt

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387 với
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
395

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
85

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
86

Bạn có thể kiểm tra xem bạn có sẵn

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387 hay không bằng cách phân tích cú pháp
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384 mà bạn đã tạo trước đó. Mở Python REPL của bạn và kiểm tra đoạn mã sau

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
87

Trước tiên, hãy quan sát rằng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
341 là một từ điển Python thông thường có cùng dạng với cấu trúc dữ liệu
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
22 mà bạn đã sử dụng cho đến nay

Bạn có thể sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387 để phân tích thông tin TOML theo hai cách khác nhau. Trong ví dụ trên, bạn sử dụng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
701 để đọc TOML từ một trình xử lý tệp đang mở. Ngoài ra, bạn có thể sử dụng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
702 để đọc TOML từ chuỗi văn bản

Ghi chú. Bạn cần mở tệp bằng cách sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
703 trước khi chuyển chúng tới
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
701. Điều này là để
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387 có thể đảm bảo rằng tệp TOML được xử lý chính xác

Nếu bạn dùng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
702 thì chuỗi bạn truyền vào sẽ được hiểu là UTF-8

Bạn có thể tích hợp tệp TOML vào ứng dụng bài kiểm tra của mình bằng cách cập nhật phần mở đầu của mã, nơi bạn thực hiện nhập và xác định các biến toàn cục

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
88

Thay vì thực hiện một

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
707 đơn giản như bạn đã làm trước đó, bạn bọc quá trình nhập của mình trong một câu lệnh
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
708 …
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
709 lần đầu tiên cố gắng nhập
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
390. Nếu không thành công, thì bạn nhập
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387 nhưng đổi tên thành
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
390. Hiệu quả của việc này là bạn sẽ sử dụng Python 3. 11
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
390 nếu có và tới
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387 nếu không

Bạn đang sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
715 để xử lý đường dẫn đến
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384. Thay vì mã hóa cứng đường dẫn đến
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384, bạn dựa vào biến đặc biệt
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
718. Trên thực tế, bạn đang nói rằng nó nằm trong cùng thư mục với tệp
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 của bạn

Cuối cùng, bạn sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
720 để đọc tệp TOML dưới dạng chuỗi văn bản và sau đó sử dụng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
721 để phân tích chuỗi đó thành từ điển. Như bạn đã thấy trong ví dụ trước, việc tải tệp TOML dẫn đến cấu trúc dữ liệu giống như bạn đã có trước đó cho các câu hỏi của mình. Khi bạn đã thực hiện các thay đổi đối với
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61, ứng dụng bài kiểm tra của bạn sẽ vẫn hoạt động như cũ, mặc dù các câu hỏi được xác định trong tệp TOML thay vì trong mã nguồn của bạn

Hãy tiếp tục và thêm một vài câu hỏi vào tệp TOML của bạn để xác nhận rằng nó đang được sử dụng

Loại bỏ các quảng cáo

Thêm tính linh hoạt cho định dạng dữ liệu của bạn

Bạn đã chuyển dữ liệu câu hỏi của mình ra khỏi mã nguồn và sang định dạng tệp dữ liệu chuyên dụng. Một lợi thế của TOML so với từ điển Python thông thường là bạn có thể thêm một số cấu trúc khác vào dữ liệu của mình trong khi vẫn giữ cho nó khá dễ đọc và dễ bảo trì

Một tính năng đáng chú ý của TOML là các bảng. Đây là những phần được đặt tên ánh xạ tới các từ điển lồng nhau trong Python. Hơn nữa, bạn có thể sử dụng các mảng bảng, được biểu thị bằng danh sách từ điển trong Python

Bạn có thể tận dụng những điều này để rõ ràng hơn khi xác định câu hỏi của mình. Hãy xem xét đoạn mã TOML sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
89

Các bảng thông thường bắt đầu bằng một dòng có dấu ngoặc đơn như

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
723. Bạn chỉ ra một mảng bảng bằng cách sử dụng dấu ngoặc kép, như trên. Bạn có thể phân tích cú pháp TOML bằng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
387

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
60

Điều này dẫn đến một cấu trúc dữ liệu lồng nhau, với một từ điển bên ngoài, trong đó khóa

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
341 trỏ đến một danh sách các từ điển. Các từ điển bên trong có các khóa
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
726,
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
66 và
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
728

Cấu trúc này phức tạp hơn một chút so với những gì bạn đã sử dụng cho đến nay. Tuy nhiên, nó cũng rõ ràng hơn và bạn không cần phải dựa vào các quy ước như phương án trả lời đầu tiên đại diện cho câu trả lời đúng

Bây giờ, bạn sẽ chuyển đổi ứng dụng bài kiểm tra của mình để nó tận dụng cấu trúc dữ liệu mới này cho các câu hỏi của bạn. Đầu tiên, định dạng lại câu hỏi của bạn trong

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384. Bạn nên định dạng chúng như sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61

Mỗi câu hỏi được lưu trữ bên trong một bảng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
341 riêng lẻ với các cặp khóa-giá trị cho văn bản câu hỏi, câu trả lời đúng và các lựa chọn thay thế câu trả lời

Về cơ bản, bạn sẽ cần thực hiện hai thay đổi đối với mã nguồn ứng dụng của mình để sử dụng định dạng mới

  1. Đọc câu hỏi từ danh sách
    [
        ["When was the first known use of the word 'quiz'", "1781"],
        ["Which built-in function can get information from the user", "input"],
    ]
    
    341 bên trong
  2. Sử dụng từ điển câu hỏi bên trong khi đặt câu hỏi

Những thay đổi này liên quan đến cấu trúc dữ liệu chính của bạn, vì vậy chúng yêu cầu một số thay đổi mã nhỏ trong toàn bộ mã của bạn

Đầu tiên, thay đổi cách bạn đọc các câu hỏi từ tệp TOML

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
62

Bạn thay đổi

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
332 để đọc tệp TOML và chọn ra danh sách
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
341. Ngoài ra, bạn có thể đơn giản hóa vòng lặp chính trong
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334 vì tất cả thông tin về một câu hỏi đều có trong từ điển. Bạn không theo dõi văn bản câu hỏi và các lựa chọn thay thế một cách riêng biệt

Điểm sau này cũng yêu cầu một số thay đổi trong

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
63

Bây giờ, bạn chọn văn bản câu hỏi, câu trả lời đúng và câu trả lời thay thế một cách rõ ràng từ từ điển

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
726 mới. Một điều thú vị với điều này là nó dễ đọc hơn so với quy ước trước đó về việc cho rằng phương án trả lời đầu tiên là câu trả lời đúng

Bạn không cần thực hiện bất kỳ thay đổi nào trong

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
350, vì chức năng đó đã xử lý văn bản câu hỏi và danh sách các lựa chọn thay thế nói chung. Điều đó đã không thay đổi

Bạn có thể tìm thấy mã nguồn đầy đủ, hiện tại của ứng dụng của mình bên trong các phần được thu gọn bên dưới

____tệp dữ liệu 1384Hiển thị/Ẩn

Toàn bộ tệp dữ liệu

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384 được sao chép bên dưới

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
64

Lưu tệp này vào cùng thư mục với

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 mã nguồnHiển thị/Ẩn

Mã nguồn đầy đủ của ứng dụng bài kiểm tra của bạn được liệt kê bên dưới

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
65

Chạy ứng dụng của bạn với

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
381

Định dạng linh hoạt mới của bạn để xác định câu hỏi cung cấp cho bạn một số tùy chọn trong việc thêm nhiều chức năng hơn vào ứng dụng bài kiểm tra của bạn. Bạn sẽ đi sâu vào một số trong số này trong bước tiếp theo

Loại bỏ các quảng cáo

Bước 5. Mở rộng chức năng bài kiểm tra của bạn

Trong bước thứ năm này, bạn sẽ thêm nhiều chức năng hơn vào ứng dụng bài kiểm tra của mình. Cuối cùng, việc tái cấu trúc mà bạn đã thực hiện ở các bước trước sẽ được đền đáp. Bạn sẽ thêm các tính năng sau

  • Câu hỏi có nhiều câu trả lời đúng
  • Gợi ý có thể chỉ ra câu trả lời đúng
  • Giải thích có thể đóng vai trò là khoảnh khắc giảng dạy

Kết thúc bước này, ứng dụng của bạn sẽ hoạt động như sau

Những tính năng mới này mang đến trải nghiệm thú vị hơn cho bất kỳ ai thử thách bản thân thông qua ứng dụng đố vui của bạn. Bạn có thể xem mã nguồn ứng dụng của mình trông như thế nào khi hoàn thành bước này bằng cách nhấp vào bên dưới và chuyển vào thư mục

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
743

Nhận mã nguồn. Nhấp vào đây để có quyền truy cập vào mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng bài kiểm tra của mình

Cho phép nhiều câu trả lời đúng

Một số câu hỏi có thể có nhiều câu trả lời đúng và sẽ thật tuyệt nếu bài kiểm tra của bạn cũng có thể xử lý những câu trả lời đó. Trong phần này, bạn sẽ thêm hỗ trợ cho nhiều câu trả lời đúng

Trước tiên, bạn cần xem xét cách bạn có thể trình bày một số câu trả lời đúng trong tệp dữ liệu

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384 của mình. Một ưu điểm của cấu trúc dữ liệu rõ ràng hơn mà bạn đã giới thiệu ở bước trước đó là bạn cũng có thể sử dụng một mảng để chỉ định các câu trả lời đúng. Thay thế mỗi khóa
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
66 trong tệp TOML của bạn bằng khóa
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
746 bao bọc mỗi câu trả lời đúng trong dấu ngoặc vuông [
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
386]

Tệp câu hỏi của bạn sau đó sẽ trông giống như sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
66

Đối với các câu hỏi cũ chỉ có một câu trả lời đúng, sẽ chỉ có một câu trả lời được liệt kê trong mảng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
746. Câu hỏi cuối cùng ở trên cho thấy một ví dụ về câu hỏi có hai phương án trả lời đúng

Khi cấu trúc dữ liệu của bạn được cập nhật, bạn cũng sẽ cần triển khai tính năng này trong mã của mình. Bạn không cần thực hiện bất kỳ thay đổi nào trong

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334 hoặc
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
332. Trong
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333, bạn cần kiểm tra xem tất cả các câu trả lời đúng đã được đưa ra chưa, trong khi ở
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
350, bạn cần có khả năng đọc nhiều câu trả lời từ người dùng

Bắt đầu với thử thách sau. Làm cách nào để người dùng có thể nhập nhiều câu trả lời và làm cách nào bạn có thể xác thực rằng mỗi câu trả lời đều hợp lệ? . Sau đó, bạn có thể chuyển đổi chuỗi thành danh sách như sau

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
67

Bạn có thể sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
753 để chia trực tiếp trên dấu phẩy. Tuy nhiên, trước tiên, thay thế dấu phẩy bằng dấu cách và sau đó phân tách trên khoảng trắng mặc định sẽ thêm một chút khoan dung với khoảng trắng được phép xung quanh dấu phẩy. Đây sẽ là một trải nghiệm tốt hơn cho người dùng của bạn, vì họ có thể viết
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
754,
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
755 hoặc thậm chí là
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
756 mà không cần dấu phẩy và chương trình của bạn sẽ diễn giải nó theo ý muốn

Tuy nhiên, việc kiểm tra các câu trả lời hợp lệ trở nên phức tạp hơn một chút. Do đó, bạn thay thế vòng lặp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
9 chặt chẽ bằng một vòng lặp linh hoạt hơn. Để lặp lại cho đến khi bạn nhận được câu trả lời hợp lệ, bạn bắt đầu một vòng lặp vô hạn mà bạn quay lại sau khi tất cả các bài kiểm tra đều thỏa mãn. Đổi tên
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
350 thành
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
759 và cập nhật như sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
68

Trước khi xem xét kỹ các chi tiết trong mã, hãy chạy thử chức năng này

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
69

Hàm của bạn trước tiên kiểm tra xem câu trả lời có bao gồm số lượng lựa chọn phù hợp không. Sau đó, mỗi cái được kiểm tra để đảm bảo rằng đó là một lựa chọn hợp lệ. Nếu bất kỳ kiểm tra nào trong số này không thành công, thì một thông báo hữu ích sẽ được in cho người dùng

Trong mã, bạn cũng cố gắng xử lý sự khác biệt giữa một và một số mục khi nói đến ngữ pháp. Bạn sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
760 để sửa đổi chuỗi văn bản để bao gồm số nhiều khi cần

Ngoài ra, bạn chuyển đổi các câu trả lời thành một tập hợp để nhanh chóng bỏ qua các phương án trùng lặp. Một chuỗi trả lời như

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
761 được hiểu là
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
762

Cuối cùng, lưu ý rằng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
759 trả về một danh sách các chuỗi thay vì chuỗi đơn giản được trả về bởi
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
350

Tiếp theo, bạn điều chỉnh

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333 với khả năng có nhiều câu trả lời đúng. Vì
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
759 đã xử lý hầu hết các vấn đề phức tạp nên việc còn lại là kiểm tra tất cả các câu trả lời thay vì chỉ một. Nhớ lại rằng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
726 là một từ điển có tất cả thông tin về một câu hỏi, vì vậy bạn không cần phải vượt qua
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
728 nữa

Vì thứ tự của các câu trả lời không liên quan nên bạn sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
769 khi so sánh các câu trả lời đã cho với câu trả lời đúng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
70

Bạn chỉ ghi điểm cho người dùng nếu họ tìm thấy tất cả các câu trả lời đúng. Nếu không, bạn liệt kê tất cả các câu trả lời đúng. Bây giờ bạn có thể chạy lại ứng dụng bài kiểm tra Python của mình

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
71

Cho phép nhiều câu trả lời đúng giúp bạn linh hoạt hơn trong các loại câu hỏi mà bạn có thể hỏi trong các câu đố của mình

Loại bỏ các quảng cáo

Thêm gợi ý để trợ giúp người dùng

Đôi khi bạn được hỏi một câu hỏi, bạn cần một chút trợ giúp để chạy bộ nhớ của mình. Cung cấp cho người dùng tùy chọn xem gợi ý có thể làm cho các câu đố của bạn thú vị hơn. Trong phần này, bạn sẽ mở rộng ứng dụng của mình để bao gồm các gợi ý

Bạn có thể bao gồm các gợi ý trong tệp dữ liệu

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384 của mình, chẳng hạn bằng cách thêm
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
771 làm cặp khóa-giá trị tùy chọn

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
72

Mỗi câu hỏi trong tệp TOML được đại diện bởi một từ điển trong Python. Các trường

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
771 mới hiển thị dưới dạng khóa mới trong các từ điển đó. Một tác dụng của điều này là bạn không cần thay đổi cách đọc dữ liệu câu hỏi, ngay cả khi bạn thực hiện những thay đổi nhỏ đối với cấu trúc dữ liệu của mình

Thay vào đó, bạn điều chỉnh mã của mình để tận dụng lợi thế của trường tùy chọn mới. Trong

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333, bạn chỉ cần thực hiện một thay đổi nhỏ

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
73

Bạn sử dụng

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
774 thay vì
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
775 vì không phải câu hỏi nào cũng có gợi ý. Nếu một trong các từ điển
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
726 không định nghĩa
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
777 là khóa, thì
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
774 trả về
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
779, sau đó được chuyển vào
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
759

Một lần nữa, bạn sẽ thực hiện những thay đổi lớn đối với _______ 1759. Bạn sẽ thêm gợi ý làm một trong những lựa chọn thay thế câu trả lời, với nhãn dấu chấm hỏi đặc biệt [

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
782]

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
74

Nếu một gợi ý được cung cấp, thì nó sẽ được thêm vào cuối

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
319. Sau đó, người dùng có thể sử dụng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
782 để xem gợi ý được in ra màn hình. Nếu bạn kiểm tra ứng dụng bài kiểm tra của mình, thì bây giờ bạn sẽ nhận được một chút trợ giúp thân thiện

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
75

Trong phần tiếp theo, bạn sẽ thêm một tính năng tương tự. Ngoài việc hiển thị gợi ý tùy chọn trước khi người dùng trả lời câu hỏi, bạn sẽ hiển thị lời giải thích sau khi họ trả lời câu hỏi đó

Thêm giải thích để tăng cường học tập

Bạn có thể triển khai giải thích tương tự như cách bạn triển khai gợi ý trong phần trước. Trước tiên, bạn sẽ thêm trường

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
785 tùy chọn vào tệp dữ liệu của mình. Sau đó, trong ứng dụng của bạn, bạn sẽ hiển thị lời giải thích sau khi người dùng trả lời câu hỏi

Bắt đầu với việc thêm các khóa

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
785 vào
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
76

TOML hỗ trợ bằng cách sử dụng dấu ngoặc kép [

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
788] giống như Python. Đây là những điều tuyệt vời cho những lời giải thích có thể kéo dài một vài câu

Phần giải thích sẽ được in ra màn hình sau khi người dùng trả lời câu hỏi. Nói cách khác, phần giải thích không phải là một phần của tương tác người dùng được thực hiện trong

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
759. Thay vào đó, bạn sẽ in chúng bên trong
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
77

Bởi vì bạn in lời giải thích sau khi đưa ra phản hồi cho người dùng về việc câu trả lời của họ có đúng hay không, nên bạn không thể quay lại bên trong khối

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
7 …
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
63 nữa. Do đó, bạn di chuyển câu lệnh
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
793 đến cuối hàm

Lời giải thích của bạn trông giống như sau khi bạn chạy ứng dụng bài kiểm tra của mình

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
78

Các cải tiến cho ứng dụng bài kiểm tra Python của bạn cộng lại. Vui lòng mở rộng các phần được thu gọn bên dưới để xem mã nguồn đầy đủ với tất cả các tính năng mới của bạn

____tệp dữ liệu 1384Hiển thị/Ẩn

Toàn bộ tệp dữ liệu

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384 được sao chép bên dưới

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
79

Lưu tệp này vào cùng thư mục với

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 mã nguồnHiển thị/Ẩn

Mã nguồn đầy đủ của ứng dụng bài kiểm tra của bạn được liệt kê bên dưới

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
0

Chạy ứng dụng của bạn với

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
381

Ở bước cuối cùng, bạn sẽ thêm một tính năng nữa. hỗ trợ cho một số chủ đề bài kiểm tra trong ứng dụng của bạn

Bước 6. Hỗ trợ một số chủ đề câu đố

Trong phần này, bạn sẽ thực hiện một cải tiến cuối cùng giúp ứng dụng bài kiểm tra Python của bạn vui nhộn, đa dạng và thú vị hơn. Bạn sẽ thêm tùy chọn nhóm các câu hỏi thành các chủ đề khác nhau và cho phép người dùng của bạn chọn chủ đề mà họ sẽ được hỏi về

Phiên bản cuối cùng của ứng dụng bài kiểm tra Python của bạn sẽ như sau

Nhiều chủ đề và câu hỏi mới sẽ giữ cho ứng dụng bài kiểm tra của bạn luôn mới. Nhấp vào bên dưới và điều hướng đến thư mục

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
799 để xem mã nguồn sẽ trông như thế nào sau khi bạn thêm những thứ này

Nhận mã nguồn. Nhấp vào đây để có quyền truy cập vào mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng bài kiểm tra của mình

Các phần trong tệp TOML có thể được lồng vào nhau. Bạn tạo các bảng lồng nhau bằng cách thêm dấu chấm [

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
800] vào tiêu đề phần. Để làm ví dụ minh họa, hãy xem xét tài liệu TOML sau

>>>

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
1

Ở đây, phần tiêu đề

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
801 được biểu thị là
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
802 được lồng trong
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
803. Tương tự, các khóa có dấu chấm cũng được hiểu là từ điển lồng nhau, bằng chứng là
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
804 trong ví dụ này

Bạn có thể sắp xếp lại

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384 để bao gồm một phần cho từng chủ đề. Ngoài các mảng
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
341 lồng nhau, bạn sẽ thêm khóa
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
807 cung cấp tên cho từng chủ đề. Cập nhật tệp dữ liệu của bạn để sử dụng định dạng sau

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
2

Bây giờ, có hai chủ đề được bao gồm trong tệp dữ liệu. Python và thủ đô. Trong mỗi phần chủ đề, cấu trúc bảng câu hỏi vẫn như cũ. Điều này có nghĩa là thay đổi duy nhất bạn cần thực hiện là cách bạn chuẩn bị các câu hỏi.

Bạn bắt đầu bằng cách đọc và phân tích cú pháp

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384. Tiếp theo, bạn chọn ra từng chủ đề và lưu trữ nó trong một từ điển mới, tạm thời. Bạn cần hỏi người dùng về chủ đề họ muốn thử. May mắn thay, bạn có thể sử dụng lại
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
759 để nhận thông tin về điều này. Cuối cùng, bạn chọn ra các câu hỏi thuộc chủ đề đã chọn và xáo trộn chúng lên

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
3

Cấu trúc dữ liệu được trả về bởi

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
332 vẫn giống như trước đây, vì vậy bạn không cần thực hiện bất kỳ thay đổi nào đối với
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
334,
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
333 hoặc
[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
759. Khi những loại cập nhật này chỉ yêu cầu bạn chỉnh sửa một hoặc một số chức năng, thì đó là một dấu hiệu tốt cho thấy mã của bạn có cấu trúc tốt, có tính trừu tượng tốt

Chạy ứng dụng bài kiểm tra Python của bạn. Bạn sẽ được chào đón bởi lời nhắc chủ đề mới

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
4

Điều này kết thúc phần hướng dẫn của cuộc hành trình này. Bạn đã tạo một ứng dụng bài kiểm tra Python mạnh mẽ trong thiết bị đầu cuối. Bạn có thể xem toàn bộ mã nguồn cũng như danh sách các câu hỏi bằng cách mở rộng các hộp bên dưới

____tệp dữ liệu 1384Hiển thị/Ẩn

Toàn bộ tệp dữ liệu

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
384 được sao chép bên dưới

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
5

Lưu tệp này vào cùng thư mục với

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
61 mã nguồnHiển thị/Ẩn

Mã nguồn đầy đủ của ứng dụng bài kiểm tra của bạn được liệt kê ở đây

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
6

Chạy ứng dụng của bạn với

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
381

Bạn cũng có thể truy cập mã nguồn và tệp câu hỏi bằng cách nhấp vào bên dưới

Nhận mã nguồn. Nhấp vào đây để có quyền truy cập vào mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng bài kiểm tra của mình

Bạn sẽ tìm thấy phiên bản cuối cùng của ứng dụng trong thư mục

[
    ["When was the first known use of the word 'quiz'", "1781"],
    ["Which built-in function can get information from the user", "input"],
]
799

Phần kết luận

Làm tốt lắm. Bạn đã tạo một ứng dụng quiz linh hoạt và hữu ích với Python. Đồng thời, bạn đã học được cách bắt đầu với một tập lệnh cơ bản và xây dựng nó thành một chương trình phức tạp hơn

Trong hướng dẫn này, bạn đã học cách

  • Tương tác với người dùng trong thiết bị đầu cuối
  • Cải thiện khả năng sử dụng ứng dụng của bạn
  • Tái cấu trúc ứng dụng của bạn để liên tục cải thiện nó
  • Lưu trữ dữ liệu trong các tệp dữ liệu chuyên dụng

Bây giờ, hãy vui vẻ với ứng dụng bài kiểm tra của bạn. Thêm một số câu hỏi của riêng bạn và thách thức bạn bè của bạn. Chia sẻ câu hỏi hay nhất của bạn và chủ đề bài kiểm tra trong phần bình luận bên dưới

Bước tiếp theo

Khi bạn làm theo hướng dẫn này, bạn đã tạo một ứng dụng bài kiểm tra đầy đủ tính năng. Tuy nhiên, vẫn còn nhiều cơ hội để cải thiện dự án

Dưới đây là một số ý tưởng cho các tính năng bổ sung

  • người tạo câu đố. Thêm một ứng dụng riêng biệt yêu cầu câu hỏi và câu trả lời một cách tương tác và lưu trữ chúng ở định dạng TOML thích hợp
  • Lưu trữ dữ liệu trong cơ sở dữ liệu. Thay thế tệp dữ liệu TOML bằng cơ sở dữ liệu thích hợp
  • Trung tâm câu hỏi. Tạo cơ sở dữ liệu câu hỏi trung tâm trực tuyến mà ứng dụng của bạn có thể kết nối với
  • thử thách nhiều người dùng. Cho phép những người dùng khác nhau thách thức nhau trong một cuộc thi nhỏ

Bạn cũng có thể sử dụng lại logic trong ứng dụng bài kiểm tra này nhưng thay đổi lớp trình bày ở mặt trước. Có lẽ bạn có thể chuyển đổi dự án thành một ứng dụng web hoặc tạo một ứng dụng flashcards để giúp bạn chuẩn bị cho các câu đố của mình. Hãy chia sẻ những cải tiến của bạn trong phần bình luận bên dưới

Đánh dấu là đã hoàn thành

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Geir Arne Hjelle

Geir Arne là một Pythonista cuồng nhiệt và là thành viên của nhóm hướng dẫn Real Python

» Thông tin thêm về Geir Arne

Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Aldren

kate

Philipp

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Làm cách nào để tạo một bài kiểm tra bằng Python?

Tạo ứng dụng đố vui bằng Python .
Thử nghiệm. Ứng dụng câu đố Python của bạn
Tổng quan dự án
điều kiện tiên quyết
Bước 1. Hỏi câu hỏi. .
Bước 2. Làm cho ứng dụng của bạn thân thiện với người dùng. .
Bước 3. Sắp xếp mã của bạn với các chức năng. .
Bước 4. Tách dữ liệu thành tệp riêng. .
Bước 5. Mở rộng chức năng bài kiểm tra của bạn

4 loại kiểm tra tính cách là gì?

Dưới đây chúng tôi đi sâu vào bốn mô hình phổ biến được sử dụng để xác định các loại tính cách. Chỉ số Loại Myers-Briggs [MBTI], 16 Tính cách, Big 5 và Loại Tính cách A, B, C và D .

Một bài kiểm tra tính cách nên có bao nhiêu câu hỏi?

Số lượng câu hỏi lý tưởng là 7 . Với ít hơn 7, bài kiểm tra dường như không mang lại nhiều trải nghiệm. Nó đi quá nhanh. Hơn 7 câu hỏi thường giống như một lực cản đối với tôi. Tôi cố gắng đưa ra ít nhất 14 câu hỏi, vì vậy 7 câu hỏi cuối cùng tôi sử dụng là 7 câu hỏi hay nhất của tôi thay vì 7 câu hỏi duy nhất của tôi.

Tôi có thể làm bài kiểm tra tính cách trên Google Biểu mẫu không?

Trình tạo biểu mẫu như Google Biểu mẫu và Biểu mẫu của Microsoft khá phổ biến để xây dựng và quản lý các câu đố về tính cách .

Chủ Đề