אם אתה ילד משנות ה-70, אולי התבגרת וצופה בתוכנית המשחקים הפופולרית, בואו נעשה עסקה. מאז, אנשים דנים בצורה חיה בפאזל מונטי הול ונהנים לשכפל אותו. המתח והדרמה המטריפים שנוצרו כשהמתמודד בוחר באחת משלוש הדלתות מהנה לצפייה בכל פעם.
בעזרת מתמטיקה וקצת תכנות, אתה הולך לבנות סימולטור מונטי הול באמצעות Python. באמצעות זה, תוכל להחליט אחת ולתמיד שהחלפת הדלתות מגדילה את סיכויי הזכייה שלך.
מהי בעיית מונטי הול?
בעיית מונטי הול הוא טיזר מוח הקרוי על שם מנחה המשחקים, מונטי הול. יש שלוש דלתות, רק אחת מהן מכילה פרס מבוקש. ברגע שאתה בוחר דלת, מונטי - מי יודע מה עומד מאחוריהם - פותח דלת נוספת וחושף עז. כעת יש לך אפשרות להישאר עם ההחלטה המקורית שלך או לעבור לדלת השנייה.
בשל אופיו המפתיע והבלתי צפוי, פאזל מונטי הול פופולרי מאוד. למרות שהוא עוסק בהסתברויות, הפתרון נוגד את האינטואיציה. זה משמש כהדגמה מצוינת לכמה חישובי הסתברות מבלבלים יכולים להיות. הפאזל מלמד אותנו כיצד להתעלם מהתרשמות של התרחשויות אקראיות לכאורה ובמקום זאת להתמקד בהיגיון ובעובדות.
המודולים האקראיים וה-Tkinter
כדי לבנות הדמיית Monty Hall ב-Python, התחל עם המודולים Random ו-Tkinter.
ישנן מספר פונקציות להפקת מספרים אקראיים במודול האקראי. אתה יכול להשתמש באלגוריתמים אלה כדי ליצור רצפים מערבבים, תנועות משחק ומספרים שלמים פסאודו אקראיים. הוא משמש לעתים קרובות ב משחקים כמו קריקט יד, או מבחן הקלדה פשוט, כמו גם לדמות הטלת קוביות ולערבב רשימות.
Tkinter היא ספריית GUI המוגדרת כברירת מחדל עבור Python. באמצעותו, אתה יכול לבנות יישומי GUI פנטסטיים. תוכל ליצור אפליקציה לרשימת מטלות, עורך טקסט או מחשבון פשוט. אתה יכול ליישם את הידע שלך בפועל ולחדד את כישורי התכנות שלך באמצעות Python ו-Tkinter כדי לבנות אפליקציות שולחן עבודה בסיסיות.
פתח מסוף והפעל את הפקודה הבאה כדי להוסיף את Tkinter למערכת שלך:
pip להתקין tkinter
כיצד לבנות סימולטור מונטי הול באמצעות פייתון
אתה יכול למצוא את קוד המקור של סימולטור מונטי הול בזה מאגר GitHub.
ייבא את המודולים האקראיים וה-Tkinter. הפונקציה StringVar מקלה על השליטה בערך של ווידג'ט כמו תווית או ערך. אתה יכול להשתמש בתווית כדי להציג קצת טקסט על המסך וברשומה כדי להביא קלט משתמש.
אתחל את המופע של Tkinter והצג את חלון השורש. הגדר את מידות החלון לרוחב של 600 פיקסלים וגובה של 200 פיקסלים באמצעות ה- גֵאוֹמֶטרִיָה() שיטה. הגדר כותרת חלון מתאימה ואסור לשנות את גודלו.
יְבוּא אַקרַאִי
מ tkinter יְבוּא StringVar, Label, Tk, Entry
window = Tk()
window.geometry("600x200")
window.title("סימולציה של מונטי הול")
window.resizable(0, 0)
לאחר מכן, הגדר שני זוגות של ווידג'טים ומשתנים כדי לאחסן את תוצאות הסימולציה. האפליקציה שלך תבקש להשלים מספר ריצות. במהלך כל ריצה, הוא ידמה את המשחק ויתעד את התוצאה בכל מקרה: האם השחקן מחליט להחליף או לשמור על אותה בחירה.
באמצעות StringVar(), הגדר את הערכים ההתחלתיים של אותה בחירה והחלף את הבחירה ל-0. הגדר ווידג'ט של כניסה והגדר את גודל הגופן שלו ל-5. הכריז על שתי תוויות שיציגו את אותה הבחירה והבחירה המתחלפת וממקמים אותה. הכריז על שתי תוויות נוספות שיציגו את הערך של המשתנים שהגדרת קודם לכן. לבסוף, מקם את ווידג'ט הכניסה מתחת לארבע התוויות הללו.
same_choice = StringVar()
switched_choice = StringVar()
same_choice.set(0)
switched_choice.set(0)
no_sample = Entry (font=5)
תווית (טקסט="אותה בחירה").place (x=230, y=58)
תווית (טקסט="החלפת בחירה").place (x=230, y=90)
תווית (טקסטvariable=same_choice, font=(50)).place (x=350, y=58)
תווית (טקסטvariable=switched_choice, font=(50)).place (x=350, y=90)
no_sample.place (x=200, y=120)
הגדר פונקציה, לְחַקוֹת. אתחל את משתני התוצאה וקבל את ערך המדגם שהוזן על ידי המשתמש. הכריזו על רשימה המכילה את הפריטים שהדלתות יחשפו.
בתוך כל הפעלה, ערכו רשימה כפולה של הדלתות המקוריות וערבבו אותה בסדר אקראי. בחר דלת אקראית והסר אותה - זה מדמה את הבחירה של השחקן. לאחר מכן הדמי את הגילוי של מונטי: אם הדלת הראשונה אינה מכילה את הפרס, פתח אותו, אחרת פתח את הדלת השנייה. הסר את הבחירה הזו והשאיר את הדלת הנותרת כאפשרות לעבור אליה.
defלְחַקוֹת(מִקרֶה):
אותו_בחירה_תוצאה = 0
switched_choice_result = 0
samples = int (no_sample.get())
דלתות = ["זהב", "עֵז", "עֵז"]
ל _ ב טווח (דוגמאות):
simulated_doors = doors.copy()
random.shuffle (simulated_doors)
first_choice = random.choice (דלתות_סימולציה)
simulated_doors.remove (הבחירה_ראשונה)
opened_door = סימולציות_דלתות[0] אם סימולציות_דלתות[0] != "זהב"אַחֵר סימולציות_דלתות[1]
simulated_doors.remove (opened_door)
switched_second_choice = סימולציות_דלתות[0]
אם הבחירה הראשונה מכילה את הפרס הרצוי, הגדל את אותה תוצאת בחירה באחת ושקף אותה על המסך. אחרת, בצע את אותה פעולה עבור הבחירה המתחלפת.
אם בחירה ראשונה == "זהב":
same_choice_result += 1
same_choice.set (same_choice_result)
אליף switched_second_choice == "זהב":
switched_choice_result += 1
switched_choice.set (switched_choice_result)
שלב חשוב הוא לאגד את מקש Enter עם אירוע בחלון Tkinter. פעולה זו מבטיחה שכאשר הנגן לוחץ להיכנס, תפעל פונקציה מסוימת. כדי להשיג זאת, העבר את
ה mainloop() הפונקציה אומרת לפייתון להפעיל את לולאת האירועים של Tkinter ולהקשיב לאירועים (כגון לחיצות כפתורים) עד לסגירת החלון.
no_sample.bind("" , לדמות)
window.mainloop()
חבר את הכל יחד והפעל את התוכנית שלך כדי לדמות את הפאזל בפעולה.
פלט של סימולטור Monty Hall באמצעות Python
בהפעלת התוכנית, תראה חלון פשוט עם תוויות הבחירה אותו דבר והתוויות החלפה. הזן מספר דוגמה בשדה בתחתית כדי להציג תוצאות סימולציות. בדוגמה זו של 3 ריצות, התוכנית מראה שהיא מנצחת פעם אחת באותה בחירה ופעמיים עם מתג.
תוצאות אלו הן אקראיות, אך ניתן להפעיל את הסימולציה בגודל מדגם גדול יותר לדיוק רב יותר. בגודל המדגם הבא של 100, הבחירה המתחלפת מנצחת 65 פעמים.
פתרון בעיות באמצעות תכנות
סימולטור מונטי הול הוא הדגמה מצוינת של איך אתה יכול להשתמש בתכנות כדי לפתור בעיות מהחיים האמיתיים. אתה יכול לפתח אלגוריתמים שונים ולאמן מודלים לביצוע משימות מסוימות כמו מיון מערך או שיפור האפקטיביות של מערכת לייצור מיטבי.
שפות תכנות שונות מציעות יכולות ופונקציות שונות כדי להקל על התכנות. באמצעות Python, אתה יכול ליצור מודלים שיכולים לחזות את הערכים העתידיים של מערך נתונים עם דיוק גבוה יותר. יתר על כן, אתה יכול להפוך פעולות חוזרות ונשנות, להפחית עבודה משעממת ולשפר את המהירות והדיוק.