استقبال مدخلات المستخدم عبر دالة input()
البرامج التي كتبناها حتى الآن لا تتفاعل مع المستخدم أثناء التشغيل. ولإنشاء لعبة Tic-Tac-Toe تفاعلية نحتاج إلى استقبال إدخال من اللاعبين.
يوفر بايثون الدالة المدمجة input لهذا الغرض. شغّل البرنامج:
print('Type your name, then press Enter:')
name = input()
print(f'Hello {name}!')
عندما يصل التنفيذ إلى name = input() يتوقف البرنامج وينتظر أن تكتب شيئًا في الطرفية ثم تضغط Enter. بعد ذلك فقط يستطيع إكمال التنفيذ.
أي شيء تكتبه للمستخدم، باستثناء ضغط Enter نفسه، تعيده input() كسلسلة نصية.
من الضروري أن تتذكر أن input() تعيد نصًا دائمًا مهما بدا ما كتبه المستخدم. أنت المسؤول عن تحويل هذا النص إلى النوع الذي يحتاجه البرنامج. نسيان هذه النقطة مصدر شائع لأخطاء محيرة.
مثلًا، البرنامج التالي يبدو صحيحًا للوهلة الأولى، لكنه لا يعمل كما تتوقع:
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().
input()تعيد نصًا دائمًا.النص الذي يبدو كرقم يظل نصًا، وليس عددًا.
في
super_secret_number = 7، القيمة7عدد وليست نصًا.إذًا
super_secret_numberنفسه عدد أيضًا.لا يمكن لنص أن يساوي عددًا.
قبل مقارنة قيمتين بالمساواة، تأكد أنهما من النوع نفسه.
لمقارنة عدد بنص، حوّل العدد إلى نص أو حوّل النص إلى عدد أولًا.
تعلمت في الصفحة السابقة كيف تحوّل بين النصوص والأعداد.
استخدم
int()للتحويل إلى عدد صحيح، وstr()للتحويل إلى نص.
ممتاز!
هناك حلان رئيسيان لهذه المشكلة. يمكنك تحويل إدخال المستخدم إلى عدد:
if int(guess) == super_secret_number:
أو تحويل الإجابة الصحيحة إلى نص:
if guess == str(super_secret_number):
الفرق المهم هو أن الحل الأول سيؤدي إلى خطأ إذا كتب المستخدم قيمة لا يمكن تحويلها إلى عدد. قد يكون هذا السلوك مناسبًا أو غير مناسب بحسب البرنامج الذي تبنيه.