القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

إذا كنت طفلاً في السبعينيات ، فربما نشأت في مشاهدة عرض الألعاب الشهير ، Let's Make a Deal. منذ ذلك الحين ، يناقش الناس بوضوح لغز مونتي هول ويستمتعون بتكرارها. التشويق والدراما المذهلة التي تم إنشاؤها أثناء اختيار المتسابق لأحد الأبواب الثلاثة هي متعة المشاهدة في كل مرة.

باستخدام الرياضيات والقليل من البرمجة ، ستقوم ببناء Monty Hall Simulator باستخدام Python. باستخدام هذا ، ستكون قادرًا على أن تقرر مرة واحدة وإلى الأبد أن تبديل الأبواب يزيد من فرصك في الفوز.

ما هي مشكلة مونتي هول؟

مشكلة مونتي هول هو إعلان تشويقي للدماغ سمي على اسم مضيف برنامج الألعاب ، مونتي هول. هناك ثلاثة أبواب ، واحد منها فقط يحتوي على الجائزة المرغوبة. بمجرد أن تختار الباب ، يفتح مونتي - الذي يعرف ما وراءهم - بابًا آخر ، ويكشف عن عنزة. لديك الآن خيار التمسك بقرارك الأصلي أو التبديل إلى الباب الآخر.

نظرًا لطبيعته المدهشة وغير المتوقعة ، فإن أحجية مونتي هول تحظى بشعبية كبيرة. على الرغم من أنه يتعامل مع الاحتمالات ، إلا أن الحل يتحدى الحدس. إنه بمثابة إثبات ممتاز لمدى إرباك حسابات الاحتمالات. يعلمنا اللغز كيفية تجاهل الانطباعات عن الأحداث التي تبدو عشوائية والتركيز بدلاً من ذلك على التفكير والحقائق.

instagram viewer

الوحدات العشوائية و Tkinter

لبناء محاكاة Monty Hall في Python ، ابدأ بوحدتي Random و Tkinter.

هناك عدة وظائف لإنتاج أرقام عشوائية في وحدة عشوائية. يمكنك استخدام هذه الخوارزميات لإنشاء تسلسلات عشوائية وحركات اللعبة وأعداد صحيحة شبه عشوائية. كثيرا ما يستخدم في ألعاب مثل لعبة الكريكيت اليدوية، أو اختبار بسيط في الكتابة، وكذلك لمحاكاة لفات النرد وخلط القوائم.

Tkinter هي مكتبة واجهة المستخدم الرسومية الافتراضية لـ Python. باستخدامه ، يمكنك إنشاء تطبيقات واجهة المستخدم الرسومية الرائعة. يمكنك إنشاء تطبيق قائمة مهام أو محرر نصوص أو آلة حاسبة بسيطة. يمكنك وضع معرفتك موضع التنفيذ وصقل مهاراتك في البرمجة باستخدام Python و Tkinter لإنشاء تطبيقات سطح المكتب الأساسية.

افتح Terminal وقم بتشغيل الأمر التالي لإضافة Tkinter إلى نظامك:

نقطة تثبيت tkinter

كيفية بناء محاكي مونتي هول باستخدام بايثون

يمكنك العثور على الكود المصدري لـ Monty Hall Simulator في هذا مستودع جيثب.

استيراد وحدات عشوائية وتكنتر. تعمل وظيفة StringVar على تسهيل التحكم في قيمة عنصر واجهة المستخدم مثل Label أو Entry. يمكنك استخدام Label لعرض بعض النص على الشاشة وإدخال لجلب إدخال المستخدم.

قم بتهيئة مثيل Tkinter وعرض نافذة الجذر. اضبط أبعاد النافذة بحيث تكون بعرض 600 بكسل وطول 200 بكسل باستخدام امتداد الهندسة () طريقة. عيّن عنوان نافذة مناسبًا ، وحظر تغيير حجمه.

يستورد عشوائي
من tkinter يستورد StringVar ، Label ، Tk ، الإدخال

نافذة = Tk ()
window.geometry ("600 × 200")
window.title ("محاكاة مونتي هول")
window.resizable (0, 0)

بعد ذلك ، قم بإعداد زوجين من الأدوات والمتغيرات لتخزين نتائج المحاكاة. سيطلب تطبيقك عددًا من عمليات التشغيل لإكمالها. أثناء كل شوط ، سيحاكي اللعبة ويسجل النتيجة في كل حالة: سواء قرر اللاعب التبديل أو الاحتفاظ بنفس الاختيار.

باستخدام StringVar () ، اضبط القيم الأولية لنفس الاختيار وقم بتبديل الاختيار إلى 0. حدد عنصر واجهة مستخدم Entry واضبط حجم الخط على 5. قم بتعريف تسميتين لعرض نفس الخيار الذي تم تبديله ووضعه. قم بتعريف تسميتين إضافيتين ستعرضان قيمة المتغيرات التي حددتها مسبقًا. أخيرًا ، ضع أداة الإدخال أسفل هذه التسميات الأربعة.

same_choice = StringVar ()
switched_choice = StringVar ()
same_choice.set (0)
switched_choice.set (0)
no_sample = إدخال (font =5)

التسمية (نص ="الخيار نفسه") مكان (س =230، ص =58)
التسمية (نص ="خيار مبدّل") مكان (س =230، ص =90)
التسمية (textvariable = same_choice ، الخط = (50)) المكان (x =350، ص =58)
التسمية (textvariable = switched_choice ، font = (50)) المكان (x =350، ص =90)
no_sample.place (x =200، ص =120)

تحديد وظيفة ، محاكاة. قم بتهيئة متغيرات النتيجة واحصل على قيمة العينة التي أدخلها المستخدم. قم بالإعلان عن قائمة تحتوي على العناصر التي ستكشفها الأبواب.

داخل كل شوط ، قم بعمل قائمة مكررة من الأبواب الأصلية وخلطها بترتيب عشوائي. اختر بابًا عشوائيًا وقم بإزالته — هذا يحاكي اختيار اللاعب. ثم قم بمحاكاة كشف مونتي: إذا كان الباب الأول لا يحتوي على الجائزة ، فافتحه ، وإلا افتح الباب الثاني. أزل هذا الخيار واترك الباب المتبقي كخيار للتبديل إليه.

defمحاكاة(حدث):
same_choice_result = 0
switched_choice_result = 0
عينات = int (no_sample.get ())
أبواب = ["ذهب", "معزة", "معزة"]

ل _ في النطاق (العينات):
simulated_doors = Doors.copy ()
عشوائي. عشوائي (محاكاة_أبواب)
first_choice = اختيار عشوائي (أبواب_محاكاة)
simulated_doors.remove (الاختيار الأول)
open_door = simulated_doors [0] لو أبواب_محاكاة [0] != "ذهب"آخر أبواب_محاكاة [1]
simulated_doors.remove (فتح_ باب)
switched_second_choice = simulated_doors [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 () تخبر الوظيفة Python بتشغيل حلقة حدث Tkinter والاستماع إلى الأحداث (مثل الضغط على الأزرار) حتى تغلق النافذة.

no_sample.bind (""، محاكاة)
window.mainloop ()

ضع كل ذلك معًا وقم بتشغيل برنامجك لمحاكاة اللغز أثناء العمل.

إخراج Monty Hall Simulator باستخدام Python

عند تشغيل البرنامج ، سترى نافذة بسيطة مع تسميات الاختيار "نفس" و "تم التبديل". أدخل رقمًا نموذجيًا في الحقل الموجود في الجزء السفلي لعرض نتائج المحاكاة. في هذه العينة المكونة من 3 عمليات تشغيل ، يُظهر البرنامج أنه يفوز مرة واحدة بنفس الاختيار ومرتين باستخدام مفتاح.

هذه النتائج عشوائية ، ولكن يمكنك تشغيل المحاكاة بحجم عينة أكبر لمزيد من الدقة. في حجم العينة التالي البالغ 100 ، يفوز الخيار البديل 65 مرة.

حل المشكلات باستخدام البرمجة

يعد Monty Hall Simulator عرضًا رائعًا لكيفية استخدام البرمجة لحل مشكلات الحياة الواقعية. يمكنك تطوير خوارزميات مختلفة وتدريب النماذج لتنفيذ مهام معينة مثل فرز مصفوفة أو تحسين فعالية النظام لتحقيق الإنتاج الأمثل.

تقدم لغات البرمجة المختلفة إمكانيات ووظائف مختلفة لتسهيل البرمجة. باستخدام Python ، يمكنك إنشاء نماذج يمكنها التنبؤ بالقيم المستقبلية لمجموعة البيانات بدقة أعلى. علاوة على ذلك ، يمكنك أتمتة العمليات المتكررة وتقليل العمل الممل وتحسين السرعة والدقة.