تعتبر لغة بايثون لغة جيدة بشكل خاص للمبتدئين. حيث يمكن قراءة قواعدها النحوية الواضحة بوضوح تقريبًا مثل قراءة الجملة العادية. وتعتبر عبارة if-else مثالاً جيدًا على ذلك؛ فهي تتيح لك بناء المنطق في برامجك. ستأخذك هذه المقالة في جولة عبر عشرة تمارين تدريبية على عبارة if-else في بايثون. تم تصميم كل منها خصيصًا للمبتدئين، مما يساعدك على صقل فهمك لعبارات if-else.
كما يقول المثل، الممارسة تؤدي إلى الإتقان. وتعلم بايثون ليس استثناءً. وكما ناقشنا في طرق مختلفة لممارسة بايثون، فإن القيام بدورات تدريبية عبر الإنترنت يعد وسيلة رائعة لممارسة مجموعة متنوعة من المواضيع. وكلما مارست كتابة التعليمات البرمجية، كلما أصبحت أكثر راحة وثقة في قدراتك. لذا – سواء كنت تهدف إلى بناء برنامجك الخاص، أو التعمق في علم البيانات، أو أتمتة المهام العادية – فإن تخصيص الوقت للممارسة هو المفتاح.
عبارة if-else في بايثون
قبل أن نتعمق في التمارين، دعنا نناقش بإيجاز كيفية عمل عبارات if-else في بايثون. تسمح عبارة if-else لبرنامجك باتخاذ القرارات بناءً على شروط معينة. بناء الجملة بسيط:
- تقدم شرطًا للتقييم داخل if
- إذا كان هذا الشرط صحيحًا، فسيتم تنفيذ كتلة التعليمات البرمجية المقابلة.
- إذا كان الشرط خاطئًا، فسيتم تنفيذ الكود الموجود داخل كتلة else الاختيارية بدلاً من ذلك.
وهنا مثال بسيط:
x = 10
if x > 5:
print("x is greater than 5")
else:
print("x is not greater than 5")
في هذا المثال، إذا كانت قيمة x أكبر من 5، فسوف يطبع البرنامج “x أكبر من 5″، وإلا فسوف يطبع “x ليس أكبر من 5”.
يشكل هذا المفهوم العمود الفقري لاتخاذ القرار في برامج بايثون.
للاستفادة القصوى من هذه المقالة، حاول حل المسائل قبل قراءة الحلول. قد تحتوي بعض هذه التمارين على عدة حلول محتملة، لذا حاول أيضًا التفكير في طرق بديلة لحل نفس المسألة. لنبدأ.
10 تمارين تدريبية على استخدام if-else في بايثون
تمرين 1: هل أنت طويل القامة؟
تمرين: اكتب برنامجًا يطلب من المستخدم قياس طوله بالسنتيمتر. استخدم الدالة المضمنة input()
للقيام بذلك. إذا كان الطول أكبر من 185 سنتيمترًا، اطبع سطر التعليمات البرمجية التالي:
You are very tall.
الحل:
height = input('What is your height in centimeters? ')
if int(height) > 185:
print('You are very tall')
الشرح: هذا بناء جملة مشابه لمثال القالب أعلاه. يخزن متغير height مدخلات المستخدم كعدد صحيح ويختبر ما إذا كان أكبر من 185 سم. إذا كان الأمر كذلك، فسيتم طباعة الرسالة. لاحظ أنه لا يوجد أي شيء آخر؛ وهذا يعني أنه إذا كان height أقل من أو يساوي 185 سم، فلا يحدث شيء.
التمرين 2: المزيد من الخيارات
تمرين: اكتب برنامجًا يطرح على المستخدم السؤال التالي:
Is Sydney the capital of Australia?
- إذا أجاب المستخدم بـ y، اطبع: Wrong! Canberra is the capital!
- إذا أجاب المستخدم بـ n، اطبع: Correct!
- إذا أجاب المستخدم على أي شيء آخر، اطبع: I do not understand your answer!
الحل:
answer = input('Is Sydney the capital of Australia? ')
if answer == 'y':
print('Wrong! Canberra is the capital!')
elif answer == 'n':
print('Correct!')
else:
print('I do not understand your answer!')
الشرح: يمكن تمديد عبارة if باستخدام elif (أي else if) للتحقق من أي إجابة تعيد False إلى الشرط الأول. إذا أعادت عبارة elif أيضًا False، فسيتم تنفيذ الكتلة المسننة أسفل else.
التمرين 3: التحقق من وجود حرف في سلسلة
تمرين: اكتب برنامجًا يطلب من المستخدم القيام بما يلي:
- أدخل اسم دولة لا تحتوي على أي أحرف صغيرة مثل a أو e. (استخدم الأمر: country is )
- إذا قدم المستخدم سلسلة صحيحة (أي سلسلة لا تحتوي على a أو e بداخلها)، اطبع: You won… unless you made this name up!
- وإلا، اطبع: You lost!
(بالمناسبة، الإجابات المحتملة تشمل Hong Kong, Cyprus, and Togo.)
الحل:
country = input('The country is: ')
if 'a' in country or 'e' in country:
print('You lost!')
else:
print('You won... unless you made this name up!')
الشرح: يطلب هذا الكود من المستخدم إدخال اسم دولة باستخدام دالة الإدخال المضمنة. ثم يتحقق من وجود الحرفين “a” أو “e” في اسم الدولة المدخل باستخدام عامل التشغيل in. إذا تم العثور على أي من الحرفين، فسيتم طباعة “لقد خسرت!”. وإلا، فسيتم طباعة “لقد فزت… ما لم تكن قد اخترعت هذا الاسم!” باستخدام عبارة else.
التمرين 4: حساب تكرار الأحرف في السلسلة
تمرين: يقال إن الحرف e هو الحرف الأكثر شيوعًا في اللغة الإنجليزية. احسب واطبع عدد مرات ظهور هذا الحرف في القصيدة أدناه:
John Knox was a man of wondrous might,
And his words ran high and shrill,
For bold and stout was his spirit bright,
And strong was his stalwart will.
Kings sought in vain his mind to chain,
And that giant brain to control,
But naught on plain or stormy main
Could daunt that mighty soul.
John would sit and sigh till morning cold
Its shining lamps put out,
For thoughts untold on his mind lay hold,
And brought but pain and doubt.
But light at last on his soul was cast,
Away sank pain and sorrow,
His soul is gay, in a fair to-day,
And looks for a bright to-morrow.
الحل:
poem = ('John Knox was a man of wondrous might,'
'And his words ran high and shrill,'
'For bold and stout was his spirit bright,'
'And strong was his stalwart will.'
'Kings sought in vain his mind to chain,'
'And that giant brain to control,'
'But naught on plain or stormy main'
'Could daunt that mighty soul.'
'John would sit and sigh till morning cold'
'Its shining lamps put out,'
'For thoughts untold on his mind lay hold,'
'And brought but pain and doubt.'
'But light at last on his soul was cast,'
'Away sank pain and sorrow,'
'His soul is gay, in a fair to-day,'
'And looks for a bright to-morrow.')
counter = 0
for letter in poem:
if letter == 'e':
counter = counter + 1
print(counter)
الشرح: يبدأ الحل بتهيئة عداد بقيمة 0. ثم يتم استخدام حلقة for لتكرار كل حرف في متغير السلسلة poem. تختبر عبارة if ما إذا كان الحرف الحالي هو e؛ إذا كان كذلك، يتم زيادة العداد بمقدار 1. أخيرًا، تتم طباعة نتيجة العداد. لاحظ أنه لا يوجد شيء آخر مطلوب في هذا الحل، حيث لا ينبغي أن يحدث أي شيء إذا لم يكن الحرف e.
تمرين 5: تنسيق الوصفات
تمرين: تحب الطبخ وتجرب وصفات مختلفة من الإنترنت. ومع ذلك، تجد أحيانًا وصفات مكتوبة في فقرة نصية واحدة. على سبيل المثال:
Cut a slit into the chicken breast. Stuff it with mustard, mozzarella and cheddar. Secure the whole thing with rashers of bacon. Roast for 20 minutes at 200C.
عندما تكون في منتصف الطهي، من الصعب قراءة مثل هذه الفقرة. تفضل قائمة مرتبة، مثل هذه:
- قطع شق في صدر الدجاج.
- إحشيها بالخردل والموزاريلا والشيدر.
- قم بتأمين كل شيء باستخدام شرائح من اللحم
- نخبزها في الفرن على درجة حرارة 200 درجة مئوية لمدة 20 دقيقة.
اكتب نصًا برمجيًا بلغة بايثون يقبل سلسلة وصفة من المستخدم (‘الصق وصفتك:’) ويطبع قائمة مرتبة من الجمل، تمامًا كما في المثال أعلاه.
يجب أن تنتهي كل جملة من المدخلات والمخرجات بنقطة واحدة.
الحل:
recipe = input('Paste your recipe: ')
counter = 1
ordered_list = str(counter) + '. '
for letter in recipe:
if letter == '.':
counter += 1
ordered_list += '.\n'
ordered_list += str(counter)
ordered_list += '.'
else:
ordered_list += letter
no = len(str(counter))
print(ordered_list[0:-1-no])
الشرح: يأخذ الحل مدخلات الوصفة من المستخدم باستخدام input()
، ثم يكرر كل حرف في الوصفة. كلما صادف نقطة (‘.’)، فإنه يزيد عدادًا، ويضيف حرف سطر جديد (‘\n
‘) والعداد المتزايد متبوعًا بنقطة إلى قائمة مرتبة. إذا صادف أي حرف آخر، فإنه ببساطة يضيف هذا الحرف إلى القائمة المرتبة. أخيرًا، يحسب طول العداد، ويزيل الجزء الأخير من القائمة المرتبة لاستبعاد العداد غير الضروري، ويطبع القائمة المرتبة المعدلة، والتي تعرض الوصفة بخطوات مرقمة.
التمرين 6: عبارات if المتداخلة
تمرين: السنة الكبيسة هي سنة تتكون من 366 يومًا (وليس 365). وتحدث تقريبًا كل أربع سنوات. وبشكل أكثر تحديدًا، تعتبر السنة كبيسة إذا كانت قابلة للقسمة على 4 ولكن ليس على 100 أو إذا كانت قابلة للقسمة على 400.
اكتب برنامجًا يسأل المستخدم عن السنة ويرد إما بسنة كبيسة أو ليست سنة كبيسة.
الحل:
year = int(input('Provide a year: '))
if (year % 4) == 0:
if (year % 100) == 0:
if (year % 400) == 0:
print('leap year')
else:
print('not a leap year')
else:
print('leap year')
else:
print('not a leap year')
الشرح: يأخذ هذا البرنامج سنة من المستخدم كمدخلات. ويتحقق مما إذا كانت السنة قابلة للقسمة على 4. وإذا كانت كذلك، فإنه يتحقق بعد ذلك مما إذا كانت السنة قابلة للقسمة على 100. وإذا كانت كذلك، فإنه يتحقق بعد ذلك مما إذا كانت السنة قابلة للقسمة على 400. وإذا كانت كذلك، فإنه يطبع “سنة كبيسة” لأنها تلبي جميع شروط السنة الكبيسة.
إذا كان العام قابلاً للقسمة على 4، ولكن ليس على 100، أو إذا كان غير قابل للقسمة على 400، فإن البرنامج يطبع “ليست سنة كبيسة”. إذا كانت السنة غير قابلة للقسمة على 100، فإنه يطبع مباشرة “سنة كبيسة” لأنها تلبي الشرط الأساسي للسنة الكبيسة (أن تكون قابلة للقسمة على 4). إذا كانت السنة غير قابلة للقسمة على 4، فإنه يطبع “ليست سنة كبيسة”.
تمرين 7: لعبة سكرابل
تمرين: قم بإنشاء دالة تسمى can_build_word(letters_list, word)
تأخذ قائمة من الحروف وكلمة. يجب أن تعيد الدالة القيمة True إذا كانت الكلمة تستخدم الحروف من القائمة فقط.
كما هو الحال في لعبة سكرابل الحقيقية، لا يمكنك استخدام بلاطة واحدة مرتين في نفس الكلمة. على سبيل المثال، إذا كانت قائمة الحروف تحتوي على حرف “a” واحد فقط، فإن “banana” ترجع القيمة False. يجب أن ترجع الدالة القيمة False أيضًا إذا كانت الكلمة تحتوي على أي أحرف غير موجودة في القائمة.
على سبيل المثال …
can_build_word(['a', 'b', 'e', 'g', 'l', 'r', 'z'], 'glare')
… يجب أن يعود بـ True. من ناحية أخرى …
can_build_word(['a', 'i', 'n', 's', 'f', 'q', 'y'], 'sniff')
… يجب أن يعود False لأنه يوجد فقط ‘f’ واحد.
هناك أمر واحد يجب وضعه في الاعتبار: لا ينبغي تغيير قائمة الحروف المقدمة ولا الكلمة بواسطة الدالة الخاصة بك. قد يكون من المغري إزالة الحروف من قائمة الحروف لإزالة المربعات المستخدمة. لا ينبغي أن تكون هذه هي الحالة. بدلاً من ذلك، يجب عليك نسخ القائمة التي تم تمريرها. ببساطة استخدم الدالة list()
وأرسل لها قائمة أخرى:
word_list_copy = list(word_list)
بهذه الطريقة يمكننا العمل بأمان على نسخة من القائمة دون تغيير محتويات القائمة الأصلية.
الحل:
def can_build_word(letters_list, word):
letters_list_copy = list(letters_list)
for letter in word:
if letter in letters_list_copy:
letters_list_copy.remove(letter)
else:
return False
return True
الشرح: تبدأ الدالة بإنشاء نسخة من قائمة الحروف لتجنب تعديل الأصل. ثم تتكرر العملية على كل حرف في الكلمة. لكل حرف، تتحقق من وجود هذا الحرف في نسخة القائمة. إذا كان موجودًا، تزيل هذا الحرف من النسخة، مما يضمن استخدام كل حرف مرة واحدة فقط.
إذا لم يكن الحرف موجودًا في نسخة قائمة الحروف، فهذا يعني أنه لا يمكن تكوين الكلمة باستخدام الحروف المتاحة؛ فتعود القيمة False. إذا كان من الممكن العثور على جميع الحروف في الكلمة وإزالتها من نسخة القائمة، فهذا يعني أنه يمكن تكوين الكلمة بالفعل؛ فتعود القيمة True.
إذا كنت تبحث عن مواد إضافية لمساعدتك على تعلم كيفية العمل مع قوائم بايثون، فإن مقالتنا 12 تمرينًا لقوائم بايثون للمستوى المبتدئ مع الحلول ستوفر لك ما تحتاجه.
تمرين 8: حلقات for وعبارات if
تمرين: اكتب برنامج يطلب عددًا صحيحًا موجبًا ويطبع جميع مقسوماته، واحدًا تلو الآخر، على أسطر منفصلة بترتيب تصاعدي.
المقسوم عليه هو عدد يقسم عددًا معينًا دون باقي. على سبيل المثال، مقسومات العدد 4 هي 1 و2 و4.
للتحقق مما إذا كان a مقسومًا على b، يمكنك استخدام عامل %. يعيد a % b
باقي قسمة a على b. على سبيل المثال، 9 % 2 يساوي 1 لأن 9 = (4 * 2) + 1، و9 % 3 يساوي 0 لأن 9 يقسم على 3 بدون باقي. إذا كان a % b == 0
، فإن b مقسوم على a.
الحل:
number = int(input("Please enter a number: "))
for i in range(1, number + 1):
if number % i == 0:
print(i)
الشرح: يأخذ هذا الحل رقمًا مدخلاً من المستخدم ثم يكرر الأرقام من 1 إلى ذلك الرقم المدخل (شاملًا). لكل رقم i في هذا النطاق، يتحقق مما إذا كان الرقم المدخل قابلاً للقسمة على i بدون باقي (number % i == 0
). إذا تم استيفاء الشرط، فهذا يعني أن i عامل في الرقم المدخل.
التمرين 9: عبارات الشرط وهياكل البيانات
تمرين: اكتب دالة باسم get_character_frequencies()
تأخذ سلسلة كمدخل وتعيد قاموسًا من الأحرف الصغيرة كمفاتيح وعدد مرات تكرارها كقيم. تجاهل حالة الحرف.
الحل:
def get_character_frequencies(word):
freq_dict = {}
for character in word:
character = character.lower()
if character not in freq_dict:
freq_dict[character] = 1
else:
freq_dict[character] += 1
return freq_dict
شرح: تقوم هذه الدالة بتهيئة قاموس فارغ (freq_dict
) لتخزين ترددات الأحرف. وتتكرر كل حرف في الكلمة المدخلة باستخدام حلقة for. داخل الحلقة، تقوم بتحويل كل حرف إلى أحرف صغيرة باستخدام التابع lower()
؛ وهذا يضمن العد غير الحساس لحالة الأحرف.
يتحقق البرنامج مما إذا كان الحرف الصغير هو بالفعل مفتاح في القاموس. إذا لم يكن كذلك، فإنه يضيف الحرف كمفتاح ويضبط تردده على 1. إذا كان بالفعل مفتاحًا، فإنه يزيد عدد الترددات لهذا الحرف بمقدار 1 ويعيد القاموس.
تمرين 10: عبارات الشرط والإرجاعات المتعددة
تمرين: اكتب دالة باسم return_bigger(a, b)
تأخذ رقمين وتعيد الرقم الأكبر. إذا كان الرقمان متساويين، فارجع 0.
الحل:
def return_bigger(a, b):
if a > b:
return a
elif b > a:
return b
else:
return 0
الشرح: عند استخدام عبارات if في دالة، يمكنك تعريف قيمة إرجاع في كتلة التعليمات البرمجية المسننة أسفل عبارة if-else. وهذا يجعل التعليمات البرمجية الخاصة بك أبسط وأكثر قابلية للقراءة – وهو مثال رائع آخر على النحو الواضح الذي يجعل Python أداة جذابة لجميع المبرمجين.
هل تريد المزيد من تمارين ممارسة بايثون؟
إن تعلم أي شيء جديد يشكل تحديًا كبيرًا. والاعتماد على مجموعة متنوعة من الموارد يعد وسيلة جيدة للحصول على خلفية واسعة. اقرأ بعض الكتب والمدونات للحصول على فهم نظري، وشاهد مقاطع الفيديو عبر الإنترنت، واستفد من مجتمع Python النشط على منصات مثل Stack Overflow. والأهم من ذلك، قم ببعض التدريب العملي. نناقش هذه النقاط بالتفصيل في ما هي أفضل طريقة لممارسة Python؟
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.