الفصل 6

الفصل 6

6.1 تعريف الدوال

1.
c. تُستدعى الدالّة print() لإخراج المُتغيِّر، offset_num.
2.
b. يستدعي كل من السطور 1 و 4 و 5 الدالّة print() مرة واحدة. بينما يستدعي السطران 2 و 3 دالّة مختلفة، وهي input().
3.
b. السطر 1 هو تعليق (comment) لا يتم تنفيذه. يستدعي السطران 2 و 3 الدالّتين float() و input() على التوالي. ويستدعي السطر 3 الدالّة print() ليصبح المجموع خمسة استدعاءات للدوال.
4.
b. السطر الصحيح هو def water_plant(): .
5.
c. يُخرج البرنامج الرئيسي "User info:" ثم يستدعي print_phone_num()، التي تُخرج رقم الهاتف.
6.
b. يتضمن استدعاء الدالّة اسم الدالّة والأقواس.
7.
a. calc_tax موجز، مكتوب باصطلاح snake_case، ويشير إلى مهمة الدالّة.
8.
c. يستخدم كل حساب أربع تعليمات لقراءة قيم x,y لزوج من النقاط. يُجري البرنامج الأصلي ثلاثة حسابات بتكرار الشِفرة ليصبح المجموع 12 تعليمة إدخال. يُجري البرنامج المُعدّل ثلاثة حسابات بتنفيذ تعليمات الإدخال الأربع عدة مرات مع استدعاءات الدوال.
9.
c. تبرز فوائد إعادة الاستخدام للدالّة من خلال العديد من استدعاءات الدوال التي تقلل بشكل كبير من كمية الشِفرة المزدحمة والزائدة. استدعاء calc_distance() 10 مرات يعادل 60 تعليمة في البرنامج الأصلي.

6.2 سير التنفيذ

1.
c. السطر 5 هو بداية البرنامج الرئيسي، وهو غير مُزاح. تُستدعى park_greet() في السطر 6 وتُنفّذ.
2.
b. ينتقل سير التنفيذ إلى حيث تم تعريف park_greet()، في السطر 4.
3.
c. يعود سير التنفيذ إلى السطر الذي استدعى الدالّة. يحتوي السطر 12 على استدعاء الدالّة extra_lot()، لذلك يعود سير التنفيذ إلى السطر 12.
4.
c. يحتوي البرنامج على خطأ في المسافة البادئة. print("Open ...") غير مُزاح، لذا فإن التعليمة ليست جزءًا من park_greet() ويتم تنفيذها أولاً. ثم تُستدعى park_greet()، وتُنفّذ print("Welcome ...").
5.
c. تحتوي حلقة التكرار المحدد (for loop) على ثلاثة تكرارات. يستدعي كل تكرار print_book_club()، والتي تستدعي print_conf(). لذا يستدعي البرنامج print_book_club() ثلاث مرات و print_conf() ثلاث مرات.
6.
b. يعود سير التنفيذ إلى السطر 11، الذي استدعى print_conf(). ثم تنتهي print_book_club()، ويعود سير التنفيذ إلى السطر 16، الذي استدعى print_book_club().

6.3 نطاق المُتغيِّر

1.
c. يتم إنشاء كل من num و num_sq خارج الدوال وهما مُتغيِّرات عامة.
2.
a. يتم إنشاء num خارج دالّة وهو عام. يتم إنشاء num_sq في print_square() وهو ليس عامًا.
3.
c. num عام ويمكن الوصول إليه في أي مكان في البرنامج، بما في ذلك print_double() و print_square().
4.
b. out_str هو المُتغيِّر الوحيد المُعلن في print_time() وهو مُتغيِّر محلي.
5.
c. يتم الوصول إلى out_str في print_greeting() ولكنه أُنشئ في تعليمات خارج print_greeting().
6.
b. تُنشئ print_time() المُتغيِّر out_str كمُتغيِّر محلي. out_str موجود فقط في النطاق (in scope) داخل print_time() ولا يمكن الوصول إليه في أي مكان آخر.
7.
a. المُتغيِّر العام hour لا يتم تعديله في update_hour(). tmp هو المُتغيِّر المحلي الذي تم تعديله. يتم التخلص من tmp بعد انتهاء update_hour().
8.
c. new_hour هو مُتغيِّر محلي تحاول تعليمة print الوصول إليه بعد انتهاء update_hour(). new_hour خارج النطاق (out of scope)، لذا ينتج خطأ.
9.
b. يمكن استخدام الكلمة المفتاحية global لإنشاء مُتغيِّر عام من داخل دالّة. new_hour له نطاق عام ويمكن الوصول إليه خارج update_hour().

