(Variables and Primitive Data Types) الفصل الرابع: المتغيرات و أنواع البيانات الأساسية
مقدمة الفصل
في الفصل السابق، ألقينا نظرة أولى على المتغيرات. الآن، سنغوص أعمق في هذا المفهوم الجوهري الذي يمثل حجر الأساس في البرمجة. سنتعلم كيف ننشئ متغيرات لتخزين المعلومات، ونستكشف أنواع البيانات الأساسية التي تستخدمها بايثون: النصوص، الأعداد، والقيم المنطقية. هيا بنا نبدأ في بناء برامج أكثر قوة وفائدة!
تخيل أنك تبني برنامجًا للترحيب بالمستخدمين. ستحتاج إلى طريقة لتذكر اسم المستخدم الذي أدخله، أليس كذلك؟ أو إذا كنت تبني آلة حاسبة، فستحتاج إلى تخزين الأرقام التي يريد المستخدم حسابها. في هذا الفصل، سنتعلم الأداة الأساسية التي تسمح لنا بفعل ذلك: المتغيرات. إنها حجر الأساس لتخزين أي معلومة والتعامل معها في برامجك.
1. لماذا نحتاج إلى المتغيرات؟
حسنا الأن لماذا نحتاج لهذه المتغيرات؟ هناك عدة أسباب جوهرية:
تخيل اننا نعيش في عالم بدون أسماء، ستكون من الصعب في كثير من الحالات التعامل مع أشخاص مختلفين. لن تستطيع مثلا مناداة شخص ما و هو لن يعرف إذا ما كنت تناديه وسط الكثير من الأشخاص الآخرين.
نفس الدور تقوم به المتغيرات: تستطيع إستعمالها للتمييز بين الكثير من البيانات التي يستعملها البرنامج. بالإضافة لذلك: المتغيرات تجعل الكود أكثر قابلية للقراءة والصيانة.
البرامج تحتاج إلى تذكر المعلومات أثناء تشغيلها. قد تكون هذه المعلومة اسم مستخدم، أو نتيجة عملية حسابية، أو درجة حرارة. بدون طريقة لتخزين هذه المعلومات بشكل مؤقت، سيكون برنامجنا عديم الفائدة.
لهذا السبب، نستخدم المتغيرات.
المتغير (Variable): هو حاوية أو “صندوق” نُعطيه اسمًا مميزًا لنخزن فيه معلومة واحدة. يمكننا بعد ذلك استخدام هذا الاسم للوصول إلى المعلومة أو تغييرها في أي وقت.
لإنشاء متغير، نستخدم علامة يساوي (=
) لوضع قيمة داخل هذا “الصندوق”.
# لنخزن اسم المستخدم في متغير
# "أنشأنا صندوقًا ووضعنا بداخله النص "سارة
user_name = "سارة"
# لنخزن عمرها في متغير آخر
# أنشأنا صندوقًا ووضعنا بداخله الرقم 30
user_age = 30
# الآن، بدلاً من كتابة "سارة" في كل مرة، نستخدم اسم المتغير
print(user_name) # سيطبع: سارة
print(user_age) # سيطبع: 30
هل تعلم؟ 💡
عندما نقول “صندوق”، فإننا نبسط المفهوم. تقنيًا، المتغير هو اسم يشير إلى مكان محدد في ذاكرة الحاسوب (Memory). عندما تنشئ متغيرًا، فأنت تطلب من بايثون أن تحجز مساحة صغيرة في الذاكرة وتسميها بالاسم الذي اخترته.
كيف تعمل المتغيرات وراء الكواليس؟
عندما تكتب هذا السطر:
x = 10
تقوم بايثون بما يلي:
- حجز موقع: يتم حجز مكان في الذاكرة لتخزين هذه القيمة.
- إنشاء القيمة: يتم إنشاء القيمة
10
في الذاكرة. - ربط المتغير بها: يتم ربط المتغير
x
بهذا الموقع في الذاكرة.
💡 يعني ذلك أن المتغير ليس هو القيمة نفسها، بل هو مجرد إشارة (Reference) إليها.
مثال لتوضيح الفكرة:
a = 100
b = a
- هنا،
a
يشير إلى القيمة100
. - المتغير a يشير إلى نفس القيمة التي يشير إليها المتغير b. لأن المتغير كما قلنا سابقا يمثل عنوان في ذاكرة الحاسوب.
هنا لا يتم نسخ القيمة، بل يشار إليها من قبل متغيرين مختلفين.
لو كتبنا مثلا:
b = 100
فهذا شيء مختلف.. لأننا قمنا بإنشاء قيمة أخرى و قمنا بتخزينها في مكان أخر في الذاكرة مختلف عن العنوان الأول.
هنا،
a
هو ملصق يشير إلى صندوق يحتوي على القيمة100
. عندما نكتبb = a
، فإننا لا ننسخ الصندوق، بل نضع ملصقًا ثانيًا (b
) على نفس الصندوق. الآن كلا الاسمينa
وb
يشيران إلى نفس المكان في الذاكرة الذي يحتوي على100
.
ولكن، إذا قمنا بعدها بكتابة:
a = 200
فإننا ننزع الملصق
a
من الصندوق القديم ونلصقه على صندوق جديد يحتوي على200
. في هذه الأثناء، يبقى الملصقb
على الصندوق الأصلي الذي يحتوي على100
.
print(a)
# سيطبع 200print(b)
# سيطبع 100
قواعد تسمية المتغيرات
للحفاظ على الكود منظمًا وخاليًا من الأخطاء، وضعت بايثون قواعد بسيطة لتسمية هذه الصناديق:
-
يجب أن يبدأ اسم المتغير بحرف (a-z, A-Z) أو بشرطة سفلية (
_
). -
لا يمكن أن يبدأ اسم المتغير برقم.
-
يمكن أن يحتوي الاسم على حروف وأرقام وشرطات سفلية فقط (a-z, A-Z, 0-9,
_
). -
أسماء المتغيرات تختلف حسب حالة الأحرف (
age
,Age
, وAGE
هي ثلاثة متغيرات مختلفة). في البرمجة هذا المفهوم يسمى الحساسية لحالة الأحرف أو case sensitivity. بايثون حساسة لحالة الأحرف لكن ليست كل لغات البرمجة كذلك! -
لا يمكن استخدام الكلمات المحجوزة في بايثون (الكلمات التي لها معنى خاص مثل
print
مثلا).
اسم صالح | اسم غير صالح | السبب |
---|---|---|
my_age |
my-age |
يحتوي على شرطة (-) |
age2 |
2age |
يبدأ برقم |
user_name |
user name |
يحتوي على مسافة |
💡 نصيحة احترافية: أسلوب snake_case
بجانب القواعد الإلزامية، هناك “اصطلاحات” أو أساليب متفق عليها لجعل الكود أكثر قراءة. في بايثون، الأسلوب الأكثر شيوعًا لأسماء المتغيرات المكونة من عدة كلمات هو snake_case، حيث تُكتب كل الكلمات بأحرف صغيرة وتُفصل بشرطة سفلية (_).
مثال: user_first_name، total_price بدلاً من userfirstname أو UserFirstName.
2. أنواع البيانات: لماذا هي مهمة؟
يفهم الحاسوب أنواعًا مختلفة من المعلومات بشكل مختلف. فلا يمكنه إجراء عملية جمع حسابي على اسم شخص، ولا يمكنه تحويل اسمك إلى حروف كبيرة إذا كان رقمًا. لذلك، يجب أن نعرف أنواع البيانات الأساسية.
أ. النصوص (Strings) - نظرة شاملة
النص (str
) هو ببساطة سلسلة من الأحرف. أي شيء تضعه بين علامتي تنصيص مفردة (' '
) أو مزدوجة (" "
) تعتبره بايثون نصاً.
💡 لماذا نوعان من علامات التنصيص؟
لتسهيل الأمور عندما يحتوي النص نفسه على علامة تنصيص.
message = "قال الرجل: 'أهلاً بالعالم'"
(استخدام المزدوجة يسمح بوجود المفردة بالداخل)
another_message = 'هذا كتاب "بايثون للمبتدئين"'
(استخدام المفردة يسمح بوجود المزدوجة بالداخل)
النصوص ليست مجرد كتلة واحدة؛ يمكننا التفاعل معها، تفكيكها، ودمجها. لنتعمق في ذلك.
1. دمج النصوص (Concatenation)
المشكلة: لديك اسم أول في متغير واسم عائلة في متغير آخر. كيف تدمجهما لإنشاء اسم كامل؟
الحل: نستخدم علامة الجمع (+
) لـ “لصق” النصوص ببعضها. هذه العملية تسمى الدمج (Concatenation).
first_name = "أحمد"
last_name = "علي"
space = " "
# دمج المتغيرات لإنشاء الاسم الكامل
full_name = first_name + space + last_name
print(full_name) # سيطبع: أحمد علي
2. الوصول إلى حرف معين (Indexing)
المشكلة: ماذا لو احتجت فقط إلى الحرف الأول من اسم مستخدم لإنشاء رمز له؟
الحل: يمكنك الوصول إلى أي حرف في النص باستخدام الفهرس (Index). تخيل النص كقطار من عربات، كل عربة لها رقم. في بايثون، يبدأ الترقيم دائمًا من 0.
لنأخذ كلمة "بايثون"
كمثال:
الحرف | ب | ا | ي | ث | و | ن |
---|---|---|---|---|---|---|
الفهرس | 0 | 1 | 2 | 3 | 4 | 5 |
word = "بايثون"
print(word[0]) # سيطبع 'ب' (الحرف الأول)
print(word[2]) # سيطبع 'ي' (الحرف الثالث)
💡 حيلة مفيدة: الفهرسة السلبية
للوصول إلى الحرف الأخير بسهولة دون معرفة طول النص، يمكنك استخدام الفهرس
-1
.
print(word[-1])
# سيطبع ‘ن’ (الحرف الأخير)
print(word[-2])
# سيطبع ‘و’ (الحرف قبل الأخير)
3. اقتطاع جزء من النص (Slicing)
المشكلة: احتجنا إلى الحرف الأول، ولكن ماذا لو أردنا اقتطاع جزء من النص، مثل أول ثلاثة أحرف لإنشاء اسم مستخدم؟
الحل: نستخدم عملية الاقتطاع (Slicing)، وهي تشبه الفهرسة ولكنها تأخذ نقطة بداية ونقطة نهاية. الصيغة هي [start:end]
.
نقطة مهمة جدًا: الاقتطاع يشمل الحرف عند start
ولكنه لا يشمل الحرف عند end
.
message = "Hello World"
# اقتطاع أول 5 أحرف (من الفهرس 0 إلى 4)
first_word = message[0:5]
print(first_word) # سيطبع: "Hello"
# اقتطاع من الفهرس 6 إلى النهاية
second_word = message[6:11]
print(second_word) # سيطبع: "World"
اختصارات للاقتطاع:
[:5]
تعني “من البداية إلى الفهرس 4”.[6:]
تعني “من الفهرس 6 إلى نهاية النص”.
print(message[:5])
# نفس نتيجة message[0:5]
print(message[6:])
# نفس نتيجة message[6:11]
4. دوال النصوص المفيدة (String Methods)
النصوص في بايثون تأتي مع “إجراءات” مدمجة تسمى الدوال (Methods) لتنفيذ مهام شائعة. نستخدمها بوضع نقطة (.
) بعد اسم المتغير.
my_text = " مرحباً بك في عالم البرمجة! "
# إزالة المسافات الزائدة من البداية والنهاية
print(my_text.strip())
# -> "مرحباً بك في عالم البرمجة!"
# تحويل كل الحروف إلى كبيرة
print(my_text.upper())
# -> " مرحباً بك في عالم البرمجة! "
# تحويل كل الحروف إلى صغيرة
print(my_text.lower())
# -> " مرحباً بك في عالم البرمجة! "
# جعل الحرف الأول من كل كلمة كبيرًا
print(my_text.strip().title())
# -> "مرحباً بك في عالم البرمجة!"
5. معرفة طول النص (len()
Function)
المشكلة: كيف تعرف عدد الأحرف في نص ما؟
الحل: نستخدم دالة بايثون العامة len()
. لاحظ أنها دالة عامة وليست method، لذلك نضع المتغير بداخلها.
greeting = "أهلاً وسهلاً"
char_count = len(greeting)
print(f"النص '{greeting}' يحتوي على {char_count} حرفًا (بما في ذلك المسافة).")
# سيطبع: النص 'أهلاً وسهلاً' يحتوي على 12 حرفًا (بما في ذلك المسافة).
** الأحرف الخاصة وسلاسل الهروب (Escape Sequences)**
أحيانًا، نحتاج إلى إضافة رموز خاصة داخل نصوصنا لا يمكن كتابتها مباشرة. على سبيل المثال: كيف يمكننا كتابة نص على عدة أسطر باستخدام متغير واحد؟ أو كيف نضيف مسافة جدولة (Tab) لترتيب النص؟ أو ماذا لو أردنا طباعة علامة تنصيص مزدوجة داخل نص مُعرَّف بعلامات تنصيص مزدوجة؟
نستخدم سلاسل الهروب (Escape Sequences). وهي تبدأ دائمًا بالشرطة المائلة العكسية (\
)، التي تخبر بايثون أن الحرف الذي يليها له معنى خاص وليس حرفًا عاديًا.
أشهر سلاسل الهروب:
السلسلة | الوصف |
---|---|
\n |
سطر جديد (Newline): ينقل باقي النص إلى السطر التالي. |
\t |
مسافة جدولة (Tab): يضيف مسافة بادئة كبيرة، مفيدة لإنشاء أعمدة. |
\\ |
شرطة مائلة عكسية: لطباعة الشرطة المائلة العكسية نفسها. |
\" |
علامة تنصيص مزدوجة: لطباعة علامة تنصيص مزدوجة داخل نص معرّف بها. |
\' |
علامة تنصيص مفردة: لطباعة علامة تنصيص مفردة داخل نص معرّف بها. |
مثال عملي:
# استخدام \n لإنشاء قائمة تسوق على عدة أسطر
shopping_list = "قائمة التسوق:\n\t- حليب\n\t- خبز\n\t- بيض"
print(shopping_list)
print("----------") # فاصل للتوضيح
# استخدام \" لطباعة اقتباس
quote = "قال أرسطو: \"العقل المتعلم هو القادر على تداول فكرة دون القبول بها.\""
print(quote)
الناتج سيكون:
قائمة التسوق:
- حليب
- خبز
- بيض
----------
قال أرسطو: "العقل المتعلم هو القادر على تداول فكرة دون القبول بها."
ب. الأعداد (int
و float
)
عندما نريد إجراء عمليات حسابية، نستخدم الأعداد.
-
**الأعداد الصحيحة (Integers int
):** هي أعداد كاملة بدون أجزاء عشرية (مثل: 10، -5، 0). -
**الأعداد العشرية (Floats float
):** هي أعداد تحتوي على فاصلة عشرية (مثل: 99.5، 3.14).
item_price = 7.5 # عدد عشري
quantity = 4 # عدد صحيح
total_cost = item_price * quantity # يمكننا إجراء العمليات الحسابية
print(f"التكلفة الإجمالية: {total_cost} ريال")
# سيطبع: التكلفة الإجمالية: 30.0 ريال
💡 نصيحة لتسهيل القراءة:
لتسهيل قراءة الأرقام الكبيرة في الكود، يمكنك استخدام الشرطة السفلية (_) كفاصل للآلاف. بايثون تتجاهلها عند تنفيذ الكود.
large_number = 1_000_000 # نفس قيمة الرقم 1000000 ولكن أسهل للقراءة
ج. القيم المنطقية (Booleans)
المشكلة: كيف يمكن للبرنامج أن يجيب على سؤال مثل “هل عمر المستخدم أكبر من 18؟”
الحل: باستخدام النوع المنطقي (bool
). هذا النوع له قيمتان فقط: True
(نعم، صحيح) أو False
(لا، خطأ). إنه يمثل إجابة “نعم” أو “لا” في عالم البرمجة، وغالبًا ما يكون ناتجًا عن عملية مقارنة.
age = 20
is_adult = age > 18 # هل قيمة age أكبر من 18؟
print(f"هل المستخدم بالغ؟ {is_adult}")
# سيطبع: هل المستخدم بالغ؟ True
4. حل مشكلة input()
: تحويل الأنواع
لنتذكر المشكلة التي واجهناها: دالة input()
تعطينا دائمًا نصًا. ماذا لو طلبنا من المستخدم إدخال سنة ميلاده وأردنا حساب عمره؟
birth_year_text = input("أدخل سنة ميلادك: ") # إذا أدخل المستخدم 1995، فالمتغير يحتوي على النص "1995"
# current_age = 2025 - birth_year_text # هذا السطر سيسبب خطأ! لا يمكن طرح نص من رقم.
الحل: يجب أن نحول (Cast) النص الذي يشبه الرقم إلى نوع بيانات رقمي حقيقي.
-
int()
: تحول القيمة إلى عدد صحيح. -
float()
: تحول القيمة إلى عدد عشري. -
str()
: تحول القيمة إلى نص (مفيد للعكس).
birth_year_text = input("أدخل سنة ميلادك: ")
# 1. نحول النص إلى عدد صحيح
birth_year_number = int(birth_year_text)
# 2. الآن يمكننا إجراء العملية الحسابية
current_age = 2025 - birth_year_number
print(f"عمرك هو تقريبًا {current_age} عامًا.")
5. كيف تتأكد من نوع البيانات؟
المشكلة: أحيانًا، قد لا يعمل الكود كما هو متوقع، والسبب غالبًا ما يكون نوع بيانات خاطئ في أحد المتغيرات. كيف يمكنك التأكد من نوع البيانات المخزنة في “صندوقك”؟
الحل: استخدم دالة type()
المدمجة. إنها أداة تشخيصية رائعة.
value1 = "100"
value2 = 100
print( f"نوع القيمة الأولى هو: {type(value1)}" ) # <class 'str'>
print( f"نوع القيمة الثانية هو: {type(value2)}" ) # <class 'int'>
6. تمارين تطبيقية
إليك 10 تمارين تطبيقية متنوعة مع حلولها، مصممة خصيصًا لتغطية المفاهيم الموجودة في الفصل فقط (المتغيرات، input
, أنواع البيانات، تحويل الأنواع، f-strings، دوال النصوص، والعمليات الحسابية البسيطة).
التمرين 1: بطاقة معلومات بسيطة
المطلوب: قم بإنشاء متغيرات لتخزين المعلومات التالية: اسمك، وعمرك، وطولك بالمتر. ثم اطبع هذه المعلومات في جملة واحدة باستخدام f-string.
الحل:
# إنشاء المتغيرات وتخزين القيم
my_name = "علي"
my_age = 28
my_height = 1.78
# طباعة المعلومات باستخدام f-string
print(f"اسمي هو {my_name}، عمري {my_age} عامًا، وطولي {my_height} متر.")
التمرين 2: محرر الأسماء
المطلوب: اكتب برنامجًا يسأل المستخدم عن اسمه الأول وهو قد يكتبه بأحرف غير مرتبة ومسافات زائدة (مثال: " sALem "
). يجب على البرنامج تنظيف الاسم من المسافات الزائدة وطباعته بحيث يكون الحرف الأول كبيرًا وباقي الحروف صغيرة.
الحل:
# سؤال المستخدم عن اسمه
messy_name = input("الرجاء إدخال اسمك الأول: ")
# تنظيف الاسم وتنسيقه
# .strip() لإزالة المسافات الزائدة من البداية والنهاية
# .title() لجعل الحرف الأول كبير والباقي صغير
clean_name = messy_name.strip().title()
# طباعة الاسم النظيف
print(f"اسمك بعد التنسيق هو: {clean_name}")
التمرين 3: حاسبة العمر
المطلوب: اكتب برنامجًا يسأل المستخدم عن سنة ميلاده، ثم يحسب عمره التقريبي ويطبعه. افترض أن العام الحالي هو 2025.
الحل:
# سؤال المستخدم عن سنة الميلاد (سيتم تخزينها كنص)
birth_year_str = input("في أي سنة ميلادية ولدت؟ ")
# تحويل النص إلى عدد صحيح (int)
birth_year_int = int(birth_year_str)
# حساب العمر التقريبي
current_year = 2025
age = current_year - birth_year_int
# طباعة الناتج
print(f"عمرك التقريبي هو {age} عامًا.")
التمرين 4: حاسبة سعر بالضريبة
المطلوب: اكتب برنامجًا يسأل المستخدم عن سعر منتج ما. ثم يقوم البرنامج بإضافة ضريبة القيمة المضافة (15%) إلى السعر الأصلي وطباعة السعر النهائي.
الحل:
# سؤال المستخدم عن السعر (قد يكون عددًا عشريًا)
original_price_str = input("أدخل سعر المنتج: ")
# تحويل النص إلى عدد عشري (float)
original_price_float = float(original_price_str)
# حساب قيمة الضريبة (15% = 0.15)
tax_value = original_price_float * 0.15
final_price = original_price_float + tax_value
# طباعة السعر النهائي
print(f"السعر الأصلي: {original_price_float}")
print(f"قيمة الضريبة المضافة: {tax_value}")
print(f"السعر النهائي شامل الضريبة هو: {final_price}")
التمرين 5: فاحص أنواع البيانات
المطلوب: قم بإنشاء أربعة متغيرات: واحد يحتوي على نص، والثاني على عدد صحيح، والثالث على عدد عشري، والرابع على قيمة منطقية. استخدم دالة type()
لطباعة نوع كل متغير.
الحل:
# إنشاء المتغيرات
book_title = "مقدمة في بايثون"
page_count = 150
book_price = 89.99
is_available = True
# فحص وطباعة نوع كل متغير
print(f"المتغير 'book_title' من نوع: {type(book_title)}")
print(f"المتغير 'page_count' من نوع: {type(page_count)}")
print(f"المتغير 'book_price' من نوع: {type(book_price)}")
print(f"المتغير 'is_available' من نوع: {type(is_available)}")
التمرين 6: تكرار النص
المطلوب: اسأل المستخدم عن كلمة وعن عدد المرات التي يريد تكرارها. ثم اطبع الكلمة مكررة بذلك العدد. (تلميح: عملية الضرب *
تعمل على النصوص أيضًا).
الحل:
# سؤال المستخدم
word = input("أدخل الكلمة التي تريد تكرارها: ")
repeat_count_str = input("كم مرة تريد تكرارها؟ ")
# تحويل عدد المرات إلى عدد صحيح
repeat_count_int = int(repeat_count_str)
# تكرار النص باستخدام الضرب
repeated_word = word * repeat_count_int
# طباعة الناتج
print(repeated_word)
التمرين 7: المقارنة المنطقية
المطلوب: اكتب برنامجًا يسأل المستخدم عن رقمين. ثم يقوم البرنامج بالتحقق مما إذا كان الرقم الأول يساوي الرقم الثاني ويطبع الناتج المنطقي (True
أو False
).
الحل:
# أخذ الرقم الأول وتحويله
num1_str = input("أدخل الرقم الأول: ")
num1 = float(num1_str) # نستخدم float ليكون متوافقًا مع الأعداد الصحيحة والعشرية
# أخذ الرقم الثاني وتحويله
num2_str = input("أدخل الرقم الثاني: ")
num2 = float(num2_str)
# إجراء المقارنة وتخزين الناتج المنطقي
are_equal = (num1 == num2)
# طباعة الناتج
print(f"هل الرقم الأول يساوي الرقم الثاني؟ {are_equal}")
التمرين 8: مولد اسم المستخدم
المطلوب: اسأل المستخدم عن اسمه الأول واسم عائلته. قم بإنشاء اسم مستخدم مقترح يتكون من أول ثلاثة أحرف من الاسم الأول وكلها بأحرف صغيرة، متبوعة باسم العائلة كله بأحرف صغيرة.
الحل:
# أخذ المدخلات من المستخدم
first_name = input("أدخل اسمك الأول: ")
last_name = input("أدخل اسم عائلتك: ")
# استخلاص أول 3 أحرف وتحويلها إلى صغيرة
first_part = first_name[0:3].lower()
# تحويل اسم العائلة إلى صغير
last_part = last_name.lower()
# دمج الجزأين لإنشاء اسم المستخدم
username = first_part + last_part
# طباعة اسم المستخدم المقترح
print(f"اسم المستخدم المقترح لك هو: {username}")
التمرين 9: حاسبة محيط الدائرة
المطلوب: اكتب برنامجًا يسأل المستخدم عن نصف قطر دائرة. ثم يقوم بحساب محيطها وطباعة الناتج. استخدم قيمة 3.14159
لـ “باي” (π). المعادلة هي: $المحيط = 2 \times \pi \times نصف , القطر$.
الحل:
# تعريف قيمة باي كمتغير ثابت
PI_VALUE = 3.14159
# سؤال المستخدم عن نصف القطر
radius_str = input("أدخل نصف قطر الدائرة: ")
# تحويل القيمة إلى عدد عشري
radius = float(radius_str)
# حساب المحيط
circumference = 2 * PI_VALUE * radius
# طباعة الناتج
print(f"محيط الدائرة التي نصف قطرها {radius} هو: {circumference}")
التمرين 10: ملخص بيانات السفر
المطلوب: اكتب برنامجًا يجمع معلومات لرحلة سفر. اسأل المستخدم عن: مدينة الوجهة، وعدد أيام السفر، والميزانية الإجمالية للرحلة. ثم احسب متوسط الصرف اليومي (الميزانية / عدد الأيام) واطبع ملخصًا منسقًا للمعلومات.
الحل:
# جمع المعلومات من المستخدم
destination_city = input("ما هي مدينة وجهتك؟ ").strip().title()
trip_days_str = input(f"كم يومًا ستبقى في {destination_city}؟ ")
total_budget_str = input("ما هي ميزانيتك الإجمالية للرحلة؟ ")
# تحويل الأنواع الرقمية
trip_days = int(trip_days_str)
total_budget = float(total_budget_str)
# حساب متوسط الصرف اليومي
daily_spending_avg = total_budget / trip_days
# طباعة الملخص المنسق
print("\n--- ملخص رحلتك ---")
print(f"الوجهة: {destination_city}")
print(f"مدة الإقامة: {trip_days} أيام")
print(f"الميزانية الإجمالية: ${total_budget}")
print(f"متوسط الصرف اليومي المسموح به: ${daily_spending_avg}")
7. خلاصة الفصل
-
نستخدم المتغيرات لتخزين المعلومات التي يحتاجها برنامجنا.
-
البيانات لها أنواع مختلفة (
str
,int
,float
,bool
) لأن الحاسوب يتعامل مع كل نوع بطريقة مختلفة. -
نستخدم f-strings لدمج المتغيرات داخل النصوص بسهولة.
-
نستخدم تحويل الأنواع (مثل
int()
) لحل مشكلةinput()
وإجراء عمليات حسابية.
ماذا بعد؟
الآن بعد أن أصبح بإمكانك تخزين المعلومات والتفاعل مع المستخدم، حان الوقت لتعليم برنامجك كيفية اتخاذ القرارات. في الفصل الخامس، سنتعلم كيف نستخدم الشروط (if
, else
) لجعل برنامجك يقوم بأشياء مختلفة بناءً على القيم التي خزنتها.