نظرة عامة على العوامل
البرمجة هي في الأساس "إجراء عمليات على البيانات." في الدرس 02 تعلمنا عن المتغيرات؛ الآن دعنا نتعلم عن العوامل — ما هي القدرات الحسابية التي تقدمها بايثون. العمليات الحسابية، المقارنة، القرارات المنطقية، دمج السلاسل النصية... بعد هذا الدرس، ستحل العديد من المشكلات الواقعية باستخدام بايثون.
1. العوامل الحسابية
استخدمنا بعض العوامل في الدرس 02. إليك القائمة الكاملة:
| العامل | الاسم | مثال | النتيجة | ملاحظات |
|---|---|---|---|---|
+ |
جمع | 5 + 3 |
8 |
يعمل أيضاً لدمج السلاسل النصية |
- |
طرح | 5 - 3 |
2 |
يُستخدم أيضاً كنفي: -5 |
* |
ضرب | 5 * 3 |
15 |
يعمل أيضاً لتكرار السلاسل النصية |
/ |
قسمة | 5 / 3 |
1.666... |
دائماً يُرجع float |
// |
قسمة أرضية | 5 // 3 |
1 |
يُقرّب للأسفل، يتجاهل الجزء الكسري |
% |
باقي القسمة | 5 % 3 |
2 |
باقي القسمة |
** |
أس | 5 ** 3 |
125 |
5 أس 3 |
عاملان جديران بالملاحظة
غرابة / (القسمة):
print(4 / 2) # يُخرج 2.0، وليس 2
كثير من الناس يتوقفون عند هذا: 4 مقسومة على 2 هي بوضوح 2، فلماذا تُخرج بايثون 2.0؟ لأن عامل / في بايثون دائماً يُرجع float، حتى عندما تكون القسمة متساوية. هذا يحافظ على توقع النتائج — ترى / وتعرف أن النتيجة ستكون float.
مصيدة // (القسمة الأرضية):
print(7 // 3) # يُخرج 2 (7 ÷ 3 = 2.333، مقربة للأسفل = 2)
print(-7 // 3) # يُخرج -3 ← قد لا يكون ما تتوقعه
-7 // 3 يعطي -3، وليس -2. عامل // في بايثون هو قسمة أرضية (تُقرّب نحو اللانهاية السالبة)، وليس "اقتطاعاً نحو الصفر." على خط الأعداد، -2.333 مقربة للأسفل هي -3. إذا كنت تريد الاقتطاع نحو الصفر، استخدم int(-7 / 3)، الذي يعطي -2.
// كـ "قسمة أرضية" بدلاً من "قسمة أعداد صحيحة" — "قسمة أعداد صحيحة" توحي بالاقتطاع، وهو لا ينطبق على الأعداد السالبة.
مثال: تحويل البوصات والسنتيمترات (الصعوبة ⭐)
# بوصات إلى سنتيمترات: 1 بوصة = 2.54 سم
# طول مسطرة قياسية
inches = 12
# حوّل باستخدام الضرب
cm = inches * 2.54
# الإخراج (لاحظ أن cm تصبح float تلقائياً)
print(f"{inches} inches = {cm} cm")
# عكسياً: سم ← بوصة (باستخدام القسمة)
cm_value = 30
inches_value = cm_value / 2.54
print(f"{cm_value} cm = {inches_value:.2f} inches")
# جرب القسمة الأرضية وباقي القسمة — كم قطعة بطول 5 بوصات في 12 بوصة؟
count = 12 // 5 # قسمة أرضية: 2
remainder = 12 % 5 # باقي القسمة: 2 بوصة متبقية
print(f"12 inches can be divided into {count} segments of 5 inches, with {remainder} inches left")
المخرجات:
12 inches = 30.48 cm
30 cm = 11.81 inches
12 inches can be divided into 2 segments of 5 inches, with 2 inches left
2. عوامل المقارنة
عوامل المقارنة تُقيّم العلاقات بين القيم وتُرجِع دائماً قيمة منطقية (True أو False). إنها أساس المنطق الشرطي.
| العامل | الاسم | مثال | النتيجة |
|---|---|---|---|
== |
يساوي | 5 == 3 |
False |
!= |
لا يساوي | 5 != 3 |
True |
> |
أكبر من | 5 > 3 |
True |
< |
أصغر من | 5 < 3 |
False |
>= |
أكبر من أو يساوي | 5 >= 5 |
True |
<= |
أصغر من أو يساوي | 5 <= 3 |
False |
age = 18
print(age == 18) # True (بالضبط 18)
print(age != 18) # False (ليس "لا يساوي")
print(age > 21) # False (ليس كبيراً بما يكفي)
print(age >= 18) # True (بالضبط سن الرشد، يحقق الشرط)
المقارنات المتسلسلة
تدعم بايثون بناء جملة موجز نادر في اللغات الأخرى:
x = 15
print(10 < x < 20) # True (تعادل 10 < x and x < 20)
print(0 < x < 10) # False
هذا يبدو طبيعياً أكثر من 10 < x and x < 20، مثل الترميز الرياضي.
is و is not (مقارنة الهوية)
بالمعنى الدقيق، is ليس عاملاً مقارناً، لكن غالباً ما يُقارن بـ ==:
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b) # True (نفس المحتوى)
print(a is b) # False (لكن ليس نفس الكائن)
print(a is c) # True (c مجرد اسم مستعار لـ a)
==يقارن القيمة: "هل المحتويات متطابقة؟"isيقارن الهوية: "هل يشيران إلى نفس الكائن؟"
في التطوير اليومي، 99% من الوقت تستخدم ==. الاصطلاح هو استخدام is فقط عند التحقق من None: if result is None:.
مثال: تصنيف مجموعة سباق (الصعوبة ⭐)
# قواعد تجميع سباق 100 متر
# العمر 12–15 ← المجموعة الصغرى
# العمر 16–20 ← مجموعة الشباب
participant_age = 14
# استخدم عوامل المقارنة لتحديد المجموعة
is_teen_group = 12 <= participant_age <= 15 # مقارنة متسلسلة
is_youth_group = participant_age >= 16 and participant_age <= 20
print(f"Participant age: {participant_age}")
print(f"Junior group (12-15): {is_teen_group}")
print(f"Youth group (16-20): {is_youth_group}")
# استخدام == و !=
age_verified = True
print(f"Age verified: {age_verified == True}")
print(f"Age not verified: {age_verified != True}")
المخرجات:
Participant age: 14
Junior group (12-15): True
Youth group (16-20): False
Age verified: True
Age not verified: False
3. العوامل المنطقية
العوامل المنطقية تجمع بين شروط متعددة، والنتيجة هي أيضاً قيمة منطقية. تُستخدم في كل مكان في جمل if وشروط الحلقات.
| العامل | الاسم | مثال | النتيجة | ملاحظات |
|---|---|---|---|---|
and |
AND منطقي | True and False |
False |
True فقط إذا كان كلاهما صحيحاً |
or |
OR منطقي | True or False |
True |
True إذا كان واحد على الأقل صحيحاً |
not |
NOT منطقي | not True |
False |
نفي |
age = 20
has_id_card = True
# and: كلا الشرطين يجب أن يتحققا
print(age >= 18 and has_id_card) # True (بالغ ولديه هوية)
# or: شرط واحد على الأقل
print(age >= 18 or has_id_card) # True (في الواقع كلاهما متحقق)
# not: نفي
print(not has_id_card) # False (not True = False)
جدول الحقيقة
| a | b | a and b | a or b | not a |
|---|---|---|---|---|
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
التقييم القصير
للعوامل المنطقية في بايثون ميزة مهمة: التقييم القصير.
# بالنسبة لـ and: إذا كان الجانب الأيسر False، لا يُقيّم الجانب الأيمن أبداً
def say_yes():
print("say_yes was called")
return True
print(False and say_yes()) # يُخرج False — say_yes لم يُنفّذ أبداً
print(True and say_yes()) # يُخرج "say_yes was called" و True
# بالنسبة لـ or: إذا كان الجانب الأيسر True، لا يُقيّم الجانب الأيمن
print(True or say_yes()) # يُخرج True — say_yes لم يُنفّذ أبداً
هذا مفيد جداً في الممارسة:
# احصل على اسم المستخدم فقط إذا كان المستخدم موجوداً — يتجنب خطأ None.get()
user = None
username = user and user.get("name") # user is None (falsy), يختصر، username = None
print(username) # None
user = {"name": "Xiao Ming"}
username = user and user.get("name") # user is truthy, يُقيّم الجانب الأيمن
print(username) # Xiao Ming
user and user.get("name") شائع في بايثون — يضمن "الوصول الآمن": إذا كان الجانب الأيسر falsy، أرجع مباشرة دون تقييم الجانب الأيمن الذي قد يسبب خطأ.
مثال: التحقق مما إذا كان الرقم "مميزاً" (الصعوبة ⭐⭐)
ادمج عوامل المقارنة والمنطق للتحقق مما إذا كان الرقم يحقق "شروطاً خاصة" معينة.
# تحقق مما إذا كان الرقم "مميزاً"
# التعريف: بين 10-99، ومن مضاعفات 7 أو يحتوي على الرقم 7
num = 49
# الشرط 1: بين 10-99 (مقارنة متسلسلة)
in_range = 10 <= num <= 99
# الشرط 2: مضاعف للرقم 7 (باقي القسمة + مقارنة)
multiple_of_7 = num % 7 == 0
# الشرط 3: يحتوي على الرقم 7 (رقم العشرات = 7 أو رقم الآحاد = 7)
tens_digit = num // 10 # استخرج رقم العشرات
ones_digit = num % 10 # استخرج رقم الآحاد
contains_7 = (tens_digit == 7) or (ones_digit == 7)
# ادمج جميع الشروط مع العوامل المنطقية
is_special = in_range and (multiple_of_7 or contains_7)
print(f"Number: {num}")
print(f"In range (10-99): {in_range}")
print(f"Multiple of 7: {multiple_of_7}")
print(f"Contains digit 7: {contains_7}")
print(f"Is special: {is_special}") # True — 49 من مضاعفات 7
# تحقق من التقييم القصير — إذا فشل الشرط الأول، لن يعمل الباقي
num2 = 200 # خارج النطاق
is_special2 = (10 <= num2 <= 99) and (num2 % 7 == 0)
print(f"\nNumber {num2}: first condition is False, second won't execute — {is_special2}")
المخرجات:
Number: 49
In range (10-99): True
Multiple of 7: True
Contains digit 7: False
Is special: True
Number 200: first condition is False, second won't execute — False
4. عوامل الإسناد
إلى جانب = الأساسي، توفر بايثون عوامل إسناد مركبة:
x = 10 # إسناد أساسي
x += 3 # تعادل x = x + 3، النتيجة: 13
x -= 2 # تعادل x = x - 2، النتيجة: 11
x *= 2 # تعادل x = x * 2، النتيجة: 22
x /= 4 # تعادل x = x / 4، النتيجة: 5.5
x //= 2 # تعادل x = x // 2، النتيجة: 2.0
x %= 2 # تعادل x = x % 2، النتيجة: 0.0
x = 3 # تعادل x = x 3، النتيجة: 0.0
لاحظ أن x = 10 عدد صحيح، لكن بعد x /= 4 يصبح 5.5 (float)، لأن / يُرجع دائماً float. استخدم //= إذا كنت تحتاج نتيجة صحيحة.
# زيادة نموذجية في حلقة
score = 0
score += 10 # أضف 10 نقاط
score += 20 # أضف 20 أخرى
score += 15 # أضف 15 أخرى
print(f"Final score: {score}") # 45
# السلاسل النصية تعمل أيضاً مع الإسناد المركب
message = "Hello"
message += " " # أضف مسافة
message += "World"
print(message) # "Hello World"
x += 1 هي طريقة بايثون لـ "الزيادة بمقدار 1." اللغات الأخرى تكتب x++. بايثون ليس لديها عامل ++؛ استخدم += 1.
5. عوامل السلاسل النصية
السلاسل النصية لها "عملياتها" الخاصة — ليست رياضية تماماً، لكنها تستخدم نفس الرموز.
| العامل | الغرض | مثال | النتيجة |
|---|---|---|---|
+ |
دمج | "Hello" + " " + "World" |
"Hello World" |
* |
تكرار | "Ha" * 3 |
"HaHaHa" |
in |
عضوية | "Py" in "Python" |
True |
not in |
عدم عضوية | "xyz" not in "Python" |
True |
# دمج السلاسل النصية
first_name = "Zhang"
last_name = "San"
full_name = first_name + last_name
print(full_name) # يُخرج "Zhang San"
# تكرار السلسلة النصية — رائع لرسم الخطوط الفاصلة
line = "=" * 30
print(line) # يُخرج 30 علامة يساوي
# التحقق من العضوية (in / not in)
text = "Hello, Python!"
print("Python" in text) # True — "Python" جزء من النص
print("Java" in text) # False — النص لا يحتوي "Java"
print("Java" not in text) # True — بالفعل "ليس هناك"
+ يعمل فقط بين سلسلتين نصيتين، وليس بين سلسلة ورقم. "Age: " + 25 سيُسبب خطأ. حول الرقم أولاً: "Age: " + str(25). * يعمل فقط بين سلسلة نصية وعدد صحيح — "AB" * 3 جيد، "AB" * "CD" ليس جيداً.
مثال: إنشاء بطاقة عمل باستخدام عمليات السلاسل النصية (الصعوبة ⭐⭐)
# أنشئ بطاقة عمل بسيطة باستخدام عمليات السلاسل النصية
name = "Li Ming"
title = "Python Engineer"
company = "Tech Co., Ltd."
# ادمج محتوى البطاقة باستخدام +
card_line1 = "Name: " + name
card_line2 = "Title: " + title
card_line3 = "Company: " + company
# أنشئ فاصلاً باستخدام *
separator = "-" * 25
# ادمج في بطاقة كاملة
business_card = separator + "\n" + card_line1 + "\n" + card_line2 + "\n" + card_line3 + "\n" + separator
print("Generated Business Card:")
print(business_card)
# تحقق مما إذا كانت تحتوي على معلومات محددة باستخدام in
search_term = "Python"
print(f"\nDoes card contain \"{search_term}\"? {search_term in business_card}")
# استبعد معلومات معينة باستخدام not in
print(f"Card doesn't contain \"Manager\": {\"Manager\" not in business_card}")
المخرجات:
Generated Business Card:
-------------------------
Name: Li Ming
Title: Python Engineer
Company: Tech Co., Ltd.
-------------------------
Does card contain "Python"? True
Card doesn't contain "Manager": True
6. أولوية العوامل
تماماً كما في الرياضيات "الضرب قبل الجمع"، لدى بايثون أولوية للعوامل.
| الأولوية | الفئة | العوامل | ملاحظات |
|---|---|---|---|
| عالية | الأس | ** |
ترابط أيمن |
| ↓ | أحادي | +x, -x, not |
موجب/سالب، NOT منطقي |
| ↓ | حسابي | *, /, //, % |
ضرب، قسمة، قسمة أرضية، باقي القسمة |
| ↓ | حسابي | +, - |
جمع، طرح |
| ↓ | مقارنة | ==, !=, >, <, >=, <= |
مقارنات |
| ↓ | منطقي | not |
NOT منطقي |
| ↓ | منطقي | and |
AND منطقي |
| ↓ | منطقي | or |
OR منطقي |
| منخفضة | إسناد | =, +=، إلخ. |
إسناد |
# الضرب قبل الجمع
result = 2 + 3 * 4
print(result) # 14 (3*4=12، ثم +2)
# المقارنة لها أولوية أقل من العمليات الحسابية
print(2 + 3 * 4 > 10) # True (14 > 10)
# المنطقي له أقل أولوية — قم بالمقارنات أولاً، ثم ادمج منطقياً
age = 20
print(age > 18 and age < 60) # True (أولاً age>18 و age<60، ثم and)
# الأس له ترابط أيمن
print(2 3 2) # 512 (أولاً 3²=9، ثم 2⁹=512)
print((2 3) 2) # 64 (مع الأقواس، أولاً 2³=8، ثم 8²=64)
# الأقواس تغير الأولوية — تماماً مثل الرياضيات
result = (2 + 3) * 4
print(result) # 20 (أولاً 2+3=5، ثم ×4)
مثال: حاسبة الرهن العقاري (الصعوبة ⭐⭐)
# احسب الدفعة الشهرية للرهن العقاري (دفعة متساوية)
# المعادلة: شهرياً = القرض × المعدل_الشهري × (1 + المعدل_الشهري)^الشهور ÷ [(1 + المعدل_الشهري)^الشهور - 1]
# افترض قرض 1,000,000، معدل سنوي 4.5%، 30 سنة
loan_amount = 1_000_000 # إجمالي القرض (الشرطات السفلية للقراءة، بايثون 3.6+)
annual_rate = 0.045 # معدل الفائدة السنوي
years = 30
months = years * 12 # عدد الدفعات
monthly_rate = annual_rate / 12 # معدل الفائدة الشهري
# قسمها خطوة بخطوة
rate_power = (1 + monthly_rate) ** months # (1 + المعدل الشهري)^الشهور
numerator = loan_amount * monthly_rate * rate_power # البسط
denominator = rate_power - 1 # المقام
monthly_payment = numerator / denominator
print(f"Loan amount: {loan_amount:,} yuan")
print(f"Annual rate: {annual_rate * 100}%")
print(f"Loan term: {years} years")
print(f"Monthly payment: {monthly_payment:.2f} yuan")
print(f"Total repayment: {monthly_payment * months:,.2f} yuan")
print(f"Total interest: {monthly_payment * months - loan_amount:,.2f} yuan")
المخرجات:
Loan amount: 1,000,000 yuan
Annual rate: 4.5%
Loan term: 30 years
Monthly payment: 5,066.85 yuan
Total repayment: 1,824,066.95 yuan
Total interest: 824,066.95 yuan
1_000_000 هي فقط لسهولة القراءة البشرية — بايثون تتجاهلها. هذه ميزة من بايثون 3.6+ لفصل الأرقام بصرياً. لا تستطيع تذكر الأولوية؟ استخدم الأقواس — الصيغة أعلاه واضحة لأي شخص مع الأقواس.
7. مشكلات دقة الأعداد العشرية
كل مبرمج يواجه هذا:
print(0.1 + 0.2) # يُخرج 0.30000000000000004
print(0.3) # يُخرج 0.3
print(0.1 + 0.2 == 0.3) # يُخرج False ← إنهما غير متساويين!
هذا ليس خطأ في بايثون — إنه قيد أساسي لتخزين الأعداد العشرية في النظام الثنائي. تماماً كما لا يمكن للعدد العشري تمثيل 1/3 = 0.33333... بدقة، لا يمكن للنظام الثنائي تمثيل 0.1 بدقة.
متى يجب الحذر
- الحسابات المالية (التي تتضمن أموالاً) — لا تستخدم
floatمباشرة أبداً؛ استخدم وحدةdecimal - المقارنات — لا تستخدم
==لمقارنة الأعداد العشرية؛ استخدم التحقق من الفرق
# الطريقة الصحيحة لمقارنة الأعداد العشرية
result = 0.1 + 0.2
epsilon = 1e-10 # رقم صغير جداً، حوالي 0.0000000001
print(abs(result - 0.3) < epsilon) # يُخرج True
- تنسيق العرض — استخدم f-string لتحديد المنازل العشرية
print(f"{0.1 + 0.2:.2f}") # يُخرج 0.30
# مثال حقيقي: إضافة 0.1 عشر مرات
total = 0.0
for i in range(10):
total += 0.1
print(f"Accumulated result: {total}") # 0.9999999999999999
print(f"Exactly 1.0: {total == 1.0}") # False
print(f"Formatted: {total:.2f}") # 1.00 — العرض جيد
== لمقارنة الأعداد العشرية مباشرة" و "استخدم وحدة decimal للأموال."
8. تحويل الأنواع الرقمية
توفر بايثون عدة دوال للتحويل بين الأنواع الرقمية:
# int → float
print(float(3)) # يُخرج 3.0
# float → int (يقترب نحو الصفر، وليس التقريب)
print(int(3.14)) # يُخرج 3
print(int(-2.8)) # يُخرج -2 (اقتطاع نحو الصفر)
# سلسلة → رقم (فقط إذا كانت السلسلة تمثل رقماً بالفعل)
print(int("42")) # يُخرج 42
print(float("3.14")) # يُخرج 3.14
# رقم → سلسلة
print(str(3.14)) # يُخرج "3.14"
# int() يمكنها أيضاً تحديد الأساس
print(int("FF", 16)) # يُخرج 255 (سداسي عشري FF إلى عشري)
print(int("1010", 2)) # يُخرج 10 (ثنائي 1010 إلى عشري)
مثال: تحويل الأنواع في الممارسة (الصعوبة ⭐)
# سير عمل كامل: إدخال → تحويل → حساب → إخراج
user_input = "25" # ملاحظة: هذه سلسلة نصية، وليس رقماً
# ماذا يحدث بدون تحويل؟
# print(user_input + 5) ← أزل التعليق لرؤية الخطأ
# الطريقة الصحيحة: حوّل باستخدام int() أولاً
age = int(user_input)
# الآن العمليات الحسابية تعمل بشكل طبيعي
age_next_year = age + 1
print(f"You entered: {user_input} (type: {type(user_input)})")
print(f"After conversion: {age} (type: {type(age)})")
print(f"Next year you'll be {age_next_year} years old")
# عكسياً: حوّل النتيجة إلى سلسلة نصية للإخراج
output_message = "You are " + str(age) + " years old"
print(output_message)
المخرجات:
You entered: 25 (type: <class 'str'>)
After conversion: 25 (type: <class 'int'>)
Next year you'll be 26 years old
You are 25 years old
حالات الاستخدام الشائعة
- حساب أسعار التجارة الإلكترونية: سعر الوحدة × الكمية + الشحن - القسيمة — تعبير واحد لحساب المبلغ النهائي. ادمج شروط الخصم والحد الأدنى مع العوامل المنطقية.
- التحقق من الأذونات:
is_admin or (is_logged_in and has_permission). - حساب الضرر في اللعبة: الهجوم × مضاعف الضربة الحاسمة - الدفاع؛ التحقق من الضربة الحاسمة بمقارنة:
random.random() < crit_rate. - أخذ عينات البيانات: تحقق مما إذا كان الرقم زوجياً (
n % 2 == 0) أو إذا كانت السنة كبيسة (year % 4 == 0 and year % 100 != 0 or year % 400 == 0). - تحويل الوقت: حوّل الثواني إلى "ساعات:دقائق:ثوانٍ" باستخدام القسمة الأرضية وباقي القسمة.
- التحقق من صحة الإدخال: تحقق مما إذا كان إدخال المستخدم في نطاق صالح —
0 < score <= 100(مقارنة متسلسلة)، أو تحقق من الأحرف غير المسموحة —bad_char in username.
❓ أسئلة شائعة
== و is؟ متى يجب استخدام كل منهما؟== يقارن القيم ("هل المحتويات متطابقة؟")، is يقارن الهوية ("هل هما نفس الكائن؟"). مثال: a = [1, 2]; b = [1, 2]; c = a — a == b هي True (نفس القيم)، لكن a is b هي False (كائنات قوائم مختلفة)؛ a is c هي True (c مجرد اسم مستعار). في التطوير اليومي، 99% من الوقت استخدم ==. للتحقق من None، الاصطلاح هو is: if result is None:.
⚠️ س:ما مخاطر التقييم القصير لـ and/or في الممارسة؟ ج:المخاطرة الأكثر شيوعاً: user_input = input() or "default" — إذا أرجع input() سلسلة فارغة (falsy)، or يختصر ويأخذ القيمة الافتراضية. هذا شائع لكنه قد يكون مربكاً للمبتدئين. فخ آخر: وضع استدعاء دالة على الجانب الأيمن من and — إذا كان الجانب الأيسر falsy، لن تُنفّذ الدالة، مما قد يتخطى عمليات مهمة. ممارسة جيدة: إذا كان للتعبير الأيمن آثار جانبية، لا تعتمد على التقييم القصير؛ اكتب جملاً منفصلة.
س:متى يجب استخدام / مقابل //؟ ج:إذا كنت تحتاج نتيجة عشرية دقيقة (مثل 7 ÷ 3 = 2.333...)، استخدم /. إذا كنت تحتاج فقط نتيجة صحيحة (مثل تقسيم 7 تفاحات على 3 أشخاص — 2 لكل منهم، 1 متبقي)، استخدم // مع %. إذا كنت مبتدئاً وغير متأكد، استخدم / افتراضياً — على الأقل لن تفقد الدقة. انتقل إلى // عندما تحتاج تحديداً نتائج صحيحة.
س:ماذا يعني الترابط الأيمن لـ ؟ لماذا صُمم بهذه الطريقة؟ ج:الترابط الأيمن يعني أن 2 3 2 يُفسّر كـ 2 (3 2)، أي أولاً حساب 3² = 9، ثم 2⁹ = 512. من اليسار إلى اليمين سيعطي (2³)² = 8² = 64، نتيجة مختلفة تماماً. هذا يتطابق مع الاتفاقية الرياضية: a^b^c تُفسّر بدءاً من أعلى اليمين. استخدم الأقواس لفرض الترتيب: (2 3) ** 2 يعطي 64.📖 ملخص
- 7 عوامل حسابية:
+-*///%**؛/يُرجع دائماً float،//يُقرّب نحو اللانهاية السالبة - 6 عوامل مقارنة:
==!=><>=<=؛ تدعم بايثون المقارنة المتسلسلة مثل10 < x < 20 - 3 عوامل منطقية:
and(صحيح إذا كان كلاهما صحيحاً)،or(صحيح إذا كان واحد على الأقل صحيحاً)،not(نفي)؛ جميعها تستخدم التقييم القصير - عوامل السلاسل النصية:
+دمج،*تكرار،in/not inعضوية - الأولوية:
**> أحادي > حسابي > مقارنة >not>and>or> إسناد. عند الشك، استخدم الأقواس - لا يمكن مقارنة الأعداد العشرية بدقة باستخدام
==؛ استخدم التحقق من الفرقabs(a - b) < epsilon
📝 تمارين
-
أساسي (الصعوبة ⭐): عرّف
a=10,b=3,c=20. احسب وأخرج:a + b * c,(a + b) * c,a ** b,a // b,c % a,a > b and c > 15. خمّن النتائج أولاً، ثم تحقق. -
متوسط (الصعوبة ⭐⭐): بالنظر إلى
year = 2026، حدد ما إذا كانت سنة كبيسة. قاعدة السنة الكبيسة: قابلة للقسمة على 4 لكن ليس على 100، أو قابلة للقسمة على 400. تلميح:year % 4 == 0يتحقق من قابلية القسمة على 4. -
تحدي (الصعوبة ⭐⭐⭐): اكتب نظام إنذار حرارة بسيط. بالنظر إلى
current_temp = 38,high_alarm = 37,low_alarm = 5. أشعل إنذاراً إذا تجاوزت درجة الحرارة الحالية الحد الأعلى أو انخفضت عن الحد الأدنى. إذا كانت درجة الحرارة قريبة من الحافة (ضمن ±2 درجة)، أصدر "تنبيهاً" بدلاً من "إنذار." استخدم فقط العوامل الحسابية والمقارنة والمنطقية. تلميح:abs(current_temp - high_alarm) <= 2يتحقق من القرب من الحافة العليا.



