Ако сте клинац из 70-их, можда сте одрасли гледајући популарну емисију игрица Хајде да се договоримо. Од тада, људи живо расправљају о слагалици Монти Хол и забављају се реплицирајући је. Запањујућа неизвесност и драма која се ствара док такмичар бира једно од три врата је забавно гледати сваки пут.
Користећи математику и мало програмирања, направићете Монти Хол симулатор користећи Питхон. Користећи ово, моћи ћете једном заувек да одлучите да мењање врата повећава ваше шансе за победу.
Шта је проблем Монтија Хола?
Проблем Монтија Хола је мозгалица названа по домаћину игара, Монтију Холу. Постоје троја врата, од којих само једна садржи жељену награду. Једном када одаберете врата, Монти — ко зна шта је иза њих — отвара друга врата, откривајући козу. Сада имате могућност да се држите своје првобитне одлуке или пређете на друга врата.
Због своје изненађујуће и непредвидиве природе, слагалица Монти Хол је веома популарна. Иако се бави вероватноћама, решење пркоси интуицији. Служи као одлична демонстрација колико збуњујуће могу бити прорачуни вероватноће. Загонетка нас учи како да занемаримо утиске наизглед случајних дешавања и да се уместо тога фокусирамо на расуђивање и чињенице.
Рандом и Ткинтер модули
Да бисте направили Монти Хол симулацију у Питхон-у, почните са Рандом и Ткинтер модулима.
Постоји неколико функција за производњу случајних бројева у Рандом модулу. Можете користити ове алгоритме да генеришете измешане секвенце, покрете игре и псеудо-случајне целе бројеве. Често се користи у игре као што је ручни крикет, или једноставан тест куцања, као и за симулацију бацања коцкица и за мешање листа.
Ткинтер је подразумевана ГУИ библиотека за Питхон. Користећи га, можете направити фантастичне ГУИ апликације. Можете да направите апликацију за листу обавеза, уређивач текста или једноставан калкулатор. Своје знање можете применити у пракси и усавршити своје вештине програмирања користећи Питхон и Ткинтер да бисте направили основне апликације за десктоп рачунаре.
Отворите терминал и покрените следећу команду да додате Ткинтер у свој систем:
пип инсталл ткинтер
Како направити Монти Халл симулатор користећи Питхон
Овде можете пронаћи изворни код Монти Халл Симулатора ГитХуб спремиште.
Увезите насумичне и Ткинтер модуле. Функција СтрингВар олакшава контролу вредности виџета као што је ознака или унос. Можете користити Ознаку да прикажете неки текст на екрану и Ентри да преузмете кориснички унос.
Иницијализујте Ткинтер инстанцу и прикажите основни прозор. Подесите димензије прозора на 600 пиксела ширине и 200 пиксела висине користећи геометрија() методом. Поставите одговарајући наслов прозора и забраните његову промену величине.
увоз насумично
из ткинтер увоз СтрингВар, Лабел, Тк, Ентри
прозор = Тк()
виндов.геометри("600к200")
виндов.титле("Монти Халл Симулатион")
виндов.ресизабле(0, 0)
Затим подесите два пара виџета и променљивих за чување резултата симулације. Ваша апликација ће тражити неколико покретања да се заврши. Током сваке вожње, симулираће игру и бележити резултат у сваком случају: да ли играч одлучи да промени или задржи исти избор.
Користећи СтрингВар(), поставите почетне вредности истог избора и пребаците избор на 0. Дефинишите виџет за унос и подесите његову величину фонта на 5. Декларисајте две ознаке да бисте приказали исти и промењени избор и позиционирајте га. Декларисајте још две ознаке које ће приказати вредност променљивих које сте раније дефинисали. На крају, поставите виџет за унос испод ове четири ознаке.
исти_избор = СтрингВар()
свитцхед_цхоице = СтрингВар()
саме_цхоице.сет(0)
свитцхед_цхоице.сет(0)
но_сампле = Унос (фонт=5)
Ознака (текст="Исти избор").место (к=230, и=58)
Ознака (текст="Промењени избор").место (к=230, и=90)
Ознака (текстуална променљива=исти_избор, фонт=(50)).место (к=350, и=58)
Ознака (тектвариабле=свитцхед_цхоице, фонт=(50)).место (к=350, и=90)
но_сампле.плаце (к=200, и=120)
Дефинишите функцију, симулирати. Иницијализујте променљиве резултата и добијте вредност узорка коју је унео корисник. Прогласите листу која садржи ставке које ће врата открити.
Унутар сваке вожње, направите дупликат листе оригиналних врата и промешајте је насумичним редоследом. Изаберите насумична врата и уклоните их - ово симулира избор играча. Затим симулирајте Монтијево откриће: ако прва врата не садрже награду, отворите их, у супротном отворите друга врата. Уклоните тај избор и оставите преостала врата као опцију за пребацивање.
дефсимулирати(догађај):
исти_избор_резултат = 0
свитцхед_цхоице_ресулт = 0
узорци = инт (но_сампле.гет())
врата = ["злато", "коза", "коза"]
за _ ин опсег (узорци):
симулирана_врата = врата.цопи()
рандом.схуффле (симулатед_доорс)
фирст_цхоице = рандом.цхоице (симулирана_врата)
симулатед_доорс.ремове (први_избор)
отворена_врата = симулирана_врата[0] ако симулирана_врата[0] != "злато"друго симулирана_врата[1]
симулатед_доорс.ремове (опенед_доор)
свитцхед_сецонд_цхоице = симулирана_врата[0]
Ако први избор садржи жељену награду, повећајте исти резултат избора за један и одразите га на екрану. У супротном, извршите исту операцију за промењени избор.
ако први_избор == "злато":
исти_избор_резултат += 1
саме_цхоице.сет (саме_цхоице_ресулт)
елиф свитцхед_сецонд_цхоице == "злато":
свитцхед_цхоице_ресулт += 1
свитцхед_цхоице.сет (свитцхед_цхоице_ресулт)
Важан корак је да повежете тастер Ентер са догађајем у Ткинтер прозору. Тиме се осигурава да када играч притисне Ентер, одређена функција ће се покренути. Да бисте то постигли, прођите
Тхе маинлооп() функција каже Питхон-у да покрене Ткинтер петљу догађаја и ослушкује догађаје (као што је притисак на дугме) док не затворите прозор.
но_сампле.бинд("" , симулирати)
виндов.маинлооп()
Ставите све заједно и покрените свој програм да симулирате слагалицу у акцији.
Излаз Монти Хол симулатора користећи Питхон
Када покренете програм, видећете једноставан прозор са ознакама истог и промењеног избора. Унесите број узорка у поље на дну да бисте видели симулиране резултате. У овом узорку од 3 покретања, програм показује да побеђује једном са истим избором и два пута са прекидачем.
Ови резултати су насумични, али можете покренути симулацију са већом величином узорка ради веће прецизности. У следећој величини узорка од 100, замењени избор побеђује 65 пута.
Решавање проблема помоћу програмирања
Монти Халл Симулатор је одлична демонстрација како можете користити програмирање за решавање проблема из стварног живота. Можете развити различите алгоритме и обучити моделе за обављање одређених задатака као што је сортирање низа или побољшање ефикасности система за оптималну производњу.
Различити програмски језици нуде различите могућности и функције које олакшавају програмирање. Користећи Питхон, можете креирати моделе који могу да предвиде будуће вредности скупа података са већом тачношћу. Штавише, можете аутоматизовати операције које се понављају, смањити досадан рад и побољшати брзину и тачност.