استقبال مدخلات المستخدم عبر دالة 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()always returns a string.A string that looks like a number is still a string, not a number.
In
super_secret_number = 7,7is a number, not a string.That makes
super_secret_numberalso a number.A string cannot equal a number.
To check that two values are equal, make sure they're the same type first.
So to compare a number and a string, first convert the number to a string or convert the string to a number.
You learned how to convert between strings and numbers in the previous page.
Use
int()to convert to an integer (whole number) orstr()to convert to a string.
ممتاز!
هناك حلان رئيسيان لهذه المشكلة. يمكنك تحويل إدخال المستخدم إلى عدد:
if int(guess) == super_secret_number: أو تحويل الإجابة الصحيحة إلى نص:
if guess == str(super_secret_number): الفرق المهم هو أن الحل الأول سيؤدي إلى خطأ إذا كتب المستخدم قيمة لا يمكن تحويلها إلى عدد. قد يكون هذا السلوك مناسبًا أو غير مناسب بحسب البرنامج الذي تبنيه.