الفصل 04

المتغيرات والأنواع — كيف يتذكر البرنامج البيانات

تخزين القيم داخل المتغيرات، وقواعد التسمية، والأنواع الأربعة الأساسية — int و float و str و bool — مع أكثر الأخطاء شيوعاً لدى المبتدئين.

30 دقيقةPython 3.12
  1. 1المشكلة
  2. 2الفهم
  3. 3أمثلة محلولة
  4. 4التوقع
  5. 5التطبيق
  6. 6التحدي

المشكلة التي نقوم بحلها

حتى الآن، لم تكن برامجنا قادرة على تذكر أي شيء. بمجرد طباعة القيمة، تختفي للأبد.

في الأنظمة الواقعية، لا تسير الأمور هكذا. في برامج الفواتير، يُحسب السعر مرة واحدة ويُستخدم في عدة أماكن. وفي التقارير، يجب استخراج الإجمالي أولاً ثم استخدامه لاحقاً. يجب على البرنامج أن يتذكر.

وهناك مشكلة أخرى لاحظناها في المهمة السابقة: عملية الجمع "2" + "3" أعطت النتيجة 23، بينما 2 + 3 أعطت 5 — الرمز نفسه لكن السلوك مختلف تماماً. يعود ذلك لأن بايثون يرى هاتين القيمتين كنوعين مختلفين. ويُطلق على ذلك النوع (Type)، ومن هنا ينشأ الجزء الأكبر من أخطاء المبتدئين.

بنهاية هذه المهمة ستكون قادراً على

  • تخزين قيمة داخل متغير وتعديلها لاحقاً
  • اختيار أسماء صحيحة يقبلها بايثون ويسهل على البشر قراءتها
  • التعرف على الأنواع الأربعة الأساسية: int و float و str و bool
  • فحص نوع أي قيمة باستخدام دالة type()
  • قراءة وفهم سبب حدوث خطأ TypeError

المتطلبات المسبقة: الرؤية عبر print، والتوضيح عبر التعليقات.


المتغير هو تسمية لقيمة

python
city_count = 4

اقرأ هذا السطر من اليمين إلى اليسار: ظهرت القيمة 4 أولاً، ثم تم ربط التسمية city_count بها. من الآن فصاعداً، كتابة هذا الاسم تعيدك إلى تلك القيمة.

python
city_count = 4
print("Cities:", city_count)
print("Double:", city_count * 2)
text
Cities: 4
Double: 8
علامة = لا تعني التساوي الرياضي. في بايثون، علامة = هي أمر إسناد (Assignment): "احفظ هذه القيمة تحت هذا الاسم". ولهذا السبب فإن السطر total = total + 5 — المستحيل رياضياً — هو كود بايثون طبيعي وشائع جداً، ويعني: "خذ القيمة الحالية لـ total، أضف إليها 5، ثم أعد حفظ الناتج في total".

تغيير قيمة المتغير (Reassignment)

إسناد قيمة جديدة لمتغير يلغي القيمة السابقة تماماً:

python
stock = 20
print("Before:", stock)

stock = stock - 3
print("After:", stock)
text
Before: 20
After: 17

الأنواع الأربعة الأساسية للبيانات

  1. int (أعداد صحيحة): 10, -5, 0
  2. float (أعداد عشرية): 19.99, -0.5, 3.14
  3. str (نصوص): "Python", 'Cairo'
  4. bool (قيم منطقية): True, False

مثال تطبيقي متكامل

invoice.py:

python
# Invoice for a single order
customer_name = "Rafi"
unit_price = 249.50
quantity = 3
is_member = True

subtotal = unit_price * quantity
discount = 50.0
total = subtotal - discount

print("Customer  :", customer_name)
print("Quantity  :", quantity)
print("Subtotal  :", subtotal)
print("Discount  :", discount)
print("Total     :", total)
print("Member    :", is_member)
text
Customer  : Rafi
Quantity  : 3
Subtotal  : 748.5
Discount  : 50.0
Total     : 698.5
Member    : True

الفائدة الحقيقية تكمن في أنه عند تغيير السعر، تعدل سطر unit_price فقط، وستتحدث جميع الحسابات اللاحقة تلقائياً وبدقة.


الأخطاء الشائعة وحلولها

خطأ NameError: name 'total' is not defined الاسم المستخدم لم تُسند له قيمة بعد، أو حدث خطأ إملائي في كتابته. لغة بايثون حساسة لحالة الأحرف (case-sensitive)، فالمتغير Total يختلف عن total.

خطأ TypeError: can only concatenate str (not "int") to str حاولت ربط رقم بنص مباشرة باستخدام +. إما أن تحول الرقم إلى نص عبر str() أو تستخدم الفاصلة داخل print("Age:", age).

خطأ NameError: name 'true' is not defined القيم المنطقية تبدأ دائماً بحرف كبير في بايثون: True و False.