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

 

آموزش انسیس فلوئنت


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


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


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


از کمپانی کننده که نمی‌داند کدام درب دربردارنده چه میباشد مراد می‌گردد یک درب را تعیین نماید. در اینجا مشخص و معلوم می باشد احتمال موفقیت کمپانی کننده کسر 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 بود درب پاداش می‌باشد و پیروز اعلام میگردد