المتغيرات والأنواع — كيف يتذكر البرنامج البيانات
تخزين القيم داخل المتغيرات، وقواعد التسمية، والأنواع الأربعة الأساسية — int و float و str و bool — مع أكثر الأخطاء شيوعاً لدى المبتدئين.
- 1المشكلة
- 2الفهم
- 3أمثلة محلولة
- 4التوقع
- 5التطبيق
- 6التحدي
المشكلة التي نقوم بحلها
حتى الآن، لم تكن برامجنا قادرة على تذكر أي شيء. بمجرد طباعة القيمة، تختفي للأبد.
في الأنظمة الواقعية، لا تسير الأمور هكذا. في برامج الفواتير، يُحسب السعر مرة واحدة ويُستخدم في عدة أماكن. وفي التقارير، يجب استخراج الإجمالي أولاً ثم استخدامه لاحقاً. يجب على البرنامج أن يتذكر.
وهناك مشكلة أخرى لاحظناها في المهمة السابقة: عملية الجمع "2" + "3" أعطت النتيجة 23، بينما 2 + 3 أعطت 5 — الرمز نفسه لكن السلوك مختلف تماماً. يعود ذلك لأن بايثون يرى هاتين القيمتين كنوعين مختلفين. ويُطلق على ذلك النوع (Type)، ومن هنا ينشأ الجزء الأكبر من أخطاء المبتدئين.
بنهاية هذه المهمة ستكون قادراً على
- تخزين قيمة داخل متغير وتعديلها لاحقاً
- اختيار أسماء صحيحة يقبلها بايثون ويسهل على البشر قراءتها
- التعرف على الأنواع الأربعة الأساسية:
intوfloatوstrوbool - فحص نوع أي قيمة باستخدام دالة
type() - قراءة وفهم سبب حدوث خطأ
TypeError
المتطلبات المسبقة: الرؤية عبر print، والتوضيح عبر التعليقات.
المتغير هو تسمية لقيمة
city_count = 4اقرأ هذا السطر من اليمين إلى اليسار: ظهرت القيمة 4 أولاً، ثم تم ربط التسمية city_count بها. من الآن فصاعداً، كتابة هذا الاسم تعيدك إلى تلك القيمة.
city_count = 4
print("Cities:", city_count)
print("Double:", city_count * 2)Cities: 4
Double: 8علامة=لا تعني التساوي الرياضي. في بايثون، علامة=هي أمر إسناد (Assignment): "احفظ هذه القيمة تحت هذا الاسم". ولهذا السبب فإن السطرtotal = total + 5— المستحيل رياضياً — هو كود بايثون طبيعي وشائع جداً، ويعني: "خذ القيمة الحالية لـtotal، أضف إليها 5، ثم أعد حفظ الناتج فيtotal".
تغيير قيمة المتغير (Reassignment)
إسناد قيمة جديدة لمتغير يلغي القيمة السابقة تماماً:
stock = 20
print("Before:", stock)
stock = stock - 3
print("After:", stock)Before: 20
After: 17الأنواع الأربعة الأساسية للبيانات
int(أعداد صحيحة):10,-5,0float(أعداد عشرية):19.99,-0.5,3.14str(نصوص):"Python",'Cairo'bool(قيم منطقية):True,False
مثال تطبيقي متكامل
invoice.py:
# 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)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.
Step 4 of 6 — Predict
Check your understanding
What does this print?
a = 10
b = a
a = 99
print(a, b)- A99 10
- B99 99
- C10 99
- D10 10
Which of these is a valid Python variable name?
- Aitem_2
- B2nd_item
- Citem-2
- Dclass
This program raises a TypeError. What exactly is wrong, and what fixes it?
age = "22"
next_year = age + 1
print("Next year:", next_year)- A`age` holds text, not a number — write `age = 22`, or use `int(age) + 1`
- B`next_year` was used without being declared first
- CThe `print` needs a `+` instead of a comma
- DWriting `age + "1"` instead of `age + 1` would give 23
Answering needs an account
Sign in to check your answers
The questions are above, and working them out in your head is the part that matters. Sign in to see the answers, the explanations and the three-level hints.
دورك الآن
اكتب ملفاً باسم shipping.py يحتوي على:
- أربعة متغيرات — واحد من كل نوع (
int،float،str،bool) بأسماء واضحة بنمط snake_case - عملية حسابية واحدة على الأقل تستخدم اثنين منها لإنتاج متغير ثالث
- طباعة نوع المتغيرات الأربعة جميعاً باستخدام دالة
type() - متغير تُسند له قيمة أولية ثم يُعاد تعديله، مع طباعة قيمته في الخطوتين
There is more in this mission
What you read above is the complete mission — nothing was cut out of it. Pro adds:
- ما يحدث فعلياً في الكواليس — كيف ينفذ بايثون هذا الكود
- الحل الكامل للتمرين مشروحاً خطوة بخطوة
- تمارين إضافية أكثر صعوبة وتحدياً
- أسئلة المقابلات الوظيفية حول هذا الموضوع مع نموذج الإجابة
Step 6 of 6
التحدي — the chapter quiz
عشرة أسئلة متدرجة من السهل إلى الصعب. الأسئلة الأخيرة صعبة عن قصد.
Sign in to take the quiz