1.1 · المتغيرات والأنواع والمعاملات

المستوى 1 · أساسيات اللغة

1.1المتغيرات والأنواع والمعاملات

الهدف: تناول الأعداد والسلاسل والمنطقيات وتحويلات الأنواع، واستعمال المعاملات الحسابية ومعاملات المقارنة دون الخلط بينها.
الوقت المقدّر: 14 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • المتغير = لافتة على كائن : age = 30 — يستنتج Python النوع (int وfloat وstr وbool)، و= تنسخ اللافتة وليس الكائن دائما.
  • تنميط صارم : حوّل صراحة : "3" + 4 مرفوض — مرر عبر int() وfloat() وstr()، وحوّل نص input() قبل أي حساب.
  • = تُسند و== تقارن وis تشخّص : / يعطي عشريا، و// حاصل القسمة الصحيح، و% الباقي، و** الأس.

حالة مستمرة — نبيل، محلل بيانات مبتدئ في الجزائر

نبيل، محلل بيانات مبتدئ في الجزائر، يُحضّر تنظيف معطيات استقصاء : يخزّن اسم المجيب وعمره وطوله في متغيرات واضحة، ثم يحسب سنة الميلاد انطلاقا من عمر مدخل. ولاستعجاله، كتب print("J'ai " + age) وجمع النص الذي تردّه input() مع عدد : TypeError ثم مجموع خاطئ. فصحح بسلسلة منسقة (f-string) وبـ int() : فصار العمر عددا حقيقيا، وظهر التقرير صحيحا. وفي الإضافة، اكتشف أن a = b = [] تتشارك قائمة واحدة — فصار لزاما عليه النسخ من الآن بـ list().

تعود هذه الحالة نفسها في الدرس والمخطط والنص الجاهز وتحدي 48 ساعة — وتستمر في 1.2 و1.3 و1.4 و1.5.

1. المتغيرات-اللافتات والأنواع

المتغير (variable) لافتة توضع على قيمة : age = 30 تلصق لافتة « age » على الكائن 30. ويعتمد Python التنميط الديناميكي (typage dynamique) (دون إعلان مسبق) لكن الصارم : "3" + 4 يثير خطأ بدلا من التحويل بصمت. أربعة أنواع أساسية : int (صحيح)، وfloat (عشري)، وstr (نص، غير قابل للتعديل)، وbool (True/False، يقود الشروط). تكشف type() النوع ؛ وسمِّ بصيغة snake_case الصريحة (age_repondant بدلا من x).

يخزّن نبيل nom = "ياسمين" وage = 30 وtaille = 1.70 : لافتات تقول ما تحمله، تُقرأ دون جهد حين يطلب الرئيس التقرير.

2. التحويلات وinput() والمعاملات

نغيّر النوع صراحة : int("30") وfloat("3.5") وstr(30). وحاسم : تردّ input() النص دائما — فحوّل بـ int() أو float() قبل الحساب. المعاملات : / يقسم إلى عشري (7/2 = 3.5)، و// حاصل صحيح (3)، و% باقٍ (7%2 = 1)، و** أس. و= تُسند بينما == تقارن (is تختبر الهوية) : فالخلط بينهما في اختبار هو الخطأ رقم 1.

يستبدل نبيل جمعه الخاطئ بـ f"J'ai {age} ans" ويحوّل المدخل بـ int(input(...)) : فتصير سنة الميلاد صحيحة ويختفي خطأ النوع.

خطأ شائع في الفهم: « = تنسخ القيمة » أو « Python يحوّل كل شيء وحده ». لا. فـ = تلصق لافتة : a = b = [] ثم a.append(1) يعدّل b أيضا — لافتتان وكائن واحد (انسخ بـ list() أو .copy()). ولا يمزج Python النص والعدد وحده : "3" + 4 يثير TypeError — فعليك التحويل صراحة بـ int() أو float() أو str().
المتغيرات والأنواع سمِّ وحدد النوع واحسب اللافتة (=) اسميوضع على كائنالأنواع (الصارمة) int وfloatوstr وbool + تحويلاتالمعاملات (= مقابل ==) تُسندوتقارن وتشخّص (is)
سمِّ وحدد النوع واحسب
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) سمِّ : يلصق نبيل لافتات صريحة بصيغة snake_case على كل قيمة — ويستنتج Python النوع، وتتحقق type(). 2) حوّل : يمر نص input() عبر int() قبل أي حساب، وتجمع السلاسل المنسقة (f-strings) دون خطأ نوع. 3) احسب : / للعشري، و// للصحيح، و% للباقي، و** للأس ؛ و= تُسند و== تقارن وis تشخّص. الدرس : لافتة + تحويل صريح + معامل صحيح، فلا تكذب الأسس بعدها.

