عند النظر إلى الشيفرة التي قدمتها، يبدو أنك تواجه مشكلة في عرض نتائج البرنامج على نافذة التيرمينال في نظام التشغيل macOS. لفهم السبب والعثور على الحلاً، يجب أن نلقي نظرة على الشيفرة وفهم كيف يتفاعل البرنامج مع الطباعة ومدخلات الأرجاف.
في الشيفرة الخاصة بك، تلاحظ أنك تستخدم sys.argv[0]
، وهذا يمثل اسم البرنامج نفسه بدلاً من أي معلومات يمكن تمريرها كوسيط. عليك أن تستخدم sys.argv[1]
بدلاً من ذلك للحصول على العنصر الأول في قائمة الوسائط، الذي يجب أن يكون اسم المستخدم الذي تريد إضافة العلامات التعجبية إليه.
علاوة على ذلك، هناك خطأ في شرط التحقق من __main__
في الشيفرة. يجب أن يكون __name__ == '__main__'
بدلاً من __name__ == '___main___'
. هذا يؤكد أن الشيفرة تعمل كبرنامج رئيسي عند تنفيذها، وهو شرط ضروري لضمان تنفيذ الشيفرة المناسبة.
الشيفرة المعدلة تبدو كما يلي:
python#!/usr/bin/env python
import sys
def Hello(name):
name = name + '!!!!'
print('Hello', name)
if __name__ == '__main__':
if len(sys.argv) > 1:
Hello(sys.argv[1])
else:
print("Usage: python lesson1.py " )
الآن يجب أن يعمل البرنامج بشكل صحيح عند تنفيذه في نافذة التيرمينال باستخدام الأمر python lesson1.py aaaa
.
المزيد من المعلومات
تعتبر المشكلة الرئيسية في الشيفرة الأصلية هي خطأ في شرط التحقق من __name__
، بحيث أنه كان مكتوبًا على النحو التالي: if __name__ == '___main___':
. يُفضل أن يكون الشرط الصحيح هو if __name__ == '__main__':
، حيث يتم تحقق __name__
من القيمة __main__
للتأكد من أن الشيفرة تعمل كبرنامج رئيسي.
فيما يلي توضيح للتعديلات التي تم إجراؤها في الشيفرة:
-
تصحيح شرط التحقق من
__name__
:pythonif __name__ == '__main__':
-
تعديل في استدعاء دالة
Hello
:pythonHello(sys.argv[1])
-
إضافة تحقق للتحقق من وجود وسيط (
sys.argv[1]
):pythonif len(sys.argv) > 1:
-
إضافة رسالة توجيهية في حالة عدم توفر وسيط:
pythonelse: print("Usage: python lesson1.py
" )
بإجراء هذه التعديلات، يضمن الشرط الصحيح لـ __name__
تنفيذ الشيفرة الموجودة داخل الكتلة فقط عندما يتم تشغيل البرنامج مباشرة، وليس عند استيراد الشيفرة كوحدة في برنامج آخر.