Bài 30
Đề bài: Mô phỏng bài toán Monty Hall.
Co 3 cua: 1 của có o to, 2 của có de.
Nguoi choi chon 1 cua, MC mo 1 của có de.
Tính xác suất tháng khi: (1) giu nguyen, (2) doi cua.
Mô phỏng n = 10000 lan.
Ví dụ: n = 10000 lan mô phỏng
Kết quả:
Giu nguyen: tháng ~3333 lan (~33.3%)
Doi cua: tháng ~6667 lan (~66.7%)
Ket luan: LEN LEN LON NHAT là DOI CUA!
Đăng nhập để giáo viên có thể giao bài và nhận bài nộp của bạn.
Câu trả lời
import random
n = int(input("Nhap so lan mo phong: "))
thang_giu = 0
thang_doi = 0
for _ in range(n):
# Vi tri o to (0, 1, hoac 2)
oto = random.randint(0, 2)
# Nguoi choi chon
chon = random.randint(0, 2)
# MC mo 1 cua co de (khac cua nguoi choi va khac cua oto)
cua_mo = [c for c in range(3) if c != chon and c != oto]
mc_mo = random.choice(cua_mo)
# Giu nguyen
if chon == oto:
thang_giu += 1
# Doi sang cua con lai
cua_doi = [c for c in range(3) if c != chon and c != mc_mo][0]
if cua_doi == oto:
thang_doi += 1
print(f"\nKet qua sau {n} lan mo phong:")
print(f"Giu nguyen cua: thang {thang_giu} lan ({round(thang_giu/n*100, 1)}%)")
print(f"Doi cua: thang {thang_doi} lan ({round(thang_doi/n*100, 1)}%)")
print(f"\nKet luan: {'DOI CUA' if thang_doi > thang_giu else 'GIU CUA'} co loi hon!")
print("Xac suat ly thuyet: Giu = 1/3, Doi = 2/3")