6.4 المُعامِلات

1.
b. username هو الوسيط (argument) الذي يتم تمريره إلى print_welcome(). name هو المُعامِل (parameter) الخاص بـ print_welcome() والذي يتم إسناد قيمة username إليه.
2.
a. name هو المُعامِل الوحيد المُعرّف مع print_welcome(). username هو الوسيط الذي تم تمريره في استدعاء الدالّة في السطر 5.
3.
a. name هو مُعامِل موجود فقط ضمن استدعاء لـ print_welcome().
4.
a. سيُشغّل البرنامج بشكل صحيح. يمكن أن يكون للوسائط والمُعامِلات نفس الاسم، وسيظل يتم إنشاء مُتغيِّر محلي يُسمى name في print_welcome(). يمكن أن يكون النطاق مُربكًا مع المُتغيِّرات التي تحمل نفس الاسم.
5.
a. p1_x هو الوسيط الأول المستخدم في استدعاء الدالّة في السطر 9. x1 مُعرّف كأول مُعامِل للدالّة calc_distance().
6.
b. y1 مُعرّف كثاني مُعامِل للدالّة calc_distance(). p1_y هو الوسيط الثاني في استدعاء الدالّة في السطر 9.
7.
c. 3 هي قيمة حرفية تم تمريرها كوسيط ثالث، والذي يتوافق مع x2، المُعامِل الثالث.
8.
a. القائمة قابلة للتغيير، لذا يتم تعديل الكائن الذي يشير إليه wknd_temps و temps دون الحاجة إلى نسخة محلية.
9.
b. السلسلة النصية غير قابلة للتغيير، لذا تُنشئ convert_temps() كائنًا جديدًا لـ unit للإشارة إليه.
10.
a. لا يمكن تغيير قيمة الكائن غير القابل للتغيير.
11.
b. لم يعد unit موجودًا بعد انتهاء convert_temps() والعودة إلى السطر 14.

6.5 القيم المُرجَعة

1.
a. تُحدّد calc_mpg() أن يتم إرجاع mpg باستخدام تعليمة الإرجاع.
2.
b. return هي تعليمة صالحة لإنهاء الدالّة والعودة إلى الشِفرة المستدعية بدون قيمة محددة. يجب أن تُرجع calc_sqft() المُتغيِّر sqft بالسطر return sqft.
3.
c. إذا لم يتم تحديد القيمة المُرجَعة أو تعليمة الإرجاع، تُرجع الدالّة None .
4.
b. num == 3 هي True ، لذا تُنفّذ تعليمة return "dk".
5.
a. بالنسبة لـ inc_volume(9,10)، تُرجع return level القيمة 9 ، ولا يتم الوصول إلى level += 1 أبدًا.
6.
b. تُقيّم bill += tax(bill) + auto_tip(bill) إلى bill += 6.0 + 20.0 ثم إلى bill = 100.0 + 6.0 + 20.0 ليصبح 126.0.
7.
a. تُقيّم val2 = sq(offset(5)) إلى val2 = sq(3) ليصبح 9.

6.6 الوسائط المُسمَّاة

1.
d. يستخدم استدعاء الدالّة جميع الوسائط المُسمَّاة لإسناد القيم إلى المُعامِلات المُسمَّاة.
2.
b. "Hiya" هي قيمة msg و "Ash" هي قيمة name في الدالّة.
3.
a. "Welcome" غير مُسمّى ويُسند بشكل صحيح إلى count. يجب أن تأتي الوسائط الموضعية قبل الوسائط المُسمَّاة.
4.
b. تتبع الوسائط الموضعية، "Hi" و "Bea" ، الوسيط المُسمّى count=1، مما ينتج عنه خطأ.
5.
b. القيمة الافتراضية لـ name هي "Friend" ، والقيمة الافتراضية لـ count هي 1 . msg ليس له قيمة افتراضية.
6.
c. msg هو وسيط مطلوب تم إسناد "Greetings" إليه. يستخدم name و count القيم الافتراضية. يتم طباعة "Greetings Friend" .
7.
b. msg="Hello"، name="Friend"، و count=0، لذا الاستدعاء صالح. تُنفّذ الدالّة ولكنها لا تدخل حلقة التكرار المحدد لأن count=0.