نظرة عامة على العوامل

البرمجة هي في الأساس "إجراء عمليات على البيانات." في الدرس 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

عاملان جديران بالملاحظة

غرابة / (القسمة):

PYTHON
print(4 / 2)    # يُخرج 2.0، وليس 2

كثير من الناس يتوقفون عند هذا: 4 مقسومة على 2 هي بوضوح 2، فلماذا تُخرج بايثون 2.0؟ لأن عامل / في بايثون دائماً يُرجع float، حتى عندما تكون القسمة متساوية. هذا يحافظ على توقع النتائج — ترى / وتعرف أن النتيجة ستكون float.

مصيدة // (القسمة الأرضية):

PYTHON
print(7 // 3)     # يُخرج 2 (7 ÷ 3 = 2.333، مقربة للأسفل = 2)
print(-7 // 3)    # يُخرج -3 ← قد لا يكون ما تتوقعه

-7 // 3 يعطي -3، وليس -2. عامل // في بايثون هو قسمة أرضية (تُقرّب نحو اللانهاية السالبة)، وليس "اقتطاعاً نحو الصفر." على خط الأعداد، -2.333 مقربة للأسفل هي -3. إذا كنت تريد الاقتطاع نحو الصفر، استخدم int(-7 / 3)، الذي يعطي -2.

💡 نصيحة: فكر في // كـ "قسمة أرضية" بدلاً من "قسمة أعداد صحيحة" — "قسمة أعداد صحيحة" توحي بالاقتطاع، وهو لا ينطبق على الأعداد السالبة.

مثال: تحويل البوصات والسنتيمترات (الصعوبة ⭐)

PYTHON
# بوصات إلى سنتيمترات: 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")
▶ جرّب الكود

المخرجات:

TEXT
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
PYTHON
age = 18
print(age == 18)     # True (بالضبط 18)
print(age != 18)     # False (ليس "لا يساوي")
print(age > 21)      # False (ليس كبيراً بما يكفي)
print(age >= 18)     # True (بالضبط سن الرشد، يحقق الشرط)

المقارنات المتسلسلة

تدعم بايثون بناء جملة موجز نادر في اللغات الأخرى:

PYTHON
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 ليس عاملاً مقارناً، لكن غالباً ما يُقارن بـ ==:

PYTHON
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)

في التطوير اليومي، 99% من الوقت تستخدم ==. الاصطلاح هو استخدام is فقط عند التحقق من None: if result is None:.

مثال: تصنيف مجموعة سباق (الصعوبة ⭐)

PYTHON
# قواعد تجميع سباق 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}")
▶ جرّب الكود

المخرجات:

TEXT
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 نفي
PYTHON
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

التقييم القصير

للعوامل المنطقية في بايثون ميزة مهمة: التقييم القصير.

PYTHON
# بالنسبة لـ 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 لم يُنفّذ أبداً

هذا مفيد جداً في الممارسة:

PYTHON
# احصل على اسم المستخدم فقط إذا كان المستخدم موجوداً — يتجنب خطأ 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، أرجع مباشرة دون تقييم الجانب الأيمن الذي قد يسبب خطأ.

مثال: التحقق مما إذا كان الرقم "مميزاً" (الصعوبة ⭐⭐)

ادمج عوامل المقارنة والمنطق للتحقق مما إذا كان الرقم يحقق "شروطاً خاصة" معينة.

PYTHON
# تحقق مما إذا كان الرقم "مميزاً"
# التعريف: بين 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}")
▶ جرّب الكود

المخرجات:

TEXT
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. عوامل الإسناد

إلى جانب = الأساسي، توفر بايثون عوامل إسناد مركبة:

PYTHON
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. استخدم //= إذا كنت تحتاج نتيجة صحيحة.

PYTHON
# زيادة نموذجية في حلقة
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
PYTHON
# دمج السلاسل النصية
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" ليس جيداً.

مثال: إنشاء بطاقة عمل باستخدام عمليات السلاسل النصية (الصعوبة ⭐⭐)

PYTHON
# أنشئ بطاقة عمل بسيطة باستخدام عمليات السلاسل النصية

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}")
▶ جرّب الكود

المخرجات:

TEXT
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 منطقي
منخفضة إسناد =, +=، إلخ. إسناد
PYTHON
# الضرب قبل الجمع
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)

مثال: حاسبة الرهن العقاري (الصعوبة ⭐⭐)

PYTHON
# احسب الدفعة الشهرية للرهن العقاري (دفعة متساوية)
# المعادلة: شهرياً = القرض × المعدل_الشهري × (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")
▶ جرّب الكود

المخرجات:

TEXT
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. مشكلات دقة الأعداد العشرية

كل مبرمج يواجه هذا:

PYTHON
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 بدقة.

متى يجب الحذر

PYTHON
# الطريقة الصحيحة لمقارنة الأعداد العشرية
result = 0.1 + 0.2
epsilon = 1e-10     # رقم صغير جداً، حوالي 0.0000000001
print(abs(result - 0.3) < epsilon)   # يُخرج True
PYTHON
print(f"{0.1 + 0.2:.2f}")   # يُخرج 0.30
PYTHON
# مثال حقيقي: إضافة 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. تحويل الأنواع الرقمية

توفر بايثون عدة دوال للتحويل بين الأنواع الرقمية:

PYTHON
# 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 إلى عشري)

مثال: تحويل الأنواع في الممارسة (الصعوبة ⭐)

PYTHON
# سير عمل كامل: إدخال → تحويل → حساب → إخراج
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)
▶ جرّب الكود

المخرجات:

TEXT
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؟ متى يجب استخدام كل منهما؟
ج == يقارن القيم ("هل المحتويات متطابقة؟")، is يقارن الهوية ("هل هما نفس الكائن؟"). مثال: a = [1, 2]; b = [1, 2]; c = aa == 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

📝 تمارين

  1. أساسي (الصعوبة ⭐): عرّف a=10, b=3, c=20. احسب وأخرج: a + b * c, (a + b) * c, a ** b, a // b, c % a, a > b and c > 15. خمّن النتائج أولاً، ثم تحقق.

  2. متوسط (الصعوبة ⭐⭐): بالنظر إلى year = 2026، حدد ما إذا كانت سنة كبيسة. قاعدة السنة الكبيسة: قابلة للقسمة على 4 لكن ليس على 100، أو قابلة للقسمة على 400. تلميح: year % 4 == 0 يتحقق من قابلية القسمة على 4.

  3. تحدي (الصعوبة ⭐⭐⭐): اكتب نظام إنذار حرارة بسيط. بالنظر إلى current_temp = 38, high_alarm = 37, low_alarm = 5. أشعل إنذاراً إذا تجاوزت درجة الحرارة الحالية الحد الأعلى أو انخفضت عن الحد الأدنى. إذا كانت درجة الحرارة قريبة من الحافة (ضمن ±2 درجة)، أصدر "تنبيهاً" بدلاً من "إنذار." استخدم فقط العوامل الحسابية والمقارنة والمنطقية. تلميح: abs(current_temp - high_alarm) <= 2 يتحقق من القرب من الحافة العليا.

100%