/ / Mô phỏng vấn đề Monty Hall bằng Python

Mô phỏng vấn đề Monty Hall bằng Python

Nếu bạn là một đứa trẻ thập niên 70, bạn có thể đã lớn lên khi xem chương trình trò chơi nổi tiếng, Hãy thỏa thuận. Kể từ đó, mọi người thảo luận sôi nổi về câu đố Monty Hall và vui vẻ sao chép nó. Sự hồi hộp và kịch tính đến khó tin được tạo ra khi thí sinh chọn một trong ba cánh cửa luôn thú vị để xem.


Sử dụng toán học và một chút lập trình, bạn sẽ xây dựng Trình mô phỏng Monty Hall bằng Python. Sử dụng điều này, bạn sẽ có thể quyết định một lần và mãi mãi rằng việc chuyển đổi các cửa sẽ tăng cơ hội chiến thắng của bạn.


Vấn đề Monty Hall là gì?

Bài toán Monty Hall là một câu đố hóc búa được đặt tên theo người dẫn chương trình trò chơi, Monty Hall. Có ba cánh cửa, chỉ một trong số đó chứa giải thưởng mong muốn. Khi bạn chọn một cánh cửa, Monty – người biết điều gì đằng sau chúng – sẽ mở một cánh cửa khác, để lộ một con dê. Giờ đây, bạn có tùy chọn tiếp tục với quyết định ban đầu của mình hoặc chuyển sang cánh cửa khác.

Do tính chất bất ngờ và không thể đoán trước của nó, câu đố Monty Hall rất phổ biến. Mặc dù nó liên quan đến xác suất, nhưng giải pháp này thách thức trực giác. Nó phục vụ như một minh chứng tuyệt vời về cách tính toán xác suất có thể khó hiểu như thế nào. Câu đố dạy chúng ta cách bỏ qua ấn tượng về những sự việc dường như ngẫu nhiên và thay vào đó tập trung vào lý luận và sự thật.

Mô-đun Ngẫu nhiên và Tkinter

Để xây dựng mô phỏng Monty Hall bằng Python, hãy bắt đầu với các mô-đun Ngẫu nhiên và Tkinter.

Có một số hàm để tạo số ngẫu nhiên trong mô-đun Ngẫu nhiên. Bạn có thể sử dụng các thuật toán này để tạo chuỗi xáo trộn, chuyển động của trò chơi và số nguyên giả ngẫu nhiên. Nó thường được sử dụng trong các trò chơi như cricket bằng tay hoặc bài kiểm tra đánh máy đơn giản, cũng như để mô phỏng trò tung xúc xắc và xáo trộn danh sách.

Tkinter là thư viện GUI mặc định cho Python. Sử dụng nó, bạn có thể xây dựng các ứng dụng GUI tuyệt vời. Bạn có thể tạo ứng dụng danh sách việc cần làm, trình soạn thảo văn bản hoặc máy tính đơn giản. Bạn có thể áp dụng kiến ​​thức của mình vào thực tế và trau dồi kỹ năng lập trình của mình bằng Python và Tkinter để xây dựng các ứng dụng máy tính để bàn cơ bản.

Mở terminal và chạy lệnh sau để thêm Tkinter vào hệ thống của bạn:

 pip install tkinter 

Cách xây dựng Trình mô phỏng Monty Hall bằng Python

Nhập các mô-đun ngẫu nhiên và Tkinter. Hàm StringVar giúp kiểm soát giá trị của tiện ích con như Nhãn hoặc Mục nhập dễ dàng hơn. Bạn có thể sử dụng Nhãn để hiển thị một số văn bản trên màn hình và Mục để tìm nạp đầu vào của người dùng.

Khởi tạo phiên bản Tkinter và hiển thị cửa sổ gốc. Đặt kích thước của cửa sổ rộng 600 pixel và cao 200 pixel bằng cách sử dụng hình học() phương pháp. Đặt tiêu đề cửa sổ phù hợp và cấm thay đổi kích thước của nó.

 import random
from tkinter import StringVar, Label, Tk, Entry

window = Tk()
window.geometry("600x200")
window.title("Monty Hall Simulation")
window.resizable(0, 0)

Tiếp theo, thiết lập hai cặp vật dụng và biến để lưu trữ kết quả mô phỏng. Ứng dụng của bạn sẽ yêu cầu hoàn thành một số lần chạy. Trong mỗi lần chạy, nó sẽ mô phỏng trò chơi và ghi lại kết quả trong từng trường hợp: liệu người chơi quyết định chuyển đổi hay giữ nguyên lựa chọn.

Sử dụng StringVar(), đặt các giá trị ban đầu của cùng một lựa chọn và chuyển lựa chọn thành 0. Xác định một tiện ích Mục nhập và đặt kích thước phông chữ của nó thành 5. Khai báo hai nhãn để hiển thị cùng một lựa chọn đã chuyển đổi và định vị nó. Khai báo thêm hai nhãn sẽ hiển thị giá trị của các biến bạn xác định trước đó. Cuối cùng, đặt tiện ích Mục nhập bên dưới bốn nhãn này.

 same_choice = StringVar()
switched_choice = StringVar()
same_choice.set(0)
switched_choice.set(0)
no_sample = Entry(font=5)

Label(text="Same Choice").place(x=230, y=58)
Label(text="Switched Choice").place(x=230, y=90)
Label(textvariable=same_choice, font=(50)).place(x=350, y=58)
Label(textvariable=switched_choice, font=(50)).place(x=350, y=90)
no_sample.place(x=200, y=120)

Xác định một chức năng, mô phỏng. Khởi tạo các biến kết quả và lấy giá trị mẫu do người dùng nhập vào. Khai báo một danh sách chứa các mục mà cửa sẽ mở ra.

Trong mỗi lần chạy, hãy tạo một danh sách trùng lặp các cửa ban đầu và xáo trộn nó theo thứ tự ngẫu nhiên. Chọn một cánh cửa ngẫu nhiên và loại bỏ nó—điều này mô phỏng lựa chọn của người chơi. Sau đó, mô phỏng tiết lộ của Monty: nếu cánh cửa đầu tiên không chứa giải thưởng, hãy mở nó, nếu không hãy mở cánh cửa thứ hai. Xóa lựa chọn đó và để cửa còn lại làm tùy chọn để chuyển sang.

 def simulate(event):
    same_choice_result = 0
    switched_choice_result = 0
    samples = int(no_sample.get())
    doors = ["gold", "goat", "goat"]

    for _ in range(samples):
        simulated_doors = doors.copy()
        random.shuffle(simulated_doors)
        first_choice = random.choice(simulated_doors)
        simulated_doors.remove(first_choice)
        opened_door = simulated_doors[0] if simulated_doors[0] != "gold" else simulated_doors[1]
        simulated_doors.remove(opened_door)
        switched_second_choice = simulated_doors[0]

Nếu lựa chọn đầu tiên chứa giải thưởng mong muốn, hãy tăng kết quả lựa chọn tương tự lên một và phản ánh nó trên màn hình. Nếu không, hãy thực hiện thao tác tương tự cho lựa chọn đã chuyển đổi.

         if first_choice == "gold":
            same_choice_result += 1
            same_choice.set(same_choice_result)
        elif switched_second_choice == "gold":
            switched_choice_result += 1
            switched_choice.set(switched_choice_result)

Một bước quan trọng là liên kết phím Enter với một sự kiện trong cửa sổ Tkinter. Làm như vậy đảm bảo rằng khi người chơi nhấn Đi vào, một chức năng cụ thể sẽ chạy. Để đạt được điều này, hãy chuyển chuỗi và hàm mô phỏng làm tham số cho trói buộc() chức năng.

Các vòng lặp chính() chức năng yêu cầu Python chạy vòng lặp sự kiện Tkinter và lắng nghe các sự kiện (chẳng hạn như nhấn nút) cho đến khi bạn đóng cửa sổ.

 no_sample.bind("<Return>", simulate)
window.mainloop()

Đặt tất cả lại với nhau và chạy chương trình của bạn để mô phỏng hoạt động của câu đố.

Đầu ra của Trình mô phỏng Monty Hall bằng Python

Khi chạy chương trình, bạn sẽ thấy một cửa sổ đơn giản với các nhãn lựa chọn Giống nhau và Đã chuyển đổi. Nhập số mẫu vào trường ở dưới cùng để xem kết quả mô phỏng. Trong 3 lần chạy mẫu này, chương trình cho thấy nó thắng một lần với cùng một lựa chọn và hai lần với một lần chuyển đổi.

Đầu ra của Trình mô phỏng Monty Hall bằng Python 3 lựa chọn

Các kết quả này là ngẫu nhiên, nhưng bạn có thể chạy mô phỏng với cỡ mẫu lớn hơn để có độ chính xác cao hơn. Trong kích thước mẫu 100 sau đây, lựa chọn chuyển đổi thắng 65 lần.

Đầu ra của Trình mô phỏng Monty Hall bằng Python

Giải quyết vấn đề bằng lập trình

Monty Hall Simulator là một minh chứng tuyệt vời về cách bạn có thể sử dụng lập trình để giải quyết các vấn đề thực tế. Bạn có thể phát triển các thuật toán khác nhau và đào tạo các mô hình để thực hiện các nhiệm vụ cụ thể như sắp xếp một mảng hoặc cải thiện hiệu quả của hệ thống để sản xuất tối ưu.

Các ngôn ngữ lập trình khác nhau cung cấp các khả năng và chức năng khác nhau giúp lập trình dễ dàng hơn. Sử dụng Python, bạn có thể tạo các mô hình có thể dự đoán các giá trị trong tương lai của tập dữ liệu với độ chính xác cao hơn. Hơn nữa, bạn có thể tự động hóa các hoạt động lặp đi lặp lại, giảm bớt công việc nhàm chán, đồng thời cải thiện tốc độ và độ chính xác.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *