الفصل 6
6.1 تعريف الدوال
2.
b.
يستدعي كل من السطور 1 و 4 و 5 الدالّة
print() مرة واحدة. بينما يستدعي السطران 2 و 3 دالّة مختلفة، وهي input().
3.
b.
السطر 1 هو تعليق (comment) لا يتم تنفيذه. يستدعي السطران 2 و 3 الدالّتين
float() و input() على التوالي. ويستدعي السطر 3 الدالّة print() ليصبح المجموع خمسة استدعاءات للدوال.
8.
c.
يستخدم كل حساب أربع تعليمات لقراءة قيم x,y لزوج من النقاط. يُجري البرنامج الأصلي ثلاثة حسابات بتكرار الشِفرة ليصبح المجموع 12 تعليمة إدخال. يُجري البرنامج المُعدّل ثلاثة حسابات بتنفيذ تعليمات الإدخال الأربع عدة مرات مع استدعاءات الدوال.
9.
c.
تبرز فوائد إعادة الاستخدام للدالّة من خلال العديد من استدعاءات الدوال التي تقلل بشكل كبير من كمية الشِفرة المزدحمة والزائدة. استدعاء
calc_distance() 10 مرات يعادل 60 تعليمة في البرنامج الأصلي.
6.2 سير التنفيذ
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 نطاق المُتغيِّر
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.
4.
a.
سيُشغّل البرنامج بشكل صحيح. يمكن أن يكون للوسائط والمُعامِلات نفس الاسم، وسيظل يتم إنشاء مُتغيِّر محلي يُسمى
name في print_welcome(). يمكن أن يكون النطاق مُربكًا مع المُتغيِّرات التي تحمل نفس الاسم.
5.
a.
p1_x هو الوسيط الأول المستخدم في استدعاء الدالّة في السطر 9. x1 مُعرّف كأول مُعامِل للدالّة calc_distance().
6.
b.
y1 مُعرّف كثاني مُعامِل للدالّة calc_distance(). p1_y هو الوسيط الثاني في استدعاء الدالّة في السطر 9.
8.
a.
القائمة قابلة للتغيير، لذا يتم تعديل الكائن الذي يشير إليه
wknd_temps و temps دون الحاجة إلى نسخة محلية.
9.
b.
السلسلة النصية غير قابلة للتغيير، لذا تُنشئ
convert_temps() كائنًا جديدًا لـ unit للإشارة إليه.
6.5 القيم المُرجَعة
2.
b.
return
هي تعليمة صالحة لإنهاء الدالّة والعودة إلى الشِفرة المستدعية بدون قيمة محددة. يجب أن تُرجع calc_sqft() المُتغيِّر sqft بالسطر return sqft.
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.
6.6 الوسائط المُسمَّاة
3.
a.
"Welcome"
غير مُسمّى ويُسند بشكل صحيح إلى count. يجب أن تأتي الوسائط الموضعية قبل الوسائط المُسمَّاة.
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.