ברוכים הבאים לשבוע השני של הקורס!
אנחנו פותחים את השבוע בנושא מעניין; הראשון שיאפשר לנו ליצור תוכניות מורכבות שמקבלות החלטות.
נתחיל בתזכורת בנוגע לביטויים בוליאניים, שאותם הכרנו בשבוע שעבר:
In [ ]:
print("hello" == "Hello")
In [ ]:
print(1 > 2)
In [ ]:
print(2 * 3 == 1 or 1 + 1 == 2)
In [ ]:
print('a' + 'b' == 'ab' and not 1 + 2 == 3)
אם כן, ביטויים בוליאניים הם ביטויים שתוצאתם היא True
או False
.
לעיתים קרובות ביטויים אלו יכללו אופרטורים לוגיים, כמו and
, or
ו־not
.
Two roads diverged in a yellow wood,
And sorry I could not travel both
נקפוץ למים ללא הקדמה. הנה קוד מעניין:
In [ ]:
user_age = int(input("Please enter your age: "))
if user_age < 18:
print("You are not allowed to enter :(")
print("This is the end of the program.")
מה קטע הקוד הזה יעשה?
את השורה הראשונה אנחנו כבר יודעים לקרוא: קלטנו את גיל המשתמש, המרנו אותו למספר שלם, ועכשיו המשתנה user_age
מצביע עליו.
בשורה השנייה הרוב כבר מוכר: נבדוק האם הגיל קטן מ־18. אבל מה זה ה־if
הזה?
כשאנחנו מעוניינים להגיד לפייתון לבצע רצף של שורות רק בתנאי שיקרה משהו מסוים, נשתמש במילת המפתח if
.
נחלק את המבנה של תנאי בפייתון ל־2 חלקים:
if
.בדוגמאות הבאות, התנאי מופיע כך, והפעולות שיקרו בעקבותיו מופיעות כך.
ניסוח של תנאי אמור להיראות ככה:
if התנאי שלכם, ביטוי בוליאני:
מה שאתם רוצים לעשות (גוף התנאי)
נסביר:
if
. אין פה מה לשנות.if
, יבוא ביטוי בוליאני. אם תוצאתו תהיה True, מה שנמצא בגוף התנאי יתבצע. אם False, פייתון תתעלם לגמרי מגוף התנאי.if
, נצטרך להוסיף לפניו הזחה.if
שנמצא לפניה.if
. הקוד בשורה ירוץ כחלק מהתנאי כל עוד היא מוזחת ונמצאת ישירות אחרי ה־if
, או אחרי שורות מוזחות אחרות ישירות מתחת ל־if
.
In [ ]:
user_fullname = input('Please enter your full name: ')
is_temple_open = False
if 'Cohen' in user_fullname:
print('You may enter the temple!')
is_temple_open = True
print('')
print('Thank you, ' + user_fullname + '.')
print('Is the temple open?: ' + str(is_temple_open))
נסו להבין מה הקוד למעלה אומר. הריצו ובדקו שעניתם נכונה לפני שתתקדמו הלאה.
חשוב!
פתרו לפני שתמשיכו!
דוגמה אחרת:
In [ ]:
age = int(input('Please enter your age: '))
allowed_to_enter = False
if age >= 18:
allowed_to_enter = True
if age < 18:
print('Please wait until midnight before answering the following question:')
answer_for_birthday_is_today = input('Is it your birthday today? [yes/no]: ')
if age == 17 and answer_for_birthday_is_today == 'yes':
print('Happy birthday! You are 18 now.')
age = age + 1
allowed_to_enter = True
if allowed_to_enter:
print('Welcome!')
if not allowed_to_enter:
print('Sorry... Byebye')
בשורה הראשונה, ביקשנו את הגיל של המשתמש וגרמנו למשתנה age להצביע אליו.
בשורה השנייה, ביקשנו ש־allowed_to_enter יהיה False
. זה קצת מרושע ומיזנטרופי, אבל אנחנו מעדיפים כברירת מחדל לא להכניס אף אחד למסיבה שלנו.
בשלב הבא בדקנו האם age (גיל המשתמש שלנו) הוא לפחות 18, ואם כן הגדרנו שיוכל להכנס למסיבה. עד כאן זה קל.
עכשיו נתאר מה תהיה ההתרחשות אם הגיל נמוך מ־18.
אנחנו מחכים לחצות, ומבקשים לדעת אם יום ההולדת של המשתמש הוא היום.
מכאן אנחנו פותחים תנאי נוסף, בתוך התנאי הקודם. זה אומר שרק אם age אכן קטן מ־18 הבדיקה הבאה תקרה (בגלל שאנחנו עדיין בתוך התנאי age < 18
, ראו את ההזחה):
אם המשתמש הכניס שהיום יום ההולדת שלו, והגיל שלו היה עד עכשיו 17, אז עכשיו הוא טכנית בן 18 ויכול להיכנס למסיבה שלנו. נגדיל את הגיל שלו ונרשה לו להיכנס.
עכשיו נשאר רק להתייחס למשתנה allowed_to_enter שהגדרנו למעלה, לבדוק האם למשתמש מותר להכנס או לא, ולהדפיס הודעה מתאימה. יופי!
תרגול:
נסו לערוך את הקוד שלמעלה, כך שישאל אם זהו יום ההולדת של המשתמש רק אם הוא בן 17.
בדקו שהקוד עדיין עובד כמצופה.
טעות נפוצה היא לשכוח את הנקודתיים אחרי ה־if
.
אתם בטח אומרים לעצמכם שלא תעשו את זה, אבל אתם תעשו את זה, סמכו עליי.
פייתון זורקת הודעות שגיאה מעצבנות ולא אינדיקטיביות כשזה קורה. נסו להיזכר באזהרה הזו 😊
שם המשתמש שלי לבנק הוא wrong, והסיסמה שלי היא ads sports.
קבלו מהמשתמש שם משתמש וסיסמה, והדפיסו לו הודעה יפה אם הצליח להתחבר.
תקנו את הקוד הבא כך שירוץ בהצלחה.
כתבו לעצמכם את התיקונים שביצעתם כדי להימנע מטעויות דומות אצלכם בעתיד!
In [ ]:
a = 3
b = 4
c = 5
if a ** 2 + b ** 2 == c ** 2
print("This line should run for 3, 4, 5 but not for 4, 5, 6")
print("This line should run anyway")