🔎 مثال ملموس — 🔎 مثال ملموس — فخ اللافتتين

لِفهم الإسناد، كما فعل نبيل مع قوائمه.

a = []
b = a  # نفس الكائن !
a.append(1)
print(b)  # [1] : قائمة واحدة
b = a.copy()  # نسخة مستقلة حقيقية
print("3" + str(4))  # "34" : تحويل صريح
print(7 // 2, 7 % 2, 2 ** 10)  # 3 1 1024

القراءة : = تنسخ اللافتة وليس الكائن — و.copy() تنشئ قائمة مستقلة ؛ وstr() تجعل الدمج ممكنا.

الدرس : تختبر is الهوية، و== المساواة ؛ ولكل من // و% و** دوره.

مفردات القسم

المتغير
اسم يشير إلى قيمة في الذاكرة (لافتة على كائن). الإسناد بـ = : ma_var = valeur.

مثال بسيط: الاسم والعمر اللذان خزّنهما نبيل لاستقصائه.

ما ليس كذلك: صندوق يحوي نسخة عند كل إسناد.

رد فعل: فكّر لافتة، وسمِّ بصيغة snake_case الصريحة.

int / float
أعداد صحيحة (int : 30) وعشرية (float : 3.14). تعطي القسمة / عشريا دائما ؛ وتعطي // حاصل القسمة الصحيح.

مثال بسيط: العمر (int) والطول (float) لمجيبي نبيل.

ما ليس كذلك: انتظار 3 من 10 / 3 (فهي 3.333 عشري).

رد فعل: / للحقيقي، و// للحاصل، و% للباقي.

str (سلسلة)
نص بين علامتي تنصيص مفردتين أو مزدوجتين : "مرحبا". غير قابل للتعديل ؛ ويُجمع بالسلاسل المنسقة (f-strings).

مثال بسيط: اسم المجيب الذي عرضه نبيل بسلسلة منسقة.

ما ليس كذلك: جمع "3" + 4 دون تحويل.

رد فعل: نص + عدد = حوّل أولا (أو سلسلة منسقة).

bool
منطقي : True أو False. نتيجة المقارنات، وأساس شروط الفصل التالي.

مثال بسيط: مajeur = age >= 18 التي حسبها نبيل (بالغ = العمر >= 18).

ما ليس كذلك: الخلط بين = (إسناد) و== (مقارنة).

رد فعل: = تُسند و== تقارن وis تشخّص.

التحويل (casting)
تغيير النوع صراحة : int("30") تعطي 30 ؛ وstr(30) تعطي "30". لا غنى عنه لأن input() تردّ النص دائما.

مثال بسيط: العمر المدخل الذي حوّله نبيل بـ int().

ما ليس كذلك: الحساب مباشرة على نص input().

رد فعل: input() = نص : int() أو float() قبل الحساب.

في التطبيق — تطبيقيا — تناول المتغيرات والأنواع والتحويلات

  1. أنشئ متغيرات من كل نوع : nom = "Ada" وage = 30 وtaille = 1.70 وmajeur = True. اعرض كلا بـ print() ونوعه بـ type(variable).
  2. جرّب المعاملات : 7 // 2 (قسمة صحيحة)، و7 % 2 (باقٍ/باقي القسمة)، و2 ** 10 (أس). توقع النتيجة قبل التنفيذ.
  3. أثِر الخطأ الكلاسيكي : print("J'ai " + age) ← TypeError. صحح بسلسلة منسقة : print(f"J'ai {age} ans").
  4. اطلب العمر بـ input()، وحوّله إلى عدد (int(...)) واحسب سنة الميلاد : لاحظ لماذا التحويل لا غنى عنه.
صرت تنشئ المتغيرات، وتميّز نوعها، وتحوّل بنظافة — وخصوصا النص الذي تردّه input() إلى عدد.

نص جاهز للنطق — برّر التحويل الصريح (30 ث)

« تردّ input() النص دائما، لذلك أحوّل بـ int() قبل الحساب : وإلا جمعنا نصا وعددا فيتعطل — أو worse يعطي نتيجة خاطئة. فالتحويل الصريح يجعل القصد مرئيا والحساب موثوقا. »

يُقال في مراجعة الشيفرة ؛ واعرض TypeError قبل/بعد.

نموذج نسخ ولصق — متغيرات وسلسلة منسقة وتحويل input()

nom = "نبيل"
age = 30
taille = 1.70
majeur = age >= 18
print(f"{nom} عمره {age} سنة، بالغ : {majeur}")
print(type(taille))  # 
age_saisi = int(input("العمر ؟ "))
annee_naissance = 2026 - age_saisi
print(f"سنة الميلاد : {annee_naissance}")
print(7 // 2, 7 % 2, 2 ** 10)

استقصاء في الجزائر

كما فعل نبيل : متغيرات مسماة لكل مجيب، وسلسلة منسقة للتقرير — فيقرأ الرئيس جدولا صافيا دون TypeError.

مدخل يُحوَّل

كل input() تمر عبر int() أو float() قبل الحساب : فسنة الميلاد صحيحة والمجموع صحيح.

معاملات مستهدفة

// للحصص الصحيحة، و% للبواقي، و** للإسقاطات — لكل واحد معامله، دون ترقيع.

شك في اسم مستعار

type(obj) أو اختبار is يحسم : فاللافتة تُتحقق ولا تُخمَّن — وانسخ بـ list() عند الحاجة.

✓ ممارسات جيدة

  • فكّر لافتة لا صندوقا — وسمِّ بصيغة snake_case الصريحة.
  • حوّل صراحة (int/float/str)، وخصوصا نص input().
  • ميّز = (تُسند) و== (تقارن) وis (تشخّص).

✗ أخطاء شائعة

  • كتابة a = b = [] ثم المفاجأة بأن الاثنين يتحركان معا.
  • جمع "3" + 4 دون تحويل (TypeError).
  • استعمال = في if بدلا من ==.

النقاط الأساسية

  • المتغير اسم يوضع على قيمة (nom = valeur) ؛ ويستنتج Python النوع (ديناميكي) لكنه لا يمزج الأنواع وحده (صارم).
  • أربعة أنواع أساسية : int وfloat وstr وbool — تكشف type() وتحوّل int()/str().
  • تردّ input() النص دائما : حوّل بـ int() أو float() للحساب.
  • معاملات مفيدة : // (قسمة صحيحة) و% (باقي القسمة) و** (أس) ؛ و= تُسند و== تقارن وis تشخّص.

تحدي 48 ساعة — طبّق غدا

استعد أحد سكربتاتك (النموذج أعلاه) : حوّل كل input() إلى int()/float()، واستبدل كل جمع + بين نص وعدد بسلسلة منسقة، وأعد تسمية متغير غامض بصيغة snake_case. نفّذ وتحقق من العرض. تكفي 20 دقيقة.

قائمة الخروج من القسم
  • أستطيع شرح اللافتة والتنميط الصارم والتحويل الصريح.
  • أحوّل input() إلى عدد قبل أي حساب.
  • أختار // و% و** دون تردد، وأميّز = من ==.
تقييم ذاتي 1-5 : هل أحوّل صراحة بدلا من تحمّل TypeError ؟هل متغيراتي مسماة بوضوح بصيغة snake_case ؟

أسئلة شائعة

لماذا تعطي 10 / 3 النتيجة 3.333 وليس 3 ؟

في Python 3 يجري المعامل / قسمة « حقيقية » دائما ويردّ عشريا. وللحصول على حاصل القسمة الصحيح (3) استعمل القسمة الصحيحة // ؛ وللباقي باقي القسمة %. وهو خيار مقصود في اللغة : القسمة المضبوطة افتراضيا، والصحيح بطلب صريح.

ما الفرق بين = و== ؟

فـ = واحدة تُسند قيمة إلى متغير (x = 5). و== المزدوجة تقارن قيمتين وتردّ True أو False (x == 5). والخلط بينهما خطأ شائع جدا في البداية — وis تختبر الهوية (الكائن نفسه) وليس المساواة فقط.

تحقّق من فهمك

ماذا تردّ الدالة input() دائما ؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 1أسئلة جديدة وأصعب للتحقق من مكتسباتك