مسئله مانتی هال

برنامه نویسی بازی مسئله مانتی هال در پایتون

مانتی هال در پایتون یک از بازی‌های کامپیوتری جالب است. مسئله مانتی هال که از یک بازی آمریکایی با همین نام برگرفته شده است از مسائل جذاب و جالب احتمالاتی است. در احتمالات گسسته جواب مسائل ساده حاصل یک کسر است که صورت آن تعداد پیامدهای مطلوب و مخرج آن تعداد پیامدهای کل است.

در این بازی سه درب وجود دارد که پشت دو تا از آنان، جایزه فقط یک بز است (درب پوچ) و یک درب مربوط به اتاق جایزه اصلی (خودرو) است.

مانتی هال در پایتون

از شرکت کننده که نمی‌داند کدام درب حاوی چیست خواسته می‌شود یک درب را انتخاب کند. در اینجا مشخص است احتمال پیروزی شرکت کننده کسر 1/3 است. اما بازی به همین جا ختم نمی‌شود. مجری بازی که می‌داند هر درب به روی چی باز می‌شود، یک درب حاوی بز را بدون باز کردن درب انتخابی شرکت کننده، باز می‌کند. شرکت کننده در انتخاب اول چه بز انتخاب کرده باشد چه خودرو قطعا درب دیگری حاوی بز است که مجری باز کند. اکنون دو درب مجهول اند که یکی از آنان انتخاب اولیه شرکت کننده بوده است. اکنون مجری از وی می‌پرسد آیا میخواهد بر روی انتخاب خود باقی بماند یا انتخاب خود را عوض می‌کند؟

شرکت کنندگانی که احتمالات ندانند فکر می‌کنند فرقی نمی‌کند و احساسی بر اساس شانس تصمیم می‌گیرند. ولی اگر احتمالات بدانند متوجه می‌شوند همیشه با تغییر انتخاب در این مرحله شانس پیروزی خود در مسئله مانتی هال را دو برابر می‌کنند.

اما اکنون هدف ما ساخت و شبیه سازی این بازی با مفاهیم بسیار ساده برنامه نویسی به زبان پایتون است. مطلوب است تمام فعالیت‌های مجری را برنامه کامپیوتری بصورت تصادفی انجام دهد. در اینجا برای آموزش برنامه نویسی سعی می‌شود از حداقل امکانات پایتون استفاده شود.

 

#monty hall problem simulator
#https://haman.academy/
#Python
#####################################################
import random
doors=[0,0,0]
doors[random.randint(0,2)]=1
a=int(input(‘Which door? 1,2 or 3? ‘))
while True:
i=random.randint(1,3)
if a!=i:
if doors[i-1]==0:
print(‘Door #’+str(i)+’ is one the goats’)
break
for c in range(1,4):
if c not in (a,i):
break
print(‘Do you wish to change your decision to door #’+str(c)+’ Or you will keep door #’+str(a)+’ ?’)
i=int(input(‘Which one is your preferred? ‘+str(a)+’ OR ‘+str(c)+’ ? ‘))
if doors[i-1]==1:
print(‘WOW You WIN!’)
else:
print(‘You win the goat’)

در کد مانتی هال در پایتون فوق نخست یک متغیر آرایه‌ای از نوع لیست با نام doors ساخته شده و تمام درب ها را پوچ می‌گذاریم. سپس با توابع تصادفی یکی از درب‌ها را که هر یک از درایه‌های آرایه هستند، با مقدار 1 جایگزین کرده که می‌شود درب جایزه. مرحله بعدی برنامه با حلقه while مرحله ای است که مجری باید یکی از درب های بز را باز کند. در واقعیت مجری محتویات درب‌ها را می‌داند و یک بز را نشان می‌دهد ولی در این برنامه پایتون مطلوب است بصورت تصادفی درب‌های انتخاب نشده توسط کاربر را انتخاب کنیم و اگر پوچ بود (محتوای 0) آن را معرفی کنیم. تا اینجا درب انتخابی کاربر متغیر a و در معرفی شده توسط مجری متغیر i هستند. در حلقه for بعدی برنامه که تمام درب ها را تصادفی انتخاب کرده است به دنبال درب بسته و انتخاب نشده توسط کاربر می‌گردد و آن را برابر متغیر c قرار می‌دهد. از کاربر پرسیده می‌شود انتخاب a را نگاه می‌دارد یا به انتخاب c تغییر نظر می‌دهد. تصمیم کاربر را با محتوای درب مقایسه می‌کنیم اگر درایه آن 1 بود درب جایزه است و برنده اعلام می‌شود.

0 پاسخ

دیدگاه خود را ثبت کنید

Want to join the discussion?
Feel free to contribute!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *