cb
codebamin
الفصل 11 · مشروع لعبة إكس-أو (Tic-Tac-Toe)

استقبال مدخلات المستخدم عبر دالة input()

البرامج التي كتبناها حتى الآن لا تتفاعل مع المستخدم أثناء التشغيل. ولإنشاء لعبة Tic-Tac-Toe تفاعلية نحتاج إلى استقبال إدخال من اللاعبين.

يوفر بايثون الدالة المدمجة input لهذا الغرض. شغّل البرنامج:

__copyable__ __program_indented__

عندما يصل التنفيذ إلى name = input() يتوقف البرنامج وينتظر أن تكتب شيئًا في الطرفية ثم تضغط Enter. بعد ذلك فقط يستطيع إكمال التنفيذ.

أي شيء تكتبه للمستخدم، باستثناء ضغط Enter نفسه، تعيده input() كسلسلة نصية.

من الضروري أن تتذكر أن input() تعيد نصًا دائمًا مهما بدا ما كتبه المستخدم. أنت المسؤول عن تحويل هذا النص إلى النوع الذي يحتاجه البرنامج. نسيان هذه النقطة مصدر شائع لأخطاء محيرة.

مثلًا، البرنامج التالي يبدو صحيحًا للوهلة الأولى، لكنه لا يعمل كما تتوقع:

__copyable__ super_secret_number = 7

print("What number am I thinking of?") guess = input() if guess == super_secret_number: print("Amazing! Are you psychic?") else: print("Nope!")

أصلح البرنامج بحيث إذا أدخل المستخدم قيمة super_secret_number، وهي 7 هنا، يطبع Amazing! Are you psychic?. يجب أن يعمل الحل عندما تكون super_secret_number أي عدد صحيح int.

المشكلة أن guess نص، بينما super_secret_number عدد. حوّل إحدى القيمتين إلى نوع الأخرى قبل المقارنة باستخدام int() أو str().

ممتاز!

هناك حلان رئيسيان لهذه المشكلة. يمكنك تحويل إدخال المستخدم إلى عدد:

if int(guess) == super_secret_number:

أو تحويل الإجابة الصحيحة إلى نص:

if guess == str(super_secret_number):

الفرق المهم هو أن الحل الأول سيؤدي إلى خطأ إذا كتب المستخدم قيمة لا يمكن تحويلها إلى عدد. قد يكون هذا السلوك مناسبًا أو غير مناسب بحسب البرنامج الذي تبنيه.

solution.py
1
2
3
4
5
6
7
8
9
10
الطرفية (shell)
>>>