مفاهيم أساسية في البرمجة
في الفصل السابق كتبنا برنامجا أول. في هذا الفصل نتعلم مواد البناء التي يتكوّن منها كل برنامج: المتغيّرات التي تحفظ القيم، الأنواع التي تحدد معناها، العمليّات الحسابية التي تغيّرها، والمُدخَلات والمُخرَجات التي تصل البرنامج بالعالم.
- نكتب حلا لمشكلة بالكلمات قبل أن نكتبه بالشيفرة.
- نعرّف متغيّرات، نسند إليها قيما ونعرف نوع كل قيمة.
- نحسب بالمعاملات الحسابية وبالدوال الجاهزة، ونعرف ترتيب الحساب.
- نحوّل بين الأنواع وبين طرق عرض الأعداد.
- نميّز بين أنواع الأخطاء الثلاثة، ونتابع برنامجا بجدول متابعة.
2.1 كتابة خوارزمية بالكلمات – כתיבת אלגוריתם מילולי
قبل أن نكتب أمرا واحدا نسأل: ما الذي يدخل إلى البرنامج، وما الذي يجب أن يخرج منه؟ ثم نكتب الطريق بينهما بكلمات بسيطة.
عرّفنا الخوارزمية في البند 1.2 بأنها وصف مرتب ودقيق لخطوات الحل. نضيف هنا أن خطواتها منتهية، وأنها تقود من المُدخَلات إلى الحل، وأن كل خطوة فيها مفهومة ولا تترك مجالا للتخمين.
- نقرأ سعة البطارية بوحدة الأمبير ساعة.
- نقرأ تيار الحمل بوحدة الأمبير.
- نقسم السعة على التيار ونضرب الناتج في 60، فنحصل على زمن العمل بالدقائق، ونقرّبه إلى عدد صحيح.
- نقسم الدقائق على 60، والجزء الصحيح من الناتج هو عدد الساعات.
- باقي هذه القسمة هو الدقائق.
- نطبع الساعات والدقائق.
نلاحظ أننا لم نذكر أي أمر في بايثون. سنعود إلى هذه الخوارزمية في البند 2.15 ونترجمها إلى برنامج.
2.2 المتغيّر – משתנה
volts = 12 current = 0.5 print(volts) print(current)
12 0.5
نختار للمتغيّر اسما يدل على معناه: current أوضح من c. وللأسماء قواعد:
- يتكوّن الاسم من حروف إنجليزية وأرقام والإشارة
_، ولا يبدأ برقم. - لا يصح أن يكون كلمة محجوزة في اللغة، مثل
ifأوelse. - الحروف الكبيرة والصغيرة مختلفة:
Voltsوvoltsمتغيّران مختلفان.
2volts = 12
SyntaxError: invalid decimal literal
Volts = 12 print(volts)
NameError: name 'volts' is not defined
print ليست محجوزة بالمعنى الدقيق، لكنها اسم دالة جاهزة، وإذا استعملنا هذا الاسم لمتغيّر فقدنا الدالة. لذلك نتجنبه.2.3 الفئة، الصفات والعمليّات – מחלקה, תכונות ופעולות
نفكر في مقاومة على طاولة المختبر. كل المقاومات من النوع نفسه، لكن لكل واحدة قيمتها وقدرتها. الفئة هي الوصف العام، والكائن هو قطعة محددة صُنعت حسب هذا الوصف.
| المصطلح | بالعبرية | المعنى | مثال من المختبر |
|---|---|---|---|
| الفئة | מחלקה | وصف عام لنوع من الأشياء | المقاومة بشكل عام |
| الكائن | עצם | نسخة محددة من الفئة | هذه المقاومة التي في يدي |
| الصفة | תכונה | قيمة يحملها الكائن | القيمة بالأوم |
| العمليّة | פעולה | عمل ينفذه الكائن أو يُنفَّذ عليه | حساب هبوط الجهد على المقاومة |
في بايثون كل قيمة هي كائن من فئة ما. نصل إلى صفة أو إلى عمليّة بواسطة نقطة بعد اسم الكائن. العمليّة تأتي بعدها أقواس، والصفة بلا أقواس:
label = "solar panel"
print(label.upper())
print(label.count("a"))
reading = 12.0
print(reading.is_integer())
print(reading.real)SOLAR PANEL 2 True 12.0
هكذا عملنا في الفصل الأول مع الفئة الجاهزة Turtle: أنشأنا كائنا، وأعطيناه أوامر. أما كتابة فئات جديدة بأنفسنا فنتعلمها في الفصل 8.
import turtle pen = turtle.Turtle() pen.forward(100) print(pen.position())
2.4 أنواع المعطيات الأساسية – טיפוסי נתונים בסיסיים
نوع القيمة يحدد ماذا يمكن أن نفعل بها: الأعداد نجمعها، والجمل النصية نصلها ببعضها. نوع المعطيات (טיפוס נתונים) هو الفئة التي تنتمي إليها القيمة.
| النوع | بالعبرية | معناه | أمثلة |
|---|---|---|---|
| int | שלם | عدد صحيح | 250 , -3 , 0 |
| float | עשרוני | عدد عشري | 11.7 , 0.02 , 3.0 |
| str | מחרוזת | جملة نصية بين علامتي اقتباس | "fan" , "12" |
| bool | בוליאני | صواب أو خطأ | True , False |
samples = 250 volts = 11.7 device = "fan" running = True print(type(samples)) print(type(volts)) print(type(device)) print(type(running))
<class 'int'> <class 'float'> <class 'str'> <class 'bool'>
العدد 3.0 من النوع float مع أن قيمته صحيحة، لأن فيه نقطة. والجملة النصية "12" من النوع str مع أن أحرفها أرقام، لأنها بين علامتي اقتباس.
2.5 مجالات القيم وحجمها في الذاكرة – תחומי הערכים וגודלם בזיכרון
الوحدة الجاهزة sys تتيح لنا أن نسأل بايثون عن نفسها. نكتب import sys في بداية البرنامج، ثم نقرأ صفاتها:
import sys print(2 ** 100) print(sys.float_info.max) print(sys.float_info.min) print(sys.float_info.dig) print(sys.int_info.bits_per_digit) print(sys.float_info.max * 10)
1267650600228229401496703205376 1.7976931348623157e+308 2.2250738585072014e-308 15 30 inf
- العدد الصحيح
intفي بايثون بلا حد أقصى إلا ذاكرة الحاسوب، وهذا ما يبيّنه السطر الأول من المُخرَج. أماbits_per_digitفهو عدد الخانات الثنائية في كل قطعة من قطع تخزينه. - العدد العشري
floatله مجال محدود:float_info.maxهو أكبر عدد، وfloat_info.minهو أصغر عدد موجب بالدقة الكاملة، وfloat_info.digهو عدد الأرقام العشرية الموثوقة. - ما يتجاوز المجال يصبح
inf، أي ما لا نهاية، كما في السطر الأخير.
والدالة sys.getsizeof تعطي عدد البايتات التي تشغلها القيمة في الذاكرة:
import sys
print(sys.getsizeof(5))
print(sys.getsizeof(2 ** 100))
print(sys.getsizeof(1.5))
print(sys.getsizeof("abc"))
print(sys.getsizeof(True))28 40 24 44 28
2.6 أوامر الإسناد – פקודות השמה
في أمر الإسناد (השמה) أولا تُحسب القيمة التي على يمين الإشارة =، وبعدها توضع في المتغيّر الذي على يسارها. لذلك count = count + 1 ليست معادلة، بل تعني: نأخذ القيمة الحالية، نضيف إليها واحدا، ونضع النتيجة مكانها.
count = 10 count = count + 1 count += 4 count -= 2 count *= 3 print(count)
39
| الأمر | عمله |
|---|---|
| count += 4 | مثل count = count + 4 |
| count -= 2 | مثل count = count - 2 |
| count *= 3 | مثل count = count * 3 |
| count /= 2 | مثل count = count / 2 |
12 = volts
SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?
يمكن الإسناد إلى أكثر من متغيّر في أمر واحد:
v, i = 12, 0.5 print(v, i) a = b = 0 print(a, b)
12 0.5 0 0
a = b ثم b = a ضاعت قيمة a الأصلية، ولذلك نحفظها أولا في متغيّر مساعد.a = 3 b = 8 temp = a a = b b = temp print(a, b)
8 3
وفي بايثون طريقة أقصر، إذ تُحسب الجهة اليمنى كلها قبل الإسناد:
a = 3 b = 8 a, b = b, a print(a, b)
8 3
2.7 تعريف المتغيّرات وتهيئتها – הגדרה ואתחול של משתנים
المتغيّر يولد في أول مرة نسند إليه قيمة، وهذه هي تهيئته (אתחול). لا نكتب نوعه مسبقا، فبايثون تعرفه من القيمة. وقبل الإسناد الأول لا وجود له:
print(power) power = 60
NameError: name 'power' is not defined
الترتيب هنا هو الخطأ: البرنامج يُنفَّذ من الأعلى إلى الأسفل، ولا ينظر إلى ما سيأتي. والدالة type تكشف نوع المتغيّر في كل لحظة، وقد يتغيّر مع القيمة:
x = 5 print(type(x)) x = 2.5 print(type(x)) x = "off" print(type(x))
<class 'int'> <class 'float'> <class 'str'>
2.8 المعاملات الحسابية – אופרטורים חשבוניים
| الأمر | عمله |
|---|---|
| a + b | الجمع |
| a - b | الطرح |
| a * b | الضرب |
| a / b | القسمة، ونتيجتها عدد عشري دائما |
| a ** b | الرفع إلى قوة |
print(7 + 2) print(7 - 2) print(7 * 2) print(7 / 2) print(8 / 2) print(2 ** 10)
9 5 14 3.5 4.0 1024
/ تعطي float حتى عندما تكون النتيجة عددا صحيحا: 8 / 2 يعطي 4.0. وفي لغات أخرى يختلف هذا، فلا نحمل معنا عادات منها.volts = 12 current = 1.5 power = volts * current hours = 4 energy = power * hours print(power) print(energy)
18.0 72.0
العدد الصحيح مضروبا في عدد عشري يعطي عددا عشريا، ولذلك ظهرت النتيجتان بنقطة.
a = 9 b = 4 print(a / b) print(a * b - 1) print(a ** 2)
2.9 خارج القسمة وباقي القسمة – אופרטור מנה ושארית חלוקה
المعامل // يعطي خارج القسمة (מנה) بعد حذف الكسر، والمعامل % يعطي الباقي (שארית). هذان المعاملان يظهران في كل امتحان تقريبا. وإذا كان أحد العددين عشريا جاءت النتيجة عشرية أيضا، كما في السطرين الأخيرين من مُخرَج البرنامج التالي.
print(17 / 5) print(17 // 5) print(17 % 5) print(17.5 // 5) print(17.5 % 5)
3.4 3 2 3.0 2.5
في الساعة 3600 ثانية. خارج القسمة هو الساعات، والباقي هو الثواني التي لم تكمل ساعة. نكرر الأمر نفسه مع الدقائق:
seconds = 7384 hours = seconds // 3600 left = seconds % 3600 minutes = left // 60 secs = left % 60 print(hours, minutes, secs)
2 3 4
data = 1000 size = 64 full = data // size rest = data % size print(full, rest)
15 40
-7 // 2 يعطي -4 وليس -3، والباقي 1 موجب، لأن −4 · 2 + 1 = −7. أما الدالة int في السطر الثالث، وسنتعلمها في البند 2.12، فتحذف الكسر نحو الصفر، ولذلك تعطي -3:print(-7 // 2) print(-7 % 2) print(int(-7 / 2))
-4 1 -3
23 // 423 % 48 // 98 % 940 % 82.5 // 15 2 3 3 0 4 8 5 0 6 2.0 2.10 دوال رياضية جاهزة – פעולות מתמטיות בסיסיות
| الأمر | عمله |
|---|---|
| pow(a, b) | الرفع إلى قوة، مثل a ** b |
| max(a, b, ...) | أكبر القيم |
| min(a, b, ...) | أصغر القيم |
| abs(x) | القيمة المطلقة |
| round(x, n) | التقريب إلى n خانات بعد النقطة؛ بدون n إلى عدد صحيح |
| sum([a, b, ...]) | مجموع قائمة قيم |
| divmod(a, b) | خارج القسمة والباقي معا |
print(pow(2, 8)) print(max(4.1, 3.9, 5.0)) print(min(4.1, 3.9, 5.0)) print(abs(-12.5)) print(round(3.14159, 2)) print(round(3.7)) print(sum([12, 11.5, 12.5])) print(divmod(17, 5))
256 5.0 3.9 12.5 3.14 4 36.0 (3, 2)
الأقواس المربعة في sum تكوّن قائمة قيم، وسنتعرف إليها في الفصل 6. والأقواس المستديرة في نتيجة divmod تجمع قيمتين معا.
round لا يتصرف كما تعلمنا في المدرسة: العدد الواقع في منتصف الطريق بالضبط يُقرَّب إلى العدد الزوجي الأقرب. والمثال الثالث يبدو خطأ لأن 2.675 مخزَّن في الحاسوب أقل بقليل من قيمته:print(round(2.5)) print(round(3.5)) print(round(2.675, 2))
2 4 2.67
a = 11.8 b = 12.4 c = 12.0 high = max(a, b, c) low = min(a, b, c) print(round(high - low, 2)) print(round(sum([a, b, c]) / 3, 2))
0.6 12.07
الوحدة random تعطي قيما عشوائية، وهي مفيدة لمحاكاة حسّاس قبل أن يكون بين أيدينا. الدالة randint تعطي عددا صحيحا في المجال شاملا طرفيه، وrandom() تعطي عددا عشريا بين 0 و1، وuniform عددا عشريا في المجال:
import random random.seed(7) print(random.randint(1, 6)) print(random.randint(1, 6)) print(round(random.random(), 3)) print(round(random.uniform(11.5, 12.5), 2))
3 2 0.395 11.55
random.seed(7) يثبّت نقطة البداية، فنحصل في كل تشغيل على القيم نفسها. وضعناه هنا كي يطابق المُخرَج ما في الكتاب؛ من دونه تتغيّر القيم في كل تشغيل.2.11 التعابير الحسابية وترتيب العمليّات – ביטויים חשבוניים וסדר קדימויות
| الترتيب | العمليّات | ملاحظة |
|---|---|---|
| 1 | ( ) | الأقواس أولا |
| 2 | ** | من اليمين إلى اليسار |
| 3 | -x | الإشارة السالبة، بعد القوة |
| 4 | * / // % | من اليسار إلى اليمين |
| 5 | + - | من اليسار إلى اليمين |
print(2 + 3 * 4) print((2 + 3) * 4) print(2 ** 3 ** 2) print(-2 ** 2) print(20 / 2 * 5)
14 20 512 -4 50.0
a = 10 b = 20 print(a + b / 2) print((a + b) / 2)
20.0 15.0
خط الكسر يجمع المقام كله، أما في الشيفرة فلا يوجد خط، ولذلك نكتب الأقواس بأنفسنا:
r1 = 100 r2 = 300 total = r1 * r2 / (r1 + r2) print(total)
75.0
1 + 2 * 3(1 + 2) * 310 - 4 - 32 * 3 ** 218 / 3 / 27 % 4 * 27 2 9 3 3 4 18 5 3.0 6 6 2.12 التحويل بين الأنواع – המרות בין טיפוסי הנתונים
الدوال int وfloat وstr وbool تحوّل قيمة إلى النوع الذي تحمل اسمه:
print(int(3.9))
print(int(-3.9))
print(int("42"))
print(float(7))
print(float("3.5"))
print(str(12.5))
print(bool(0))
print(bool(0.5))
print(bool(""))
print(bool("0"))
print(int(True))3 -3 42 7.0 3.5 12.5 False True False True 1
intيحذف الكسر ولا يقرّب:int(3.9)يعطي3.boolيعطيFalseلكل صفر ولكل جملة نصية فارغة، وTrueلكل ما عداهما من قيم الأنواع التي تعلمناها حتى الآن، حتى الجملة النصية"0".
التحويل قد يفشل. جملة نصية فيها نقطة لا تتحوّل مباشرة إلى int، ولا نستطيع أن نصل عددا بجملة نصية من دون تحويل:
print(int("3.5"))ValueError: invalid literal for int() with base 10: '3.5'
print("Volts: " + 12)TypeError: can only concatenate str (not "int") to str
الإشارة + تعني الجمع بين عددين والوصل بين جملتين نصيتين، والإشارة * تعني الضرب بين عددين وتكرار جملة نصية:
print("Volts: " + str(12))
print("12" + "3")
print(12 + 3)
print("ab" * 3)Volts: 12 123 15 ababab
2.13 عرض القيم بطرق مختلفة – הצגת ערכים בצורות שונות
العدد نفسه يمكن كتابته بأكثر من نظام عد، كما تعلمنا في موضوع الأنظمة الرقمية. والحاسوب يخزّن كل حرف كعدد.
| الأمر | عمله |
|---|---|
| bin(x) | يعرض العدد بالنظام الثنائي، كجملة نصية تبدأ بـ 0b |
| hex(x) | يعرض العدد بالنظام السادس عشر، كجملة نصية تبدأ بـ 0x |
| 0b1101 , 0xFF | كتابة عدد مباشرة بالنظامين |
| int("1101", 2) | تحويل جملة نصية من نظام عد إلى عدد |
| ord("V") | رقم الحرف في جدول الترميز |
| chr(86) | الحرف الذي يحمل هذا الرقم |
print(bin(13))
print(hex(255))
print(0b1101)
print(0xFF)
print(int("1101", 2))
print(int("FF", 16))
print(ord("V"))
print(chr(86))
print(bin(ord("V")))
print(hex(ord("V")))0b1101 0xff 13 255 13 255 86 V 0b1010110 0x56
الأسطر الثلاثة الأخيرة تُظهر ما يحدث حقا عندما نرسل حرفا مثل V إلى أردوينو، كما سنفعل في الفصل 10: لا يُرسل حرف، بل بايت قيمته 0x56.
hex(16)؟(ب) ماذا يعطي
bin(5)؟(ج) ماذا يعطي
chr(ord("A"))؟2.14 أنواع الأخطاء – שגיאות לוגיות, שגיאות תחביר, שגיאות בזמן ריצה
| النوع | بالعبرية | متى يظهر | كيف نكتشفه |
|---|---|---|---|
| خطأ نحوي | שגיאת תחביר | قبل التشغيل | رسالة خطأ، ولا يُنفَّذ أي أمر |
| خطأ تشغيل | שגיאה בזמן ריצה | أثناء التشغيل | رسالة خطأ بعد أن عملت الأسطر السابقة |
| خطأ منطقي | שגיאה לוגית | لا يظهر وحده | لا رسالة: النتيجة خاطئة، ونكتشفها بالفحص |
الخطأ النحوي: قوس ناقص، فلا يطبع البرنامج شيئا، حتى ما كُتب قبل الخطأ:
print("start")
print("end"SyntaxError: '(' was never closedخطأ التشغيل: الأمر الأول يعمل، ثم يتوقف البرنامج عند القسمة على صفر أو عند اسم غير معروف، ولا يصل إلى ما بعده:
print("start")
r = 0
print(12 / r)
print("end")start ZeroDivisionError: division by zero
print("start")
print(volt)start NameError: name 'volt' is not defined
الخطأ المنطقي هو الأخطر: البرنامج التالي يعمل بلا شكوى، لكنه يضرب بدل أن يقسم في قانون أوم. التيار الصحيح هو 3 A:
volts = 12 resistance = 4 current = volts * resistance print(current)
48
2.15 الإدخال والإخراج ووصل الجمل النصية – פעולות קלט/פלט ושרשור מחרוזות
الدالة print تطبع قيما، وتفصل بينها بمسافة، وتنتقل إلى سطر جديد. الوسيط sep يغيّر الفاصل، والوسيط end يغيّر ما يأتي في النهاية. أما وصل الجمل النصية (שרשור) بالإشارة + فلا يضيف مسافة، ويحتاج إلى تحويل الأعداد:
volts = 12
print("Volts:", volts)
print("a", "b", "c", sep="-")
print("no new line", end=" | ")
print("same line")
print()
print("Volts: " + str(volts))Volts: 12 a-b-c no new line | same line Volts: 12
الدالة input تعرض رسالة، تنتظر ما يكتبه المستخدم، وتعيده جملة نصية دائما:
name = input("Sensor name: ")
print("Reading", name)Sensor name: Temp-1 Reading Temp-1
input هو جملة نصية حتى لو كتب المستخدم عددا. لذلك تصل الإشارة + الجملتين النصيتين بدل أن تجمعهما:a = input("a: ")
b = input("b: ")
print(a + b)
print(int(a) + int(b))a: 12 b: 30 1230 42
لذلك نحوّل مباشرة عند القراءة: int(input()) أو float(input()). نعود الآن إلى خوارزمية البطارية من البند 2.1، وكل خطوة منها تصبح أمرا:
capacity = float(input("Capacity (Ah): "))
load = float(input("Load (A): "))
total = round(capacity / load * 60)
hours = total // 60
minutes = total % 60
print("Runs for", hours, "h", minutes, "min")Capacity (Ah): 20 Load (A): 3 Runs for 6 h 40 min
2.16 جدول المتابعة – ביצוע טבלת מעקב
جدول المتابعة (טבלת מעקב) يعرض ما يحدث في البرنامج أمرا بعد أمر: عمود لكل متغيّر وعمود للمُخرَج. الخانة الفارغة تعني أن القيمة لم تتغير. وفي الفصل التالي يُضاف عمود لكل شرط.
volts = 12 current = 2 power = volts * current volts = volts - 1 print(volts, power)
| الأمر | volts | current | power | المُخرَج |
|---|---|---|---|---|
| volts = 12 | 12 | |||
| current = 2 | 2 | |||
| power = volts * current | 24 | |||
| volts = volts - 1 | 11 | |||
| print(volts, power) | 11 24 |
seconds مرتين، فننتبه إلى أن الترتيب مهم: لو غيّرنا قيمته قبل حساب الدقائق لفسد الحساب.seconds = int(input("Seconds: "))
minutes = seconds // 60
seconds = seconds % 60
print(minutes, seconds)| الأمر | seconds | minutes | المُخرَج |
|---|---|---|---|
| seconds = int(input("Seconds: ")) | 130 | Seconds: 130 | |
| minutes = seconds // 60 | 2 | ||
| seconds = seconds % 60 | 10 | ||
| print(minutes, seconds) | 2 10 |
x = 7 y = x % 3 x = x // 2 + y y = y * x print(x, y)
في الفصل السابق رسمنا محطة القياس التي تعمل ببطارية ولوح شمسي. الآن تبدأ المحطة بالقراءة: المحوّل التماثلي-الرقمي ذو العشر خانات يعطي عددا من 0 حتى 1023 يمثل جهدا من 0 حتى 5 V. جهد البطارية يدخله عبر مقسّم جهد يقسم على 4. وحسّاس الحرارة يعطي 10 mV لكل درجة، أي 0.01 V.
adc_batt = int(input("ADC battery: "))
adc_temp = int(input("ADC temp: "))
step = 5 / 1023
battery = adc_batt * step * 4
temp = adc_temp * step * 100
print("Battery:", round(battery, 2), "V")
print("Temp:", round(temp, 1), "C")ADC battery: 620 ADC temp: 82 Battery: 12.12 V Temp: 40.1 C
نجرّب بأنفسنا: ما قراءة المحوّل الأقرب إلى 12 V للبطارية؟ ونفحص الجواب في البرنامج.
أهمّ أفكار الفصل:
- نكتب الخوارزمية بالكلمات أولا، ثم نترجمها.
- المتغيّر يحفظ قيمة واحدة، والإسناد يحسب اليمين أولا ثم يضع النتيجة في اليسار.
- القسمة
/تعطي عددا عشريا، و//و%يعطيان الخارج والباقي. - الدالة
inputتعيد جملة نصية دائما، ونحوّلها قبل أن نحسب بها. - الخطأ المنطقي لا يعطي رسالة، ولذلك نفحص كل برنامج على مثال نعرف نتيجته.
ملخّص أوامر الفصل:
| الأمر | عمله |
|---|---|
| x = 5 x += 1 | الإسناد |
| + - * / ** // % | المعاملات الحسابية |
| type(x) | نوع القيمة |
| int(x) float(x) str(x) bool(x) | التحويل بين الأنواع |
| pow max min abs round sum divmod | دوال رياضية جاهزة |
| import random import sys | وحدات جاهزة |
| bin(x) hex(x) ord(c) chr(n) | طرق عرض القيم |
| print(a, b, sep="", end="") | الإخراج |
| float(input("...")) | قراءة عدد من المستخدم |
قاموس المصطلحات – מילון מונחים:
| بالعربية | بالعبرية (كما تظهر في الامتحان) | English |
|---|---|---|
| الخوارزمية | אלגוריתם | Algorithm |
| المتغيّر | משתנה | Variable |
| الإسناد | השמה | Assignment |
| التهيئة | אתחול | Initialization |
| نوع المعطيات | טיפוס נתונים | Data type |
| عدد صحيح · عدد عشري | שלם · עשרוני | Integer · Float |
| جملة نصية | מחרוזת | String |
| الفئة · الكائن | מחלקה · עצם | Class · Object |
| الصفة · العمليّة | תכונה · פעולה | Attribute · Method |
| خارج القسمة · الباقي | מנה · שארית | Quotient · Remainder |
| الخطأ النحوي | שגיאת תחביר | Syntax error |
| خطأ التشغيل | שגיאה בזמן ריצה | Runtime error |
| الخطأ المنطقي | שגיאה לוגית | Logical error |
| الوصل | שרשור | Concatenation |
| جدول المتابعة | טבלת מעקב | Trace table |
2.25 , 35 , 810x10 ، (ب) 0b101 ، (ج) A4 4أسئلة للتمرين:
a = 14 b = 4 print(a // b, a % b) print(a / b) print(a ** 2 - b) print(type(a / 2))
3 2 , 3.5 , 192 , <class 'float'>(أ)
7 / 7(ب)
7 // 7(ج)
"7"(د)
7 > 7float ، (ب) int ، (ج) str ، (د) boolvolts = float(input("V: "))
print("Half:", volts / 2)a = input("a: ")
b = input("b: ")
print("Sum: " + a + b)a = int(input("a: "))
b = int(input("b: "))
print("Sum: " + str(a + b))amps = float(input("Current (A): "))
hours = float(input("Hours: "))
print("Charge:", amps * hours, "Ah")2.5 و4 يطبع: Charge: 10.0 Ahf = float(input("Fahrenheit: "))
c = (f - 32) * 5 / 9
print(round(c, 1))98.6 يطبع: 37.0vin = float(input("Vin: "))
r1 = float(input("R1: "))
r2 = float(input("R2: "))
vout = vin * r2 / (r1 + r2)
print("Vout:", round(vout, 2))12, 1000, 500 يطبع: Vout: 4.0parts = int(input("Parts: "))
reel = int(input("Parts per reel: "))
print("Full reels:", parts // reel)
print("Left over:", parts % reel)1250 و300 يطبع: Full reels: 4 , Left over: 50| الأمر | seconds | minutes | المُخرَج |
|---|---|---|---|
| seconds = int(input("Seconds: ")) | 3599 | Seconds: 3599 | |
| minutes = seconds // 60 | 59 | ||
| seconds = seconds % 60 | 59 | ||
| print(minutes, seconds) | 59 59 |
value = int(input("Value: "))
print(bin(value))
print(hex(value))
print(value // 16, value % 16)202 يطبع: 0b11001010 , 0xca , 12 10. خارج القسمة والباقي هما الخانتان نفسهما: c وa تساويان 12 و10.adc = int(input("ADC: "))
percent = adc * 100 / 1023
print(round(percent, 1), "%")512 يطبع: 50.0 %import random random.seed(3) reading = 20 + random.uniform(-0.5, 0.5) print(round(reading, 2))
19.74bits = int(input("Bits: "))
print("Bytes:", bits // 8)
print("Extra bits:", bits % 8)
print("Bytes needed:", (bits + 7) // 8)20 يطبع: Bytes: 2 , Extra bits: 4 , Bytes needed: 3שאלות בגרות – أسئلة بجروت للفصل 2
// و%، وهذا نستطيع أن نفعله منذ الآن. يظهر السؤال بالعبرية كما في الامتحان.| البند | المطلوب | الإجابة |
|---|---|---|
| (ج) | مجموع خانات عدد موجب من ثلاث خانات. | في الأسفل |
| (أ) ، (ب) | يعتمدان على الحلقات والقوائم والعمليّات. | في الفصل 7 |
لم نتعلم كتابة العمليّات بعد، ولذلك نحسب مباشرة لعدد واحد. num // 100 يعطي خانة المئات، وnum % 10 يعطي خانة الآحاد، و(num // 10) % 10 يعطي خانة العشرات:
num = 472 hundreds = num // 100 tens = (num // 10) % 10 ones = num % 10 print(hundreds, tens, ones) print(hundreds + tens + ones)
4 7 2 13