ביטויים לוגיים והתניות

להלן סדרת שאלות ותשובות. הן עוסקות בכתיבת ביטויים לוגיים ובמבנים של התניות:

if, if…else, if…elif…else

 

בקליטת קלט באמצעות הפונקציה input ההנחה היא שמוכנס קלט תקין, אלא אם כן נאמר אחרת.  

הסימן ? משמעו ערך כלשהו.

בהצלחה!

 

152 * 173

האם הטענה הזאת נכונה: להלן ביטוי לוגי שתוצאתו היא True כיוון שהוא בודק אם מתקיימת זהות בין שני ערכים זהים. 

35 = 35 

תשובה: לא נכון. הסימן = משמש בהוראות השמה ויוצר אותן. הוא אינו משמש בבדיקת זהות בין שני ערכים. כדי לבדוק אם ערך אחד זהה לערך אחד נשתמש בסימן == , כך:

תשובה: לא נכון. הסימן = משמש בהוראות השמה ויוצר אותן. כאן הוא יוצר הוראת השמה שמשמעה הוא: יש להציב במשתנה num1 את הערך המוצב במשתנה num2. נצטרך להחליף את הסימן = בסימן == כדי ליצור ביטוי לוגי שתוצאתו היא True אם הערכים המוצבים במשתנים num1 ו-num2 הם זהים זה לזה, או False אם הערכים הם שונים זה מזה. כך ייכתב הביטוי הלוגי הזה: 

35 == 35

מה תוצאת הביטוי הזה – הערך True או הערך False?

72 == 72

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

72 == ’72’

תשובה: הערך False. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

72 == 72.0

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

5 != 7

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

5 != 5

תשובה: הערך False. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

‘rambam’ == ‘Rambam’

תשובה: הערך False. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

‘water’ == ‘juice’

תשובה: הערך False. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

False == False

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

False != True

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

3 > 10

תשובה: הערך False. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

10 > 3

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

3 > 3

תשובה: הערך False. 

לפניכם ביטוי לוגי שתוצאת חישובו היא False. הוסיפו לו תו אחד באופן שתוצאת חישובו תהיה True. 

3 > 3

3 >= 3

מה תוצאת הביטוי הזה – הערך True או הערך False?

(7 > 3) or (8 < 2)

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

(7 > 3) and (8 <= 8)

תשובה: הערך True. 

איזה ערך מוצב במשתנה result – הערך True או הערך False?

booksNum = 10

result = booksNum >= 3

תשובה: הערך True. 

איזה ערך מוצב במשתנה result – הערך True או הערך False?

x = 3

result = (x + 2 > 3) and (x – 2 <= 8)

תשובה: הערך True. 

איזה ערך מוצב במשתנה result – הערך True או הערך False?

a = 5

b = 7

c = 6

result = a < b < c

תשובה: הערך False. 

איזה ערך מוצב במשתנה result – הערך True או הערך False?

a = 5

b = 7

c = 6

result = a > b > c

תשובה: הערך False. 

איזה ערך מוצב במשתנה result – הערך True או הערך False?

a = 5

b = 7

c = 6

result = a < b > c

תשובה: הערך True. 

בתכנית מוגדר משתנה k והוא מכיל מספר שלם כלשהו. כתבו ביטוי לוגי הבודק אם המספר הזה הוא בין 1 (כולל) ל-4 (לא כולל). 

(k >= 1) and (k < 4) 

מה תוצאת הביטוי הזה – הערך True או הערך False?

not (7 > 3)

תשובה: הערך False. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

not True

תשובה: הערך False. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

(True and True) or False

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

False and (True or False)

תשובה: הערך False. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

not True or not False

תשובה: הערך True. 

מה תוצאת הביטוי הזה – הערך True או הערך False?

not not not False

תשובה: הערך True. 

קטע קוד זה צריך להוסיף 1 למספר שיש במשתנה x ולהדפיס את המספר המוגדל, כל זה אם ורק אם הערך שיש ב-x לפני ההגדלה הוא 3. בקטע יש שגיאה. מהי וכיצד יש לתקנה?

if x == 3:

x = x + 1

print(x)

תשובה: במבנה if ההוראות המתבצעות אם התנאי הנבדק מתקיים צריכות להיות מוזזות ימינה לעומת השורה שהתנאי נבדק בה. מבחינה זו אין בקוד כאן מבנה if תקין: ההוראה המוסיפה 1 לערך שיש במשתנה x והוראת ההדפסה צריכות להתבצע אך ורק אם תוצאת הביטוי הנבדק היא True, ואולם הן אינן מוזזות ימינה לעומת השורה המבצעת את הבדיקה. אם כן הקוד המתוקן הוא זה: 

if x == 3:

    x = x + 1

    print(x)

מה מדפיס קטע הקוד הזה?

if True:

     print(‘Always’)

print(‘Here too’)

Always

Here too

מה מדפיס קטע הקוד הזה?

if not False:

     print(‘Always’)

print(‘Here too’)

Always

Here too

מה מדפיס קטע הקוד הזה?

grade = 80

if grade < 90:

     grade = grade + 2

print(grade)

תשובה: המספר 82. 

מה מדפיס הקוד הזה אם המשתמשת מכניסה את המחרוזת ‘9’?

n = int(input(‘Please enter an integer bigger than 0: ‘))

if (n > 0):

     print(n)

     n = n – 1

תשובה: המספר 9. 

אם נריץ את הקוד הזה נקבל הודעת שגיאה. ממה נגרמת השגיאה? 

n = int(input(‘Please enter an integer bigger than 0: ‘))

n = k + 3 

if (n == k + 3):

    print(‘k is equal to (n+3).’) 

תשובה: המשתנה k לא הוגדר קודם לשימוש בו בביטוי החשבוני בהוראה השנייה.  

קטע קוד זה אמור להדפיס ‘both’ אם המספרים שיש במשתנים a ו-b שניהם גדולים מ-10. הקוד שגוי. הסבירו מה השגיאה והציעו תיקון.  

if a and b > 10:

     print(‘both’)

תשובה: האופרטור and מצרף שני ביטויים לוגיים. כאן משמאלו אין ביטוי לוגי אלא שם משתנה. אי אפשר להשוות כך בכפיפה אחת שני משתנים באמצעות אופרטור של השוואה (כאן: גדול מ-). יש להשוות כל ערך בנפרד. הנה הקוד המתוקן. 

if (a > 10) and (b > 10):

    print(‘both’)

קטע קוד זה אמור להדפיס ‘found it’ אם המספר שיש במשתנה num הוא מספר גדול מ-10 וזוגי. הקוד שגוי. הסבירו מה השגיאה והציעו תיקון.  

if (num > 10):

if (num % 2 == 0):

     print(‘found it’)

תשובה. הוראת ה-if הפנימית וגופה אינן מוזזות ימינה כנדרש. הנה הקוד המתוקן. 

if (num > 10):

    if (num % 2 == 0):

         print(‘found it’)

קטע קוד זה אמור להדפיס ‘found it’ אם המספר שיש במשתנה num הוא מספר גדול מ-10 וזוגי. הקוד שגוי. הסבירו מה השגיאה והציעו תיקון.  

if (num > 10)

    if (num % 2 == 0)

        print(‘found it’)

תשובה: הסימן נקודתיים הושמט בסוף השורה הראשונה בכל אחד משני מבני ה-if. הקוד הנכון: 

if (num > 10):

    if (num % 2 == 0):

         print(‘found it’)

כתבו תכנית הקולטת מהמשתמשת שתי מחרוזות המייצגות מספרים עשרוניים, מספר א’ ומספר ב’. היא מדפיסה 1 אם מספר א’ גדול ממספר ב’ וגם מספר ב’ גדול מ-5. היא מדפיסה 2 אם מספר א’ גדול ממספר ב’ וגם מספר ב’ קטן מ-2. אין להשתמש באופרטור and ויש להשתמש בשלוש הוראות if לכל היותר.

num1 = float(input(‘Please input a decimal number: ‘)

num2 = float(input(‘Please input another decimal number: ‘)

if num1 > num2:

    if num2 > 5:

        print(1)

    if num2 < 2:

        print(2)

קטע קוד זה צריך להדפיס 1 אם המספר שיש במשתנה num הוא גדול מ-15, או 2 אם המספר הזה אינו גדול מ-15. בקטע זה יש שגיאה. מהי וכיצד יש לתקנה?

if num > 15: 

    print(1)

else num <= 15: 

    print(2)

תשובה: לפי הגדרתו חלק else במבנה if…else בודק את המקרה שאין מתקיים התנאי שבודקת הוראת ה-if, ואין צורך לבדוק מקרה זה במפורש. אחרי else נכתב מיד הסימן נקודתיים (אלא אם כן מופיעה אחריו הוראת if). הקוד התקין:

if num > 15: 

    print(1)

else: 

    print(2)

קטע קוד זה צריך להפחית 1 מהמספר שיש במשתנה x ולהדפיס את התוצאה, כל זה אם ורק אם הערך שיש ב-x לפני ההפחתה אינו 3. בקטע זה יש שגיאה. מהי וכיצד יש לתקנה?

if x == 3:

    x = x + 1

    else:

    x = x – 1

תשובה: ההוראה else צריכה להיות מיושרת אנכית כמו הוראת ה-if שהיא נספחת אליה. הקוד התקין:

if x == 3:

    x = x + 1

else:

     x = x – 1

קטע קוד זה צריך להדפיס את המחרוזת ‘white’ אם הערך שיש במשתנה s אינו המחרוזת ‘black’. בקטע יש שגיאה. מהי וכיצד יש לתקנה?

if s == ‘black’:

    print(s)

else:

print(‘white’)

תשובה: ההוראות המתבצעות בגוף מבנה else וכתובות מתחת לשורה שהיא כתובה בה צריכות להיות מוזזות ימינה לעומת השורה הזאת ומיושרות אנכית כמו ההוראות בגוף מבנה ה-if. כאן הוראת ההדפסה של המחרוזת ‘white’ מיושרת אנכית כמו ההוראה else. הקוד התקין:

if s == ‘black’:

    print(s)

else:

print(‘white’)

קטע קוד זה צריך להדפיס את המחרוזת ‘bigger’ אם המספר שיש במשתנה num אינו גדול מ-5.2. בקטע יש שגיאה. מהי וכיצד יש לתקנה?

if not (num > -5.2):

     print(‘equal or smaller’)

else

     print(‘bigger’)

תשובה: הסימן נקודתיים חסר לאחר המילה else.  הקוד התקין:

if not (num > -5.2) :

     print(‘equal or smaller’)

else

     print(‘bigger’)

קטע קוד זה צריך לזהות שהמספר שיש במשתנה num גדול מ-10 וגם אי-זוגי, ולהודיע על כך. בקטע יש שגיאה. מהי וכיצד יש לתקנה?

if (num > 10):

    if (num % 2 == 0):

        print(‘bigger than 10 and even’)

else:

    print(‘bigger than 10 and odd’)

תשובה: כדי שהקוד יהיה תקין חלק ה-else צריך להיות מיושר אנכית כמו הוראת ה-if הפנימית. במצבו הנוכחי חלק ה-else מיושר אנכית כמו הוראת ה-if החיצונית ולכן בודק את המקרה שהערך המוצב במשתנה num הוא קטן מ-10 או שווה ל-10. גם ההוראה בגוף חלק ה-else צריכה להיות מוזזת ימינה ולהיות מיושרת אנכית כמו ההוראות בגוף חלק ה-if. הקוד התקין: 

if (num > 10):

    if (num % 2 == 0):

        print(‘bigger than 10 and even’)

    else:

        print(‘bigger than 10 and odd’)

השלימו את התנאי בקוד הזה.

name = input(“First name of former US president: ‘)

if ():

     print(‘Correct!’)

else:

     print(‘Wrong. The correct answer is:’, name)

name = input(‘First name of US’ former president: ‘)

if (name == ‘Donald’):

     print(‘Correct!’)

else:

     print(‘Wrong. The correct answer is:’, name)

השלימו את התנאי בקוד הזה באופן שהן המחרוזת ‘Donald’ הן המחרוזת ‘Trump’ ייחשבו תשובה נכונה.

name = input(‘Name of former US president: ‘)

if ():

     print(‘Correct!’)

else:

     print(‘Wrong. The correct answer is:’, name)

name = input(‘Name of US’ former president: ‘)

if (name == ‘Donald’) or (name == ‘Trump’):

     print(‘Correct!’)

else:

     print(‘Wrong. The correct answer is:’, name)

הרצנו את הקוד הזה והמשתמשת הכניסה את הציון 80. מה הדפיס קטע הקוד?

grade = int(input(‘Please enter grade: ‘))

if grade >=80:

     print(‘Excellent.’)

else:

     print(‘Moed B.’)

print(‘The End.’)

Excellent.

The End.

הרצנו קטע קוד זה. מה הודפס? 

averageGrade = 80

finalGrade = 90

if averageGrade >= 80:

     finalGrade = finalGrade + 2

if finalGrade > 90:

      print(‘Bonus awarded.’)

else:

    print(‘No bonus.’)

Bonus awarded.

הרצנו קטע קוד זה. מה הודפס? 

salary = 15000

if (salary == 10000):

     print(‘Bonus is 500.’)

     print(‘Raise is 1500.’)

if (salary > 5000):

     print(‘Bonus is 300.’)

     print(‘Raise is 1000.’)

else:

     print(‘Raise is 700.’)

Bonus is 300.

Raise is 1000.

הרצנו קטע קוד זה והודפס המספר 2. תנו דוגמה לקלט אפשרי לתכנית. 

ch1 = input()

ch2 = input()

ch3 = input()

if ch1 != ch2 or ch1 == ch3:

        if ch1 == ch3:

                print(1)

        else:

                print(2)

else:

        print(3)

תשובה: ch1 == 1, ch2 == 2, ch3 == 3.

הרצנו קטע קוד זה ובתור קלט הוכנס המספר 7.3. מה הודפס?

print(‘Enter final grade: ‘)

grade = float(input());

if (grade <= 9.0):

        newGrade = grade + 0.5

        print(‘Your grade is: ‘, newGrade)

else:

        print(‘Your grade is: ‘, grade)

Your grade is:  7.8

נכתוב תכנית המדמה הטלת קוביה. על פיאות הקוביה נכתבו המספרים 1 עד 6. אם המספר שהתקבל הוא 6 התכנית תודיע על כך. אם המספר שהתקבל אינו 6 התכנית תודיע על כך. להלן מימוש חסר של התכנית. השלימוהו.

rndNum =

if ():

     print(‘Cube number is 6.’)

     print(‘Cube number is not 6.’)

import random

rndNum = random.randint(1, 6)

if (rndNum == 6):

     print(‘Cube number is 6.’)

else:

     print(‘Cube number is not 6.’)

שכתבו קוד זה באופן שיהיה ערוך לפי המבנה if…elif…else. 

if (price > 200):
    print(‘Sorry, I cannnot afford it.’)
else:
    if (price > 150):
        print(‘I will reconsider.’)
    else:
        print(‘I shall pay.’)

if (price > 200):
    print(‘Sorry, I cannot afford it.’)
elif (price > 150):
    print(‘I will reconsider.’)
else:
    print(‘I shall pay.’)