27-04-2018, 07:51 PM
التفاعل مع المستخدم
من حين لآخر ، قد يكون من المفيد طرح سؤال على المستخدم.
الدالة input
تطلب هذه الدالة من المستخدم ادخال بيانات باستخدام لوحة المفاتيح وتنتظره إلى أن ينقر مفتاح الإدخال Enter :
كود :
city_name = input("Enter the city name : ")
print(f"The city name = {city_name}")
تنبيه: التحقق من المدخلة / التحويل
لاحظ جيدا أن الدالة input تعيد **دائما** سلسلة نصية (str). ولكن من السهل جدا أن ننسى ذلك ونمرر هذه السلسلة مباشرة إلى وظيفة أو دالة تتوقع، على سبيل المثال ، تلقي عدد صحيح ، وفي هذه الحالة تسوء الأمور:
كود :
input("number of lines ? ") + 3
number of lines ? 12
#u== والنتيجة ===
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be str, not int
في المثال السابق كان يتوجب استخدام الدالة int لتحويل المدخلة النصية الى عدد صحيح قبل إجراء عملية الجمع:
كود :
input("number of lines ? ") + 3
number of lines ? 12
محدودية الدالة input
قد تكون هذه الدالة مفيدة في خطواتك الأولى مع بيثون. عمليا، قليلا ما يتم استخدامها لأن التطبيقات الحقيقية تأتي بواجهة المستخدم الخاصة بها سواء كانت واجهة رسومية أو واجهة نصية، ويكون لديها بالتالي طرق أخرى للتفاعل مع المستخدم.
بالنسبة للبرامج المطورة بلغة بيثون والتي تشتغل عبر الطرفية، فهي تتلقى البيانات التي يدرجها المستخدم من خلال الطرفية نفسها. من بين الأدوات المساعدة في ذلك نجد الوحدة النمطية argparse كما في المثال التالي:
كود :
#u== السطور التالية لا تشتغل إلا من خلال الطرفية ===
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(dest="number", type=int,
help="This will calculate the square of your input number")
input_args = parser.parse_args()
number = input_args.number
print("You have entered {}".format(number))
print("The square of your given number: {}".format(number**2))
بما أن السطور السابقة موجهة للاستخدام عبر الطرفية، فلابد من حفظها في ملف: مثلا arg_parser.py ثم تنفيذ السكربت :
كود :
python3 arg_parser.py 7