Mã Python tung hai viên xúc xắc

Trong bài viết này, chúng tôi sẽ tạo một trình giả lập xúc xắc cổ điển với sự trợ giúp của kiến ​​thức cơ bản về Python. Ở đây chúng tôi sẽ sử dụng mô-đun ngẫu nhiên vì chúng tôi ngẫu nhiên hóa trình giả lập xúc xắc cho các kết quả đầu ra ngẫu nhiên

Chức năng được sử dụng

1) ngẫu nhiên. randint(). Hàm này tạo ra một số ngẫu nhiên trong phạm vi nhất định. Dưới đây là việc thực hiện

Sử dụng nhiều vòng lặp trong python thường không phải là cách hiệu quả nhất để hoàn thành các tác vụ số. Thay vào đó, chúng ta nên sử dụng numpy. Với numpy, chúng ta có thể "vector hóa" các hoạt động và dưới mui xe, numpy đang thực hiện tính toán với mã C có giao diện python. Chúng tôi không phải lo lắng về bất cứ điều gì dưới mui xe

Mảng giá trị 2-D

Bắt đầu bằng cách kiểm tra hàm randint của numpy. Hãy viết lại dice_rolls bằng cách sử dụng các hàm numpy và không có vòng lặp

Để làm điều này, chúng tôi sẽ sử dụng np.random.randint để tạo một mảng 2-D gồm các cuộn xúc xắc ngẫu nhiên. Mảng đó sẽ có các hàng dice_count và cột rolls_count--tức là kích thước của mảng là (dice_count, rolls_count)

Chúng tôi sẽ sử dụng mô-đun ngẫu nhiên cho việc này, vì chúng tôi muốn ngẫu nhiên hóa các số mà chúng tôi nhận được từ xúc xắc

Mã Python tung hai viên xúc xắc

Chúng tôi đặt hai biến (tối thiểu và tối đa), số lượng xúc xắc thấp nhất và cao nhất

Sau đó, chúng tôi sử dụng vòng lặp while để người dùng có thể tung xúc xắc lần nữa

Roll_again có thể được đặt thành bất kỳ giá trị nào, nhưng ở đây, nó được đặt thành “có” hoặc “y”,
nhưng bạn cũng có thể thêm các biến thể khác vào nó

Lăn xúc xắc

import random
min = 1
max = 6

roll_again = "yes"

while roll_again == "yes" or roll_again == "y":
    print "Rolling the dices..."
    print "The values are...."
    print random.randint(min, max)
    print random.randint(min, max)

    roll_again = raw_input("Roll the dices again?")

Có liên quan

Đào tạo Python được đề xuất

Khóa học. Python 3 cho người mới bắt đầu

Hơn 15 giờ nội dung video với hướng dẫn có hướng dẫn cho người mới bắt đầu. Tìm hiểu cách tạo các ứng dụng trong thế giới thực và nắm vững kiến ​​thức cơ bản

Toán tử gán tăng cường += về cơ bản giống như total = total + random.randint(1, 6) khi tính tổng các số nguyên (nó phức tạp hơn thế một chút, nhưng điều đó chỉ quan trọng đối với các đối tượng có thể thay đổi như danh sách)

Bạn thậm chí có thể sử dụng a và

def dice(n):
    return sum(random.randint(1, 6) for _ in range(n))

Về cơ bản, điều này thực hiện giống như vòng lặp

def dice(n):
    return sum(random.randint(1, 6) for _ in range(n))
0 trong ví dụ đầu tiên;

Nếu thay vì tung

def dice(n):
    return sum(random.randint(1, 6) for _ in range(n))
1 lần, bạn cần tạo ra
def dice(n):
    return sum(random.randint(1, 6) for _ in range(n))
1 kết quả của 2 lần tung xúc xắc, bạn vẫn cần tung trong vòng lặp và bạn cần thêm kết quả vào danh sách

def dice(n):
    rolls = []
    for i in range(n):
        two_dice = random.randint(1, 6) + random.randint(1, 6)
        rolls.append(two_dice)
    return rolls

Điều này cũng có thể được viết ra một cách cô đọng hơn, với một

def dice(n):
    return [random.randint(1, 6) + random.randint(1, 6) for _ in range(n)]

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

def dice(n):
    return sum(random.randint(1, 6) for _ in range(n))
4 từ danh sách tổng được tạo;

from itertools import product

two_dice_sums = [a + b for a, b in product(range(1, 7), repeat=2)]

def dice(n):
    return [random.choice(two_dice_sums) for _ in range(n)]

Dù bằng cách nào, bạn sẽ nhận được một danh sách có

def dice(n):
    return sum(random.randint(1, 6) for _ in range(n))
1 kết quả

>>> dice(5)
[10, 11, 6, 11, 4]
>>> dice(10)
[3, 7, 10, 3, 6, 6, 6, 11, 9, 3]

Bạn có thể chuyển danh sách tới hàm

def dice(n):
    return sum(random.randint(1, 6) for _ in range(n))
6 để in chúng trên một dòng hoặc trên các dòng riêng biệt

Xây dựng các dự án nhỏ, chẳng hạn như ứng dụng tung xúc xắc giao diện người dùng dựa trên văn bản (TUI), sẽ giúp bạn nâng cao kỹ năng lập trình Python của mình. Bạn sẽ học cách thu thập và xác thực đầu vào của người dùng, nhập mã từ các mô-đun và gói, viết các hàm, sử dụng các vòng lặp và điều kiện

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
4, đồng thời hiển thị gọn gàng đầu ra bằng cách sử dụng các chuỗi và hàm
 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
5

Trong dự án này, bạn sẽ viết mã một ứng dụng mô phỏng các sự kiện tung xúc xắc. Để làm như vậy, bạn sẽ sử dụng mô-đun

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
6 của Python

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

  • Sử dụng
     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    7 để mô phỏng các sự kiện tung xúc xắc
  • Yêu cầu đầu vào của người dùng bằng chức năng
     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    8 tích hợp
  • Phân tích cú pháp và xác thực đầu vào của người dùng
  • Thao tác chuỗi bằng các phương thức, chẳng hạn như
     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    9 và
    $ python dice.py
    How many dice do you want to roll? [1-6] 3
    
    $ python dice.py
    How many dice do you want to roll? [1-6] 7
    Please enter a number from 1 to 6.
    
    0

Bạn cũng sẽ tìm hiểu những kiến ​​thức cơ bản về cách cấu trúc, tổ chức, lập tài liệu và chạy các chương trình và tập lệnh Python của mình

Nhấp vào liên kết bên dưới để tải xuống toàn bộ mã cho ứng dụng tung xúc xắc này và làm theo trong khi bạn tự xây dựng dự án

Nhận mã nguồn. Nhấp vào đây để lấy mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng tung xúc xắc Python của mình

Thử nghiệm

Trong dự án từng bước này, bạn sẽ xây dựng một ứng dụng chạy mô phỏng tung xúc xắc. Ứng dụng sẽ có thể tung tối đa sáu viên xúc xắc, với mỗi viên xúc xắc có sáu mặt. Sau mỗi lần tung, ứng dụng sẽ tạo sơ đồ ASCII của các mặt xúc xắc và hiển thị trên màn hình. Video sau đây minh họa cách thức hoạt động của ứng dụng

Mã Python tung hai viên xúc xắc

Khi chạy ứng dụng giả lập tung xúc xắc, bạn sẽ nhận được lời nhắc hỏi số lượng xúc xắc bạn muốn tung. Sau khi bạn cung cấp một số nguyên hợp lệ từ 1 đến 6, thì ứng dụng sẽ mô phỏng sự kiện lăn và hiển thị sơ đồ các mặt xúc xắc trên màn hình

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

Tổng quan dự án

Ứng dụng giả lập tung xúc xắc của bạn sẽ có giao diện người dùng dựa trên văn bản (TUI) tối thiểu nhưng thân thiện với người dùng, cho phép bạn chỉ định số lượng xúc xắc sáu mặt mà bạn muốn tung. Bạn sẽ sử dụng TUI này để tung xúc xắc tại nhà mà không cần phải bay đến Las Vegas

Dưới đây là mô tả về cách ứng dụng sẽ hoạt động nội bộ

Nhiệm vụ đối với RunTools to UseCode to WriteNhắc người dùng chọn số lượng xúc xắc sáu mặt để tung, sau đó đọc đầu vào của người dùngHàm tích hợp của PythonMột cuộc gọi tới

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
8 với các đối số thích hợpPhân tích và xác thực các phương thức inputString của người dùng, toán tử so sánh và câu lệnh có điều kiệnMột người dùng-

Hãy ghi nhớ những hoạt động nội bộ này, bạn sẽ viết mã ba chức năng tùy chỉnh để cung cấp các tính năng và chức năng chính của ứng dụng. Các chức năng này sẽ xác định API công khai của mã của bạn mà bạn sẽ gọi để đưa ứng dụng vào cuộc sống

Để tổ chức mã của dự án giả lập tung xúc xắc, bạn sẽ tạo một tệp duy nhất có tên là

 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...
2 trong thư mục bạn chọn trong hệ thống tệp của mình. Hãy tiếp tục và tạo tệp để bắt đầu

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

Bạn nên nắm vững các khái niệm và kỹ năng sau đây trước khi bắt đầu xây dựng dự án mô phỏng gieo xúc xắc này

  • Các cách chạy script trong Python
  • Cơ chế
     1# dice.py
     2import random
     3
     4# ...
     5
     6def roll_dice(num_dice):
     7    """Return a list of integers with length `num_dice`.
     8
     9    Each integer in the returned list is a random number between
    10    1 and 6, inclusive.
    11    """
    12    roll_results = []
    13    for _ in range(num_dice):
    14        roll = random.randint(1, 6)
    15        roll_results.append(roll)
    16    return roll_results
    17
    18# ~~~ App's main code block ~~~
    19# ...
    
    3 của Python
  • Khái niệm cơ bản về kiểu dữ liệu Python, chủ yếu là chuỗi và
  • Cấu trúc dữ liệu cơ bản, đặc biệt là danh sách
  • Biến và hằng Python
  • con trăn
  • Giá trị Boolean và
  • Câu điều kiện
  • Python
     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    4 vòng lặp
  • Khái niệm cơ bản về định dạng đầu vào, đầu ra và chuỗi trong Python

Nếu bạn không có tất cả kiến ​​thức tiên quyết trước khi bắt đầu cuộc phiêu lưu viết mã này, thì không sao cả. Bạn có thể tìm hiểu thêm bằng cách tiếp tục và bắt đầu. Bạn luôn có thể dừng lại và xem lại các tài nguyên được liên kết tại đây nếu bạn gặp khó khăn

Bước 1. Viết mã TUI cho ứng dụng tung xúc xắc Python của bạn

Trong bước này, bạn sẽ viết đoạn mã cần thiết để yêu cầu người dùng nhập bao nhiêu viên xúc xắc mà họ muốn tung trong mô phỏng. Bạn cũng sẽ viết mã một hàm Python nhận đầu vào của người dùng, xác thực và trả về dưới dạng số nguyên nếu xác thực thành công. Nếu không, chức năng sẽ yêu cầu đầu vào của người dùng một lần nữa

Để tải xuống mã cho bước này, hãy nhấp vào liên kết sau và điều hướng đến thư mục

 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...
5

Nhận mã nguồn. Nhấp vào đây để lấy mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng tung xúc xắc Python của mình

Lấy đầu vào của người dùng tại dòng lệnh

Để làm bẩn tay, bạn có thể bắt đầu viết mã tương tác với người dùng. Mã này sẽ cung cấp giao diện dựa trên văn bản của ứng dụng và sẽ dựa trên

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
8. Chức năng tích hợp này đọc đầu vào của người dùng từ dòng lệnh. Đối số
 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...
7 của nó cho phép bạn chuyển mô tả về loại đầu vào bạn cần

Khởi động trình soạn thảo hoặc IDE yêu thích của bạn và nhập đoạn mã sau vào tệp

 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...
2 của bạn

 1# dice.py
 2
 3# ~~~ App's main code block ~~~
 4# 1. Get and validate user's input
 5num_dice_input = input("How many dice do you want to roll? [1-6] ")
 6num_dice = parse_input(num_dice_input)

Cuộc gọi của bạn tới

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
8 trên dòng 5 sẽ hiển thị lời nhắc hỏi người dùng muốn gieo bao nhiêu viên xúc xắc. Số phải nằm trong khoảng từ 1 đến 6, bao gồm, như lời nhắc gợi ý

Ghi chú. Bằng cách thêm nhận xét vào dòng 3, bạn đang tách mã chính của ứng dụng khỏi phần mã còn lại mà bạn sẽ thêm vào trong các phần sắp tới

Tương tự như vậy, nhận xét trên dòng 4 phản ánh nhiệm vụ cụ thể mà bạn đang thực hiện tại thời điểm đó. Bạn sẽ tìm thấy nhiều nhận xét như thế này trong các phần khác của hướng dẫn này. Những nhận xét này là tùy chọn, vì vậy vui lòng loại bỏ chúng nếu bạn muốn

Dòng 6 gọi

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
3 và lưu trữ giá trị trả về trong
 1# dice.py
 2# ...
 3
 4# ~~~ App's main code block ~~~
 5# 1. Get and validate user's input
 6num_dice_input = input("How many dice do you want to roll? [1-6] ")
 7num_dice = parse_input(num_dice_input)
 8# 2. Roll the dice
 9roll_results = roll_dice(num_dice)
10
11print(roll_results)  # Remove this line after testing the app
1. Trong phần sau, bạn sẽ thực hiện chức năng này

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

Phân tích cú pháp và xác thực đầu vào của người dùng

Công việc của

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
3 là lấy thông tin đầu vào của người dùng dưới dạng một chuỗi, kiểm tra xem đó có phải là số nguyên hợp lệ không và trả về dưới dạng đối tượng
 1# dice.py
 2# ...
 3
 4# ~~~ App's main code block ~~~
 5# 1. Get and validate user's input
 6num_dice_input = input("How many dice do you want to roll? [1-6] ")
 7num_dice = parse_input(num_dice_input)
 8# 2. Roll the dice
 9roll_results = roll_dice(num_dice)
10
11print(roll_results)  # Remove this line after testing the app
3 của Python. Hãy tiếp tục và thêm phần sau vào tệp
 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...
2 của bạn, ngay trước mã chính của ứng dụng

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...

Đây là cách mã này hoạt động theo từng dòng

  • Dòng 3 định nghĩa

    $ python dice.py
    How many dice do you want to roll? [1-6] 3
    
    $ python dice.py
    How many dice do you want to roll? [1-6] 7
    Please enter a number from 1 to 6.
    
    3, lấy chuỗi đầu vào làm đối số

  • Các dòng 4 đến 9 cung cấp chuỗi tài liệu của hàm. Bao gồm một chuỗi tài liệu có định dạng và thông tin trong các chức năng của bạn là cách thực hành tốt nhất trong lập trình Python vì các chuỗi tài liệu cho phép bạn ghi lại mã của mình

  • Dòng 10 kiểm tra xem đầu vào của người dùng có phải là giá trị hợp lệ cho số lượng xúc xắc tung không. Lệnh gọi tới

     1# dice.py
     2# ...
     3
     4# ~~~ App's main code block ~~~
     5# 1. Get and validate user's input
     6num_dice_input = input("How many dice do you want to roll? [1-6] ")
     7num_dice = parse_input(num_dice_input)
     8# 2. Roll the dice
     9roll_results = roll_dice(num_dice)
    10
    11print(roll_results)  # Remove this line after testing the app
    
    6 sẽ loại bỏ mọi khoảng trắng không mong muốn xung quanh chuỗi đầu vào. Kiểm tra xem đầu vào có nằm trong tập hợp số lượng xúc xắc được phép tung hay không. Trong trường hợp này, bạn sử dụng một tập hợp vì các bài kiểm tra tư cách thành viên trong cấu trúc dữ liệu Python này khá hiệu quả

  • Dòng 11 chuyển đổi đầu vào thành một số nguyên và trả lại cho người gọi

  • Dòng 13 in một thông báo ra màn hình để cảnh báo người dùng về thông tin nhập không hợp lệ, nếu có

  • Dòng 14 thoát khỏi ứng dụng với một ngoại lệ và là

     1# dice.py
     2# ...
     3
     4# ~~~ App's main code block ~~~
     5# 1. Get and validate user's input
     6num_dice_input = input("How many dice do you want to roll? [1-6] ")
     7num_dice = parse_input(num_dice_input)
     8# 2. Roll the dice
     9roll_results = roll_dice(num_dice)
    10
    11print(roll_results)  # Remove this line after testing the app
    
    9 để báo hiệu rằng đã xảy ra sự cố

Với

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
3, bạn xử lý và xác thực thông tin nhập của người dùng tại dòng lệnh. đến trực tiếp từ người dùng hoặc bất kỳ nguồn không đáng tin cậy nào là chìa khóa để ứng dụng của bạn hoạt động đáng tin cậy và an toàn

Ghi chú. Số dòng trong các mẫu mã trong hướng dẫn này nhằm tạo điều kiện giải thích. Hầu hết thời gian, chúng sẽ không khớp với số dòng trong tập lệnh cuối cùng của bạn

Bây giờ bạn đã có TUI thân thiện với người dùng và cơ chế xác thực đầu vào phù hợp, bạn cần đảm bảo rằng các chức năng này hoạt động chính xác. Đó là những gì bạn sẽ làm trong phần sau

Dùng thử TUI của Ứng dụng tung xúc xắc

Để thử mã mà bạn đã viết cho đến nay, hãy mở cửa sổ dòng lệnh và chạy tập lệnh

 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...
2 của bạn

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.

Nếu bạn nhập số nguyên từ 1 đến 6 thì mã không hiển thị thông báo. Mặt khác, nếu đầu vào không phải là số nguyên hợp lệ hoặc nằm ngoài khoảng mục tiêu, thì bạn sẽ nhận được thông báo cho biết rằng số nguyên từ 1 đến 6 là bắt buộc

Cho đến thời điểm này, bạn đã viết mã thành công để yêu cầu và phân tích cú pháp đầu vào của người dùng tại dòng lệnh. Mã này cung cấp TUI của ứng dụng, dựa trên chức năng

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
8 tích hợp sẵn. Bạn cũng đã mã hóa một hàm để xác thực đầu vào của người dùng và trả về dưới dạng một số nguyên. Bây giờ, đã đến lúc tung xúc xắc

Bước 2. Mô phỏng việc tung xúc xắc sáu mặt bằng Python

Ứng dụng tung xúc xắc của bạn hiện cung cấp TUI để lấy thông tin đầu vào của người dùng và xử lý thông tin đó. Tuyệt vời. Để tiếp tục xây dựng chức năng chính của ứng dụng, bạn sẽ viết hàm

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
6, hàm này sẽ cho phép bạn mô phỏng một sự kiện tung xúc xắc. Hàm này sẽ lấy số xúc xắc mà người dùng muốn tung

Mô-đun

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
6 của Python từ thư viện chuẩn cung cấp chức năng tạo các số nguyên giả ngẫu nhiên trong một khoảng thời gian nhất định. Bạn sẽ tận dụng chức năng này để mô phỏng xúc xắc lăn

Để tải xuống mã cho bước này, hãy nhấp vào liên kết sau và xem bên trong thư mục

$ python dice.py
How many dice do you want to roll? [1-6] 5
[6, 1, 3, 6, 6]

$ python dice.py
How many dice do you want to roll? [1-6] 2
[2, 6]
6

Nhận mã nguồn. Nhấp vào đây để lấy mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng tung xúc xắc Python của mình

Đây là mã triển khai

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
6

 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...

Trong đoạn mã này, dòng 2 nhập

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
6 vào không gian tên hiện tại của bạn. Quá trình nhập này cho phép bạn truy cập hàm
$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
5 sau. Đây là một sự cố của phần còn lại của mã

  • Dòng 6 định nghĩa

    $ python dice.py
    How many dice do you want to roll? [1-6] 3
    
    $ python dice.py
    How many dice do you want to roll? [1-6] 7
    Please enter a number from 1 to 6.
    
    6, lấy một đối số biểu thị số lượng xúc xắc tung trong một cuộc gọi nhất định

  • Dòng 7 đến 11 cung cấp hàm

  • Dòng 12 tạo một danh sách trống,

    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    │         │ │    ●    │ │    ●    │ │         │
    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    
    1, để lưu kết quả của mô phỏng tung xúc xắc

  • Dòng 13 định nghĩa một vòng lặp

     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    4 lặp lại một lần cho mỗi con súc sắc mà người dùng muốn tung

  • Dòng 14 gọi

    $ python dice.py
    How many dice do you want to roll? [1-6] 3
    
    $ python dice.py
    How many dice do you want to roll? [1-6] 7
    Please enter a number from 1 to 6.
    
    5 để tạo một số nguyên giả ngẫu nhiên từ 1 đến 6, bao gồm cả. Cuộc gọi này tạo ra một số duy nhất trên mỗi lần lặp. Con số này biểu thị kết quả của việc tung một con súc sắc sáu mặt

  • Dòng 15 nối thêm kết quả gieo xúc xắc hiện tại vào

    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    │         │ │    ●    │ │    ●    │ │         │
    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    
    1

  • Dòng 16 trả về danh sách kết quả mô phỏng gieo xúc xắc

Để thử chức năng mới tạo của bạn, hãy thêm các dòng mã sau vào cuối tệp

 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...
2 của bạn

 1# dice.py
 2# ...
 3
 4# ~~~ App's main code block ~~~
 5# 1. Get and validate user's input
 6num_dice_input = input("How many dice do you want to roll? [1-6] ")
 7num_dice = parse_input(num_dice_input)
 8# 2. Roll the dice
 9roll_results = roll_dice(num_dice)
10
11print(roll_results)  # Remove this line after testing the app

Trong đoạn mã này, dòng 9 gọi

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
6 với đối số là
 1# dice.py
 2# ...
 3
 4# ~~~ App's main code block ~~~
 5# 1. Get and validate user's input
 6num_dice_input = input("How many dice do you want to roll? [1-6] ")
 7num_dice = parse_input(num_dice_input)
 8# 2. Roll the dice
 9roll_results = roll_dice(num_dice)
10
11print(roll_results)  # Remove this line after testing the app
1. Dòng 11 gọi
 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
5 để hiển thị kết quả dưới dạng danh sách các số trên màn hình của bạn. Mỗi số trong danh sách đại diện cho kết quả cho một lần chết. Bạn có thể xóa dòng 11 sau khi kiểm tra mã của mình

Hãy tiếp tục và chạy ứng dụng của bạn từ dòng lệnh

$ python dice.py
How many dice do you want to roll? [1-6] 5
[6, 1, 3, 6, 6]

$ python dice.py
How many dice do you want to roll? [1-6] 2
[2, 6]

Danh sách kết quả trên màn hình của bạn sẽ khác vì bạn đang tạo các số giả ngẫu nhiên của riêng mình. Trong ví dụ này, bạn mô phỏng lần lượt tung năm và hai viên xúc xắc. Giá trị của mỗi viên xúc xắc nằm trong khoảng từ 1 đến 6 vì bạn đang làm việc với xúc xắc sáu mặt

Bây giờ bạn đã viết và thử mã mô phỏng sự kiện tung xúc xắc, đã đến lúc tiếp tục và cung cấp cho ứng dụng của bạn một cách hào nhoáng để hiển thị các kết quả này. Đó là những gì bạn sẽ làm trong phần tiếp theo

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

Bước 3. Tạo và hiển thị Biểu đồ ASCII của các mặt xúc xắc

Tại thời điểm này, ứng dụng của bạn đã mô phỏng việc tung một số viên xúc xắc và lưu trữ kết quả dưới dạng danh sách các số. Tuy nhiên, một danh sách các số trông không hấp dẫn từ quan điểm của người dùng. Bạn cần một đầu ra đẹp hơn để ứng dụng của bạn trông chuyên nghiệp

Trong phần này, bạn sẽ viết mã để tạo sơ đồ hiển thị các mặt của tối đa sáu viên xúc xắc. Để làm điều này, bạn sẽ tạo một chút nghệ thuật ASCII

Nhấp vào liên kết bên dưới để tải xuống mã cho bước này để bạn có thể làm theo cùng với dự án. Bạn sẽ tìm thấy thứ mình cần trong thư mục

~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│  ●   ●  │ │         │ │  ●      │ │  ●      │
│         │ │    ●    │ │    ●    │ │         │
│  ●   ●  │ │         │ │      ●  │ │      ●  │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
9

Nhận mã nguồn. Nhấp vào đây để lấy mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng tung xúc xắc Python của mình

Thiết lập sơ đồ mặt xúc xắc

Ứng dụng giả lập tung xúc xắc của bạn cần một cách để hiển thị kết quả của việc tung xúc xắc. Để làm được điều này, bạn sẽ sử dụng sơ đồ ASCII của các mặt xúc xắc sẽ hiển thị kết quả của việc tung số lượng xúc xắc sáu mặt mong muốn. Ví dụ, sau khi gieo 4 viên xúc xắc, biểu đồ sẽ trông như thế này

~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│  ●   ●  │ │         │ │  ●      │ │  ●      │
│         │ │    ●    │ │    ●    │ │         │
│  ●   ●  │ │         │ │      ●  │ │      ●  │
└─────────┘ └─────────┘ └─────────┘ └─────────┘

Mỗi mặt khuôn trong sơ đồ này phản ánh giá trị có được từ một lần lặp mô phỏng. Để bắt đầu mã hóa chức năng để xây dựng sơ đồ này, bạn cần tập hợp một số nghệ thuật ASCII. Quay lại trình chỉnh sửa mã của bạn và thêm vào như sau

 1# dice.py
 2import random
 3
 4DICE_ART = {
 5    1: (
 6        "┌─────────┐",
 7        "│         │",
 8        "│    ●    │",
 9        "│         │",
10        "└─────────┘",
11    ),
12    2: (
13        "┌─────────┐",
14        "│  ●      │",
15        "│         │",
16        "│      ●  │",
17        "└─────────┘",
18    ),
19    3: (
20        "┌─────────┐",
21        "│  ●      │",
22        "│    ●    │",
23        "│      ●  │",
24        "└─────────┘",
25    ),
26    4: (
27        "┌─────────┐",
28        "│  ●   ●  │",
29        "│         │",
30        "│  ●   ●  │",
31        "└─────────┘",
32    ),
33    5: (
34        "┌─────────┐",
35        "│  ●   ●  │",
36        "│    ●    │",
37        "│  ●   ●  │",
38        "└─────────┘",
39    ),
40    6: (
41        "┌─────────┐",
42        "│  ●   ●  │",
43        "│  ●   ●  │",
44        "│  ●   ●  │",
45        "└─────────┘",
46    ),
47}
48DIE_HEIGHT = len(DICE_ART[1])
49DIE_WIDTH = len(DICE_ART[1][0])
50DIE_FACE_SEPARATOR = " "
51
52# ...

Trong các dòng 4 đến 47, bạn vẽ sáu mặt xúc xắc bằng các ký tự ASCII. Bạn lưu trữ các khuôn mặt trong

 1# dice.py
 2import random
 3
 4DICE_ART = {
 5    1: (
 6        "┌─────────┐",
 7        "│         │",
 8        "│    ●    │",
 9        "│         │",
10        "└─────────┘",
11    ),
12    2: (
13        "┌─────────┐",
14        "│  ●      │",
15        "│         │",
16        "│      ●  │",
17        "└─────────┘",
18    ),
19    3: (
20        "┌─────────┐",
21        "│  ●      │",
22        "│    ●    │",
23        "│      ●  │",
24        "└─────────┘",
25    ),
26    4: (
27        "┌─────────┐",
28        "│  ●   ●  │",
29        "│         │",
30        "│  ●   ●  │",
31        "└─────────┘",
32    ),
33    5: (
34        "┌─────────┐",
35        "│  ●   ●  │",
36        "│    ●    │",
37        "│  ●   ●  │",
38        "└─────────┘",
39    ),
40    6: (
41        "┌─────────┐",
42        "│  ●   ●  │",
43        "│  ●   ●  │",
44        "│  ●   ●  │",
45        "└─────────┘",
46    ),
47}
48DIE_HEIGHT = len(DICE_ART[1])
49DIE_WIDTH = len(DICE_ART[1][0])
50DIE_FACE_SEPARATOR = " "
51
52# ...
0, một từ điển ánh xạ từng khuôn mặt tới giá trị số nguyên tương ứng của nó

Dòng 48 định nghĩa

 1# dice.py
 2import random
 3
 4DICE_ART = {
 5    1: (
 6        "┌─────────┐",
 7        "│         │",
 8        "│    ●    │",
 9        "│         │",
10        "└─────────┘",
11    ),
12    2: (
13        "┌─────────┐",
14        "│  ●      │",
15        "│         │",
16        "│      ●  │",
17        "└─────────┘",
18    ),
19    3: (
20        "┌─────────┐",
21        "│  ●      │",
22        "│    ●    │",
23        "│      ●  │",
24        "└─────────┘",
25    ),
26    4: (
27        "┌─────────┐",
28        "│  ●   ●  │",
29        "│         │",
30        "│  ●   ●  │",
31        "└─────────┘",
32    ),
33    5: (
34        "┌─────────┐",
35        "│  ●   ●  │",
36        "│    ●    │",
37        "│  ●   ●  │",
38        "└─────────┘",
39    ),
40    6: (
41        "┌─────────┐",
42        "│  ●   ●  │",
43        "│  ●   ●  │",
44        "│  ●   ●  │",
45        "└─────────┘",
46    ),
47}
48DIE_HEIGHT = len(DICE_ART[1])
49DIE_WIDTH = len(DICE_ART[1][0])
50DIE_FACE_SEPARATOR = " "
51
52# ...
1, chứa số hàng mà một mặt nhất định sẽ chiếm. Trong ví dụ này, mỗi mặt chiếm năm hàng. Tương tự, dòng 49 định nghĩa
 1# dice.py
 2import random
 3
 4DICE_ART = {
 5    1: (
 6        "┌─────────┐",
 7        "│         │",
 8        "│    ●    │",
 9        "│         │",
10        "└─────────┘",
11    ),
12    2: (
13        "┌─────────┐",
14        "│  ●      │",
15        "│         │",
16        "│      ●  │",
17        "└─────────┘",
18    ),
19    3: (
20        "┌─────────┐",
21        "│  ●      │",
22        "│    ●    │",
23        "│      ●  │",
24        "└─────────┘",
25    ),
26    4: (
27        "┌─────────┐",
28        "│  ●   ●  │",
29        "│         │",
30        "│  ●   ●  │",
31        "└─────────┘",
32    ),
33    5: (
34        "┌─────────┐",
35        "│  ●   ●  │",
36        "│    ●    │",
37        "│  ●   ●  │",
38        "└─────────┘",
39    ),
40    6: (
41        "┌─────────┐",
42        "│  ●   ●  │",
43        "│  ●   ●  │",
44        "│  ●   ●  │",
45        "└─────────┘",
46    ),
47}
48DIE_HEIGHT = len(DICE_ART[1])
49DIE_WIDTH = len(DICE_ART[1][0])
50DIE_FACE_SEPARATOR = " "
51
52# ...
2 để giữ số lượng cột cần thiết để vẽ mặt xúc xắc. Trong ví dụ này, chiều rộng là 11 ký tự

Cuối cùng, dòng 50 định nghĩa

 1# dice.py
 2import random
 3
 4DICE_ART = {
 5    1: (
 6        "┌─────────┐",
 7        "│         │",
 8        "│    ●    │",
 9        "│         │",
10        "└─────────┘",
11    ),
12    2: (
13        "┌─────────┐",
14        "│  ●      │",
15        "│         │",
16        "│      ●  │",
17        "└─────────┘",
18    ),
19    3: (
20        "┌─────────┐",
21        "│  ●      │",
22        "│    ●    │",
23        "│      ●  │",
24        "└─────────┘",
25    ),
26    4: (
27        "┌─────────┐",
28        "│  ●   ●  │",
29        "│         │",
30        "│  ●   ●  │",
31        "└─────────┘",
32    ),
33    5: (
34        "┌─────────┐",
35        "│  ●   ●  │",
36        "│    ●    │",
37        "│  ●   ●  │",
38        "└─────────┘",
39    ),
40    6: (
41        "┌─────────┐",
42        "│  ●   ●  │",
43        "│  ●   ●  │",
44        "│  ●   ●  │",
45        "└─────────┘",
46    ),
47}
48DIE_HEIGHT = len(DICE_ART[1])
49DIE_WIDTH = len(DICE_ART[1][0])
50DIE_FACE_SEPARATOR = " "
51
52# ...
3, chứa một ký tự khoảng trắng. Bạn sẽ sử dụng tất cả các hằng số này để tạo và hiển thị sơ đồ ASCII của các mặt xúc xắc cho ứng dụng của mình

Tạo sơ đồ mặt xúc xắc

Tại thời điểm này, bạn đã xây dựng nghệ thuật ASCII cho từng mặt xúc xắc. Để ghép các mảnh này lại với nhau thành một sơ đồ cuối cùng thể hiện kết quả hoàn chỉnh của mô phỏng tung xúc xắc, bạn sẽ viết một hàm tùy chỉnh khác

 1# dice.py
 2
 3# ...
 4
 5def generate_dice_faces_diagram(dice_values):
 6    """Return an ASCII diagram of dice faces from `dice_values`.
 7
 8    The string returned contains an ASCII representation of each die.
 9    For example, if `dice_values = [4, 1, 3, 2]` then the string
10    returned looks like this:
11
12    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
13    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
14    │  ●   ●  │ │         │ │  ●      │ │  ●      │
15    │         │ │    ●    │ │    ●    │ │         │
16    │  ●   ●  │ │         │ │      ●  │ │      ●  │
17    └─────────┘ └─────────┘ └─────────┘ └─────────┘
18    """
19    # Generate a list of dice faces from DICE_ART
20    dice_faces = []
21    for value in dice_values:
22        dice_faces.append(DICE_ART[value])
23
24    # Generate a list containing the dice faces rows
25    dice_faces_rows = []
26    for row_idx in range(DIE_HEIGHT):
27        row_components = []
28        for die in dice_faces:
29            row_components.append(die[row_idx])
30        row_string = DIE_FACE_SEPARATOR.join(row_components)
31        dice_faces_rows.append(row_string)
32
33    # Generate header with the word "RESULTS" centered
34    width = len(dice_faces_rows[0])
35    diagram_header = " RESULTS ".center(width, "~")
36
37    dice_faces_diagram = "\n".join([diagram_header] + dice_faces_rows)
38    return dice_faces_diagram
39
40# ~~~ App's main code block ~~~
41# ...

Chức năng này thực hiện như sau

  • Dòng 5 định nghĩa

    $ python dice.py
    How many dice do you want to roll? [1-6] 3
    
    $ python dice.py
    How many dice do you want to roll? [1-6] 7
    Please enter a number from 1 to 6.
    
    9 với một đối số duy nhất có tên là
     1# dice.py
     2import random
     3
     4DICE_ART = {
     5    1: (
     6        "┌─────────┐",
     7        "│         │",
     8        "│    ●    │",
     9        "│         │",
    10        "└─────────┘",
    11    ),
    12    2: (
    13        "┌─────────┐",
    14        "│  ●      │",
    15        "│         │",
    16        "│      ●  │",
    17        "└─────────┘",
    18    ),
    19    3: (
    20        "┌─────────┐",
    21        "│  ●      │",
    22        "│    ●    │",
    23        "│      ●  │",
    24        "└─────────┘",
    25    ),
    26    4: (
    27        "┌─────────┐",
    28        "│  ●   ●  │",
    29        "│         │",
    30        "│  ●   ●  │",
    31        "└─────────┘",
    32    ),
    33    5: (
    34        "┌─────────┐",
    35        "│  ●   ●  │",
    36        "│    ●    │",
    37        "│  ●   ●  │",
    38        "└─────────┘",
    39    ),
    40    6: (
    41        "┌─────────┐",
    42        "│  ●   ●  │",
    43        "│  ●   ●  │",
    44        "│  ●   ●  │",
    45        "└─────────┘",
    46    ),
    47}
    48DIE_HEIGHT = len(DICE_ART[1])
    49DIE_WIDTH = len(DICE_ART[1][0])
    50DIE_FACE_SEPARATOR = " "
    51
    52# ...
    
    5. Đối số này sẽ giữ danh sách các giá trị số nguyên tung xúc xắc là kết quả của việc gọi
    $ python dice.py
    How many dice do you want to roll? [1-6] 3
    
    $ python dice.py
    How many dice do you want to roll? [1-6] 7
    Please enter a number from 1 to 6.
    
    6

  • Dòng 6 đến 18 cung cấp chuỗi tài liệu của hàm

  • Dòng 20 tạo một danh sách trống có tên là

     1# dice.py
     2import random
     3
     4DICE_ART = {
     5    1: (
     6        "┌─────────┐",
     7        "│         │",
     8        "│    ●    │",
     9        "│         │",
    10        "└─────────┘",
    11    ),
    12    2: (
    13        "┌─────────┐",
    14        "│  ●      │",
    15        "│         │",
    16        "│      ●  │",
    17        "└─────────┘",
    18    ),
    19    3: (
    20        "┌─────────┐",
    21        "│  ●      │",
    22        "│    ●    │",
    23        "│      ●  │",
    24        "└─────────┘",
    25    ),
    26    4: (
    27        "┌─────────┐",
    28        "│  ●   ●  │",
    29        "│         │",
    30        "│  ●   ●  │",
    31        "└─────────┘",
    32    ),
    33    5: (
    34        "┌─────────┐",
    35        "│  ●   ●  │",
    36        "│    ●    │",
    37        "│  ●   ●  │",
    38        "└─────────┘",
    39    ),
    40    6: (
    41        "┌─────────┐",
    42        "│  ●   ●  │",
    43        "│  ●   ●  │",
    44        "│  ●   ●  │",
    45        "└─────────┘",
    46    ),
    47}
    48DIE_HEIGHT = len(DICE_ART[1])
    49DIE_WIDTH = len(DICE_ART[1][0])
    50DIE_FACE_SEPARATOR = " "
    51
    52# ...
    
    7 để lưu các mặt xúc xắc tương ứng với danh sách đầu vào của các giá trị xúc xắc. Những mặt xúc xắc này sẽ hiển thị trong sơ đồ ASCII cuối cùng

  • Dòng 21 định nghĩa một vòng lặp

     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    4 để lặp lại các giá trị xúc xắc

  • Dòng 22 lấy mặt xúc xắc tương ứng với giá trị xúc xắc hiện tại từ

     1# dice.py
     2import random
     3
     4DICE_ART = {
     5    1: (
     6        "┌─────────┐",
     7        "│         │",
     8        "│    ●    │",
     9        "│         │",
    10        "└─────────┘",
    11    ),
    12    2: (
    13        "┌─────────┐",
    14        "│  ●      │",
    15        "│         │",
    16        "│      ●  │",
    17        "└─────────┘",
    18    ),
    19    3: (
    20        "┌─────────┐",
    21        "│  ●      │",
    22        "│    ●    │",
    23        "│      ●  │",
    24        "└─────────┘",
    25    ),
    26    4: (
    27        "┌─────────┐",
    28        "│  ●   ●  │",
    29        "│         │",
    30        "│  ●   ●  │",
    31        "└─────────┘",
    32    ),
    33    5: (
    34        "┌─────────┐",
    35        "│  ●   ●  │",
    36        "│    ●    │",
    37        "│  ●   ●  │",
    38        "└─────────┘",
    39    ),
    40    6: (
    41        "┌─────────┐",
    42        "│  ●   ●  │",
    43        "│  ●   ●  │",
    44        "│  ●   ●  │",
    45        "└─────────┘",
    46    ),
    47}
    48DIE_HEIGHT = len(DICE_ART[1])
    49DIE_WIDTH = len(DICE_ART[1][0])
    50DIE_FACE_SEPARATOR = " "
    51
    52# ...
    
    0 và nối nó vào
     1# dice.py
     2import random
     3
     4DICE_ART = {
     5    1: (
     6        "┌─────────┐",
     7        "│         │",
     8        "│    ●    │",
     9        "│         │",
    10        "└─────────┘",
    11    ),
    12    2: (
    13        "┌─────────┐",
    14        "│  ●      │",
    15        "│         │",
    16        "│      ●  │",
    17        "└─────────┘",
    18    ),
    19    3: (
    20        "┌─────────┐",
    21        "│  ●      │",
    22        "│    ●    │",
    23        "│      ●  │",
    24        "└─────────┘",
    25    ),
    26    4: (
    27        "┌─────────┐",
    28        "│  ●   ●  │",
    29        "│         │",
    30        "│  ●   ●  │",
    31        "└─────────┘",
    32    ),
    33    5: (
    34        "┌─────────┐",
    35        "│  ●   ●  │",
    36        "│    ●    │",
    37        "│  ●   ●  │",
    38        "└─────────┘",
    39    ),
    40    6: (
    41        "┌─────────┐",
    42        "│  ●   ●  │",
    43        "│  ●   ●  │",
    44        "│  ●   ●  │",
    45        "└─────────┘",
    46    ),
    47}
    48DIE_HEIGHT = len(DICE_ART[1])
    49DIE_WIDTH = len(DICE_ART[1][0])
    50DIE_FACE_SEPARATOR = " "
    51
    52# ...
    
    7

  • Dòng 25 tạo một danh sách trống để giữ các hàng trong sơ đồ mặt xúc xắc cuối cùng

  • Dòng 26 định nghĩa một vòng lặp lặp qua các chỉ số từ

     1# dice.py
     2
     3# ...
     4
     5def generate_dice_faces_diagram(dice_values):
     6    """Return an ASCII diagram of dice faces from `dice_values`.
     7
     8    The string returned contains an ASCII representation of each die.
     9    For example, if `dice_values = [4, 1, 3, 2]` then the string
    10    returned looks like this:
    11
    12    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    13    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    14    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    15    │         │ │    ●    │ │    ●    │ │         │
    16    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    17    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    18    """
    19    # Generate a list of dice faces from DICE_ART
    20    dice_faces = []
    21    for value in dice_values:
    22        dice_faces.append(DICE_ART[value])
    23
    24    # Generate a list containing the dice faces rows
    25    dice_faces_rows = []
    26    for row_idx in range(DIE_HEIGHT):
    27        row_components = []
    28        for die in dice_faces:
    29            row_components.append(die[row_idx])
    30        row_string = DIE_FACE_SEPARATOR.join(row_components)
    31        dice_faces_rows.append(row_string)
    32
    33    # Generate header with the word "RESULTS" centered
    34    width = len(dice_faces_rows[0])
    35    diagram_header = " RESULTS ".center(width, "~")
    36
    37    dice_faces_diagram = "\n".join([diagram_header] + dice_faces_rows)
    38    return dice_faces_diagram
    39
    40# ~~~ App's main code block ~~~
    41# ...
    
    1 đến
     1# dice.py
     2
     3# ...
     4
     5def generate_dice_faces_diagram(dice_values):
     6    """Return an ASCII diagram of dice faces from `dice_values`.
     7
     8    The string returned contains an ASCII representation of each die.
     9    For example, if `dice_values = [4, 1, 3, 2]` then the string
    10    returned looks like this:
    11
    12    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    13    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    14    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    15    │         │ │    ●    │ │    ●    │ │         │
    16    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    17    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    18    """
    19    # Generate a list of dice faces from DICE_ART
    20    dice_faces = []
    21    for value in dice_values:
    22        dice_faces.append(DICE_ART[value])
    23
    24    # Generate a list containing the dice faces rows
    25    dice_faces_rows = []
    26    for row_idx in range(DIE_HEIGHT):
    27        row_components = []
    28        for die in dice_faces:
    29            row_components.append(die[row_idx])
    30        row_string = DIE_FACE_SEPARATOR.join(row_components)
    31        dice_faces_rows.append(row_string)
    32
    33    # Generate header with the word "RESULTS" centered
    34    width = len(dice_faces_rows[0])
    35    diagram_header = " RESULTS ".center(width, "~")
    36
    37    dice_faces_diagram = "\n".join([diagram_header] + dice_faces_rows)
    38    return dice_faces_diagram
    39
    40# ~~~ App's main code block ~~~
    41# ...
    
    2. Mỗi chỉ mục đại diện cho chỉ mục của một hàng nhất định trong sơ đồ mặt xúc xắc

  • Dòng 27 định nghĩa

     1# dice.py
     2
     3# ...
     4
     5def generate_dice_faces_diagram(dice_values):
     6    """Return an ASCII diagram of dice faces from `dice_values`.
     7
     8    The string returned contains an ASCII representation of each die.
     9    For example, if `dice_values = [4, 1, 3, 2]` then the string
    10    returned looks like this:
    11
    12    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    13    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    14    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    15    │         │ │    ●    │ │    ●    │ │         │
    16    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    17    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    18    """
    19    # Generate a list of dice faces from DICE_ART
    20    dice_faces = []
    21    for value in dice_values:
    22        dice_faces.append(DICE_ART[value])
    23
    24    # Generate a list containing the dice faces rows
    25    dice_faces_rows = []
    26    for row_idx in range(DIE_HEIGHT):
    27        row_components = []
    28        for die in dice_faces:
    29            row_components.append(die[row_idx])
    30        row_string = DIE_FACE_SEPARATOR.join(row_components)
    31        dice_faces_rows.append(row_string)
    32
    33    # Generate header with the word "RESULTS" centered
    34    width = len(dice_faces_rows[0])
    35    diagram_header = " RESULTS ".center(width, "~")
    36
    37    dice_faces_diagram = "\n".join([diagram_header] + dice_faces_rows)
    38    return dice_faces_diagram
    39
    40# ~~~ App's main code block ~~~
    41# ...
    
    3 là một danh sách trống để chứa các phần của mặt xúc xắc sẽ lấp đầy một hàng nhất định

  • Dòng 28 bắt đầu một vòng lặp

     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    4 lồng nhau để lặp qua các mặt xúc xắc

  • Dòng 29 lưu trữ từng thành phần hàng

  • Dòng 30 nối các thành phần hàng thành một chuỗi hàng cuối cùng, phân tách các thành phần riêng lẻ bằng khoảng trắng

  • Dòng 31 nối từng chuỗi hàng vào danh sách chứa các hàng sẽ định hình sơ đồ cuối cùng

  • Dòng 34 tạo một biến tạm thời để giữ

     1# dice.py
     2
     3# ...
     4
     5def generate_dice_faces_diagram(dice_values):
     6    """Return an ASCII diagram of dice faces from `dice_values`.
     7
     8    The string returned contains an ASCII representation of each die.
     9    For example, if `dice_values = [4, 1, 3, 2]` then the string
    10    returned looks like this:
    11
    12    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    13    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    14    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    15    │         │ │    ●    │ │    ●    │ │         │
    16    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    17    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    18    """
    19    # Generate a list of dice faces from DICE_ART
    20    dice_faces = []
    21    for value in dice_values:
    22        dice_faces.append(DICE_ART[value])
    23
    24    # Generate a list containing the dice faces rows
    25    dice_faces_rows = []
    26    for row_idx in range(DIE_HEIGHT):
    27        row_components = []
    28        for die in dice_faces:
    29            row_components.append(die[row_idx])
    30        row_string = DIE_FACE_SEPARATOR.join(row_components)
    31        dice_faces_rows.append(row_string)
    32
    33    # Generate header with the word "RESULTS" centered
    34    width = len(dice_faces_rows[0])
    35    diagram_header = " RESULTS ".center(width, "~")
    36
    37    dice_faces_diagram = "\n".join([diagram_header] + dice_faces_rows)
    38    return dice_faces_diagram
    39
    40# ~~~ App's main code block ~~~
    41# ...
    
    5 của sơ đồ mặt xúc xắc hiện tại

  • Dòng 35 tạo tiêu đề hiển thị từ KẾT QUẢ. Để làm như vậy, nó sử dụng với

     1# dice.py
     2
     3# ...
     4
     5def generate_dice_faces_diagram(dice_values):
     6    """Return an ASCII diagram of dice faces from `dice_values`.
     7
     8    The string returned contains an ASCII representation of each die.
     9    For example, if `dice_values = [4, 1, 3, 2]` then the string
    10    returned looks like this:
    11
    12    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    13    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    14    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    15    │         │ │    ●    │ │    ●    │ │         │
    16    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    17    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    18    """
    19    # Generate a list of dice faces from DICE_ART
    20    dice_faces = []
    21    for value in dice_values:
    22        dice_faces.append(DICE_ART[value])
    23
    24    # Generate a list containing the dice faces rows
    25    dice_faces_rows = []
    26    for row_idx in range(DIE_HEIGHT):
    27        row_components = []
    28        for die in dice_faces:
    29            row_components.append(die[row_idx])
    30        row_string = DIE_FACE_SEPARATOR.join(row_components)
    31        dice_faces_rows.append(row_string)
    32
    33    # Generate header with the word "RESULTS" centered
    34    width = len(dice_faces_rows[0])
    35    diagram_header = " RESULTS ".center(width, "~")
    36
    37    dice_faces_diagram = "\n".join([diagram_header] + dice_faces_rows)
    38    return dice_faces_diagram
    39
    40# ~~~ App's main code block ~~~
    41# ...
    
    5 của sơ đồ và ký hiệu dấu ngã (
     1# dice.py
     2
     3# ...
     4
     5def generate_dice_faces_diagram(dice_values):
     6    """Return an ASCII diagram of dice faces from `dice_values`.
     7
     8    The string returned contains an ASCII representation of each die.
     9    For example, if `dice_values = [4, 1, 3, 2]` then the string
    10    returned looks like this:
    11
    12    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    13    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    14    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    15    │         │ │    ●    │ │    ●    │ │         │
    16    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    17    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    18    """
    19    # Generate a list of dice faces from DICE_ART
    20    dice_faces = []
    21    for value in dice_values:
    22        dice_faces.append(DICE_ART[value])
    23
    24    # Generate a list containing the dice faces rows
    25    dice_faces_rows = []
    26    for row_idx in range(DIE_HEIGHT):
    27        row_components = []
    28        for die in dice_faces:
    29            row_components.append(die[row_idx])
    30        row_string = DIE_FACE_SEPARATOR.join(row_components)
    31        dice_faces_rows.append(row_string)
    32
    33    # Generate header with the word "RESULTS" centered
    34    width = len(dice_faces_rows[0])
    35    diagram_header = " RESULTS ".center(width, "~")
    36
    37    dice_faces_diagram = "\n".join([diagram_header] + dice_faces_rows)
    38    return dice_faces_diagram
    39
    40# ~~~ App's main code block ~~~
    41# ...
    
    8) làm đối số

  • Dòng 37 tạo một chuỗi chứa sơ đồ mặt xúc xắc cuối cùng. Ký tự (

     1# dice.py
     2
     3# ...
     4
     5def generate_dice_faces_diagram(dice_values):
     6    """Return an ASCII diagram of dice faces from `dice_values`.
     7
     8    The string returned contains an ASCII representation of each die.
     9    For example, if `dice_values = [4, 1, 3, 2]` then the string
    10    returned looks like this:
    11
    12    ~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
    13    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    14    │  ●   ●  │ │         │ │  ●      │ │  ●      │
    15    │         │ │    ●    │ │    ●    │ │         │
    16    │  ●   ●  │ │         │ │      ●  │ │      ●  │
    17    └─────────┘ └─────────┘ └─────────┘ └─────────┘
    18    """
    19    # Generate a list of dice faces from DICE_ART
    20    dice_faces = []
    21    for value in dice_values:
    22        dice_faces.append(DICE_ART[value])
    23
    24    # Generate a list containing the dice faces rows
    25    dice_faces_rows = []
    26    for row_idx in range(DIE_HEIGHT):
    27        row_components = []
    28        for die in dice_faces:
    29            row_components.append(die[row_idx])
    30        row_string = DIE_FACE_SEPARATOR.join(row_components)
    31        dice_faces_rows.append(row_string)
    32
    33    # Generate header with the word "RESULTS" centered
    34    width = len(dice_faces_rows[0])
    35    diagram_header = " RESULTS ".center(width, "~")
    36
    37    dice_faces_diagram = "\n".join([diagram_header] + dice_faces_rows)
    38    return dice_faces_diagram
    39
    40# ~~~ App's main code block ~~~
    41# ...
    
    9) hoạt động như một dấu phân cách hàng. Đối số của
    $ python dice.py
    How many dice do you want to roll? [1-6] 3
    
    $ python dice.py
    How many dice do you want to roll? [1-6] 7
    Please enter a number from 1 to 6.
    
    0 là một danh sách các chuỗi nối tiêu đề sơ đồ và các chuỗi (hàng) hình thành mặt xúc xắc

  • Dòng 38 trả về sơ đồ mặt xúc xắc sẵn sàng in cho người gọi

Ồ. Đó là rất nhiều. Bạn sẽ quay lại mã này và cải thiện nó để làm cho nó dễ quản lý hơn chỉ trong giây lát. Tuy nhiên, trước khi làm điều đó, bạn sẽ muốn dùng thử ứng dụng của mình, vì vậy bạn cần viết xong khối mã chính của nó

Hoàn thành mã chính của ứng dụng và tung xúc xắc

Với

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
9 tại chỗ, giờ đây bạn có thể hoàn thành việc viết mã chính của ứng dụng, mã này sẽ cho phép bạn thực sự tạo và hiển thị sơ đồ mặt xúc xắc trên màn hình của mình. Hãy tiếp tục và thêm các dòng mã sau vào cuối
 1# dice.py
 2import random
 3
 4# ...
 5
 6def roll_dice(num_dice):
 7    """Return a list of integers with length `num_dice`.
 8
 9    Each integer in the returned list is a random number between
10    1 and 6, inclusive.
11    """
12    roll_results = []
13    for _ in range(num_dice):
14        roll = random.randint(1, 6)
15        roll_results.append(roll)
16    return roll_results
17
18# ~~~ App's main code block ~~~
19# ...
2

 1# dice.py
 2
 3# ...
 4
 5# ~~~ App's main code block ~~~
 6# 1. Get and validate user's input
 7num_dice_input = input("How many dice do you want to roll? [1-6] ")
 8num_dice = parse_input(num_dice_input)
 9# 2. Roll the dice
10roll_results = roll_dice(num_dice)
11# 3. Generate the ASCII diagram of dice faces
12dice_face_diagram = generate_dice_faces_diagram(roll_results)
13# 4. Display the diagram
14print(f"\n{dice_face_diagram}")

Dòng 12 gọi

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
9 với
~~~~~~~~~~~~~~~~~~~ RESULTS ~~~~~~~~~~~~~~~~~~~
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│  ●   ●  │ │         │ │  ●      │ │  ●      │
│         │ │    ●    │ │    ●    │ │         │
│  ●   ●  │ │         │ │      ●  │ │      ●  │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
1 làm đối số. Cuộc gọi này xây dựng và trả về sơ đồ mặt xúc xắc tương ứng với kết quả tung xúc xắc hiện tại. Dòng 14 gọi
 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
5 để hiển thị sơ đồ trên màn hình

Với bản cập nhật này, bạn có thể chạy lại ứng dụng. Quay lại dòng lệnh của bạn và thực hiện lệnh sau

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
0

Mát mẻ. Giờ đây, ứng dụng giả lập tung xúc xắc của bạn hiển thị sơ đồ ASCII được định dạng độc đáo hiển thị kết quả của sự kiện mô phỏng. Thật gọn gàng, phải không?

Nếu bạn quay lại quá trình triển khai của

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
9, thì bạn sẽ lưu ý rằng nó bao gồm một số nhận xét chỉ ra phần mã tương ứng đang làm gì

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
1

Loại nhận xét này thường báo hiệu rằng mã của bạn sẽ được hưởng lợi từ việc tái cấu trúc. Trong phần sau, bạn sẽ sử dụng một kỹ thuật tái cấu trúc phổ biến sẽ giúp bạn làm sạch mã và làm cho mã dễ bảo trì hơn

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

Bước 4. Cấu trúc lại mã tạo sơ đồ mặt xúc xắc

Hàm

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
9 của bạn yêu cầu nhận xét giải thích vì nó thực hiện một số thao tác cùng một lúc, điều này vi phạm nguyên tắc chịu trách nhiệm duy nhất

Nói một cách đại khái, nguyên tắc này nói rằng mọi chức năng, lớp hoặc mô-đun chỉ nên làm một việc. Bằng cách đó, những thay đổi trong một chức năng nhất định sẽ không phá vỡ phần còn lại của mã. Kết quả là, bạn sẽ có một mã mạnh mẽ hơn và dễ bảo trì hơn

Để tải xuống mã cho bước này, hãy nhấp vào liên kết bên dưới, sau đó xem thư mục

 1# dice.py
 2
 3# ...
 4
 5# ~~~ App's main code block ~~~
 6# 1. Get and validate user's input
 7num_dice_input = input("How many dice do you want to roll? [1-6] ")
 8num_dice = parse_input(num_dice_input)
 9# 2. Roll the dice
10roll_results = roll_dice(num_dice)
11# 3. Generate the ASCII diagram of dice faces
12dice_face_diagram = generate_dice_faces_diagram(roll_results)
13# 4. Display the diagram
14print(f"\n{dice_face_diagram}")
8

Nhận mã nguồn. Nhấp vào đây để lấy mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng tung xúc xắc Python của mình

Có một phương pháp được gọi là trích xuất có thể giúp bạn cải thiện mã của mình bằng cách trích xuất chức năng có thể hoạt động độc lập. Ví dụ: bạn có thể trích xuất mã từ dòng 20 đến 22 trong lần triển khai trước đó của

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
9 và đặt mã đó vào một hàm trợ giúp không công khai có tên là
 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
00

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
2

Bạn có thể gọi

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
00 từ
$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
9 để nhận chức năng ngụ ý. Bằng cách sử dụng kỹ thuật này, bạn có thể cấu trúc lại hoàn toàn
$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
9 để đáp ứng nguyên tắc chịu trách nhiệm duy nhất

Ghi chú. Để tìm hiểu thêm về cách đặt tên các hàm không công khai với dấu gạch dưới ở đầu (

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
04), hãy xem Ý nghĩa của dấu gạch dưới trong Python

Đây là phiên bản tái cấu trúc của

$ python dice.py
How many dice do you want to roll? [1-6] 3

$ python dice.py
How many dice do you want to roll? [1-6] 7
Please enter a number from 1 to 6.
9 tận dụng lợi thế của
 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
00 và triển khai một chức năng trợ giúp khác có tên là
 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
07 để trích xuất chức năng từ dòng 25 đến 31

 1# dice.py
 2
 3def parse_input(input_string):
 4    """Return `input_string` as an integer between 1 and 6.
 5
 6    Check if `input_string` is an integer number between 1 and 6.
 7    If so, return an integer with the same value. Otherwise, tell
 8    the user to enter a valid number and quit the program.
 9    """
10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
11        return int(input_string)
12    else:
13        print("Please enter a number from 1 to 6.")
14        raise SystemExit(1)
15
16# ~~~ App's main code block ~~~
17# ...
3

Các hàm trợ giúp mới được thêm vào sẽ trích xuất chức năng từ hàm ban đầu. Bây giờ mỗi chức năng của trình trợ giúp có trách nhiệm riêng. Các chức năng của trình trợ giúp cũng cho phép bạn sử dụng các tên mô tả và dễ đọc, loại bỏ nhu cầu nhận xét giải thích

Tái cấu trúc mã của bạn để làm cho nó có hình dạng tốt hơn là một kỹ năng tuyệt vời cần có với tư cách là nhà phát triển Python. Để tìm hiểu sâu hơn về tái cấu trúc mã, hãy xem Tái cấu trúc các ứng dụng Python để đơn giản hóa

Một ý tưởng cơ bản đằng sau việc tái cấu trúc mã là mã được sửa đổi sẽ hoạt động giống như mã gốc. Để kiểm tra nguyên tắc này, hãy tiếp tục và chạy lại ứng dụng của bạn

Như vậy, bạn đã hoàn thành dự án của mình. Bạn đã xây dựng một ứng dụng TUI đầy đủ chức năng cho phép bạn mô phỏng sự kiện tung xúc xắc. Mỗi khi chạy ứng dụng, bạn có thể mô phỏng việc tung tối đa sáu viên xúc xắc với mỗi mặt sáu mặt. Bạn thậm chí có thể nhìn thấy các mặt xúc xắc kết quả trong sơ đồ ASCII đẹp mắt. Bạn đã làm rất tốt

Phần kết luận

Bạn đã mã hóa một dự án đầy đủ chức năng bao gồm một ứng dụng giao diện người dùng dựa trên văn bản mô phỏng việc tung xúc xắc sáu mặt trong Python. Với dự án này, bạn đã học và thực hành các kỹ năng cơ bản, chẳng hạn như thu thập và xác thực đầu vào của người dùng, nhập mã, viết hàm, sử dụng vòng lặp và điều kiện cũng như hiển thị đầu ra được định dạng đẹp mắt trên màn hình

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

  • Sử dụng
     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    7 để mô phỏng việc tung xúc xắc
  • Lấy thông tin đầu vào của người dùng tại dòng lệnh bằng chức năng
     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    8 tích hợp
  • Phân tích cú pháp và xác thực đầu vào của người dùng bằng một số công cụ và kỹ thuật
  • Thao tác chuỗi bằng các phương thức, chẳng hạn như
     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    9 và
    $ python dice.py
    How many dice do you want to roll? [1-6] 3
    
    $ python dice.py
    How many dice do you want to roll? [1-6] 7
    Please enter a number from 1 to 6.
    
    0

Ngoài ra, bạn đã học cách cấu trúc, sắp xếp, lập tài liệu và chạy các chương trình và tập lệnh Python. Với kiến ​​thức này, bạn sẽ chuẩn bị tốt hơn để tiếp tục hành trình viết mã của mình với Python

Bạn có thể tải xuống toàn bộ mã cho ứng dụng tung xúc xắc này 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 để lấy mã nguồn mà bạn sẽ sử dụng để xây dựng ứng dụng tung xúc xắc Python của mình

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

Bước tiếp theo

Bây giờ bạn đã hoàn thành việc xây dựng ứng dụng tung xúc xắc của mình, bạn có thể tiến thêm một bước cho dự án bằng cách thêm chức năng mới. Tự thêm các tính năng mới sẽ giúp bạn tiếp tục tìm hiểu các khái niệm và kỹ thuật mã hóa mới thú vị

Dưới đây là một số ý tưởng để đưa dự án của bạn lên một tầm cao mới

  • Hỗ trợ cho bất kỳ số lượng xúc xắc. Sửa đổi mã để bạn có thể tung bất kỳ số lượng xúc xắc nào
  • Hỗ trợ xúc xắc với số lượng mặt khác nhau. Thêm mã để hỗ trợ không chỉ xúc xắc sáu mặt mà cả xúc xắc có số mặt bất kỳ

Tính năng đầu tiên sẽ yêu cầu bạn sửa đổi mã xử lý đầu vào của người dùng để biết số lượng xúc xắc tung. Bạn cũng cần sửa đổi mã tạo và hiển thị sơ đồ mặt xúc xắc. Ví dụ: bạn có thể tạo sơ đồ hiển thị các mặt xúc xắc trong một số hàng để tránh làm lộn xộn màn hình của bạn với đầu ra chật chội

Mặt khác, việc hỗ trợ xúc xắc với số lượng mặt khác nhau sẽ yêu cầu bạn điều chỉnh mã mô phỏng sự kiện tung xúc xắc. Bạn cũng sẽ cần tạo nghệ thuật ASCII mới cho bất kỳ viên xúc xắc nào có nhiều hơn sáu mặt

Khi bạn đã hoàn thành các tính năng mới này, bạn có thể chuyển sang các bánh răng và tham gia vào các dự án thú vị khác. Dưới đây là một số bước tuyệt vời tiếp theo để bạn tiếp tục học Python và xây dựng các dự án phức tạp hơn

  • Cách xây dựng giao diện dòng lệnh trong Python với argparse. Trong hướng dẫn Python từng bước này, bạn sẽ học cách đưa các tập lệnh Python dòng lệnh của mình lên một tầm cao mới bằng cách thêm một giao diện dòng lệnh thuận tiện mà bạn có thể viết bằng

     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    12

  • Xây dựng Trình tạo cây thư mục Python cho Dòng lệnh. Trong dự án từng bước này, bạn sẽ tạo một ứng dụng tạo cây thư mục Python cho dòng lệnh của mình. Bạn sẽ viết mã giao diện dòng lệnh bằng

     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    12 và duyệt qua hệ thống tệp bằng cách sử dụng
     1# dice.py
     2
     3def parse_input(input_string):
     4    """Return `input_string` as an integer between 1 and 6.
     5
     6    Check if `input_string` is an integer number between 1 and 6.
     7    If so, return an integer with the same value. Otherwise, tell
     8    the user to enter a valid number and quit the program.
     9    """
    10    if input_string.strip() in {"1", "2", "3", "4", "5", "6"}:
    11        return int(input_string)
    12    else:
    13        print("Please enter a number from 1 to 6.")
    14        raise SystemExit(1)
    15
    16# ~~~ App's main code block ~~~
    17# ...
    
    14

  • Xây dựng ứng dụng To-Do dòng lệnh với Python và Typer. Trong dự án từng bước này, bạn sẽ tạo một ứng dụng công việc cho dòng lệnh của mình bằng Python và Typer. Trong khi xây dựng ứng dụng này, bạn sẽ tìm hiểu kiến ​​thức cơ bản về Typer, một thư viện hiện đại và linh hoạt để xây dựng giao diện dòng lệnh

Đá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

Mã Python tung hai viên xúc xắc

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

Giới thiệu về Leodanis Pozo Ramos

Mã Python tung hai viên xúc xắc
Mã Python tung hai viên xúc xắc

Leodanis là một kỹ sư công nghiệp yêu thích Python và phát triển phần mềm. Anh ấy là một nhà phát triển Python tự học với hơn 6 năm kinh nghiệm. Anh ấy là một nhà văn đam mê kỹ thuật với số lượng bài báo được xuất bản ngày càng tăng trên Real Python và các trang web khác

» Tìm hiểu thêm về Leodanis


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à

Mã Python tung hai viên xúc xắc

Aldren

Mã Python tung hai viên xúc xắc

Bartosz

Mã Python tung hai viên xúc xắc

David

Mã Python tung hai viên xúc xắc

Geir Arne

Mã Python tung hai viên xúc xắc

kate

Mã Python tung hai viên xúc xắc

Martin

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 »

Chuyên gia 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

Trình mô phỏng lăn xúc xắc trong Python là gì?

Trình mô phỏng lăn xúc xắc bằng Python . Nhưng mô phỏng là gì? . Do đó, trình giả lập xúc xắc là một mô hình máy tính đơn giản có thể gieo xúc xắc cho chúng ta. a simple cube with numbers from 1 to 6 written on its face. But what is simulation? It is making a computer model. Thus, a dice simulator is a simple computer model that can roll a dice for us.

Những con số dễ nhất để cuộn với hai con xúc xắc là gì?

Như bạn có thể thấy, 7 là cách tung xúc xắc sáu mặt phổ biến nhất . Bạn có khả năng tung được số 7 cao gấp sáu lần so với số 2 hoặc số 12, đây là một sự khác biệt rất lớn. Khả năng bạn tung được số 7 cao gấp đôi so với khả năng bạn tung được số 4 hoặc số 10. Tuy nhiên đó chỉ là 1. Khả năng bạn tung được số 7 cao gấp 2 lần so với số 6 hoặc số 8.