January 8, 2021

פייתון 3 - תנאים


הפרק הקודם:

פייתון 2 - משתנים

מה נלמד במאמר

  • נסביר על כיצד קוד נטען ורץ
  • תנאים, מה הם וכיצד לכתוב אותם
  • שימושים פרקטיים לתנאים
  • if, elif, else, switcher.

כיצד קוד רץ

כדי להבין איך לכתוב קוד - קודם צריך להבין איך הקוד רץ בפועל.

בפרק הקודם הגדרנו משתנים אחד אחרי השני.
שום קטע קוד לא רץ בו זמנית, לפחות לא כרגע.

קוד פייתון מריץ שורה אחרי שורה - באופן סדרתי.
מה הבעיה בקוד הבא?

1
2
3
4
5
first = 1
print(second)
second = 2
print(third)
third = 3

תשובה, יש ללחוץ על הטקסט על מנת לראות:

אז אם כן יש לזכור לעת עתה שהקוד שלנו רץ בצורה סדרתית ויש חשיבות לסדר הדברים!

תנאי

תנאי זו בעצם שאלה -
אם משהו קורה או קרה בעבר אז…
ואם משהו אחר קורה אז…
אחרת תעשה …

ככה אנחנו יכולים לשאול את הקוד שאלות ולצפות לתשובה.

פסודו קוד

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

נשתמש בפסודו קוד כדי לתאר כיצד הדרך פתרון שלנו עובדת.

נתאר בפסודו קוד תנאי לצבע תפוח:

1
2
3
תפוח = אדום  
אם תפוח הוא ירוק, תדפיס למסך "התפוח הוא ירוק"
אחרת, תדפיס למסך "התפוח הוא אדום".

אני אשתמש במושגי פסודו-קוד ואציג דרכי פתרון לא רק בעזרת קוד ולכן זה חשוב להכיר את המושג.

תנאים בפייתון

1
2
3
4
5
6
if condition:
pass
elif condition2:
pass
else:
pass

התחביר של תנאי הוא בעזרת if ואז ביטוי בוליאני - ביטוי שהתוצאה שלו הוא True או False.
ז”א ביטוי שיגיד לנו נכון או לא נכון.

הזחות - Tab או Space

בתחביר של פייתון יש לשים נקודותיים (בכחול) ורווחים או טאב בשורה הבאה אחריו - זה נקרא הזחה.
באנגלית - Indentation.
תזכרו את זה כי זה חוזר על עצמו.
כדי שקוד ייחשב תקין צריך הזחה תקינה - 4 רווחים או טאב אחד,
חייבים להיות גם עקבי, אי אפשר שורה אחת רווחים ושורה אחרת טאבים.

בשביל לשים Tab ניתן להשתמש בכפתור במקלדת:

הרבה אנשים כולל אני משתמשים ב-Tab ולא רווחים.

המילה השמורה pass

pass היא מילה שמורה בפייתון אשר אומרת לקוד לא לעשות כלום, אז למה אנחנו צריכים את זה?
פייתון לא מאפשר לשים שורה ריקה אחרת זה יהיה תחביר לא נכון.
לכן שמים pass על מנת שפייתון יזהה שאנחנו לא רוצים לעשות כלום.

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

תנאים על בוליאנים

התנאים if ו elif מקבלים ביטויים או משתנים בוליאנים.
ניתן לבצע תנאים על משתנים בוליאנים מאוד בקלות:

1
2
3
4
5
6
isItDarkInHere = False

if isItDarkInHere:
print("Light turned on")
else:
print("The light is on")

אם אנחנו נותנים שמות טובים למשתנים בוליאנים - הקוד שלנו הופך כמעט לשפה האנגלית

ביטויים בוליאנים

למדנו ב- בוליאנים - Booleans
שניתן להוסיף וגם, או או ניגוד למשתנים בוליאנים.
מכיוון ש-if מקבל בוליאני ניתן גם לתנאים לשים את אותם הצירופים!
למשל:

1
2
3
4
5
6
7
8
9
isLightOn = True
isCakeOnTable = True

if isLightOn and isCakeOnTable:
print("Eating cake")
elif isLightOn and not isCakeOnTable
print("Take out cake from the fridge")
else:
print("Need to turn on the light first")

דוגמא 2:

1
2
3
4
5
6
7
8
isGreen = True
isYellow = False
isRed = True

if isGreen or isYellow:
print("We can still go!")
elif isRed:
print("Dont't go!")

שוב פעם אני רוצה להדגיש - תראו כמה זה דומה לאנגלית!

תנאים על מספרים

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
minimumAge = 18
age = 35

if age >= minimumAge:
print("You may enter!")
else:
print("You are underage, do not enter!")

a = 3
b = 2
if b < a:
print("Smaller")

c = 20
d = 50
if c * d == 1000:
print("Nice room you got there")

תנאים על מחרוזות

במחרוזות נלמד איך לבדוק אם מחרוזת נמצאת במחרוזת אחרת,
וגם נלמד איך לבדוק אורך מחרוזת.

לבדוק אם מחרוזת נמצאת במחרוזת שנייה

בעזרת in בתנאי בין שני מחרוזות ניתן לבדוק אם מחרוזת אחת נמצאת במחרוזת השנייה.

נבדוק אם השם נמצא בתוך המשפט:

1
2
3
4
5
myName = 'Ilya'
sentence = 'The brown fox jumped over the Ilya'

if myName in sentence:
print("Aha, we have an Ilya here")

לבדוק אורך מחרוזת

בשביל לקבל אורך מחרוזת נוכל לבדוק אותה עם len(str).
נלמד בהמשך מה זה אומר בדיוק.
במקום ה-str אנחנו נשים את המחרוזת שלנו:

1
2
3
4
coolNickName = "Lily"

if len(coolNickName) > 3:
print("Yeah your name is cool indeed")

סדר בדיקת תנאים

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

דוגמא א

1
2
if True or False and True:
pass

מכיוון שיש לנו or פייתון יבדוק רק את הצד השמאלי וייראה שהוא נכון.
ולכן הוא לא יילך לבדוק את השאר!
לפי הטבלה שלמדנו כל דבר שהוא או עם נכון הוא תמיד יהיה נכון.

דוגמא ב

1
2
if False and True:
pass

כאן ה-True לא ייבדק כי כל דבר שיש לו וגם עם False הוא תמיד יהיה לא נכון!

דוגמא ג

1
2
if (True or False) and True:
pass

כמו הדוגמא הראשונה אך כאן הוספנו סוגריים, בעצם עכשיו הor לא יבדוק את הצד הימני כי הוא True תמיד.
ומחוץ לסוגריים זה ייבדוק כי זה and והוא צריך להיבדק כדי לדעת מה תוצאת הביטוי הבוליאני.

להלן תרשים שמציג מה נבדק ומה לא, שימו לב בדוגמא השלישית לסוגריים.


תרגילים

1.
למערכת רכב אוטומטי אנחנו צריכים לכתוב קטע קוד אשר מטפל ברמזור,
ויש לכתוב איזו פעולה תתבצע עבור כל צבע ברמזור.
האופציות של הרמזור יוגדרו כמחרוזת באותיות לטיניות קטנות:
“red”, “red-yellow”, “green”, “yellow”.
והאופציות לפעולה יהיו גם כן באותו פורמט:
“accelerate” , “break”
השלימו את הקטע קוד כך שבהתאם למשתנה trafficLight תגדירו את carAction והדפיסו אותו בסוף קטע הקוד.

1
2
3
4
trafficLight = 'red'
carAction = ''

print(carAction)

2.
לאתר אינטרנט רוצים להגדיר משתמש באיזה תנאי גיל הוא עומד.
תכנים מסוימים קיימים לילדים, לנוער ולמבוגרים - 18 ומעלה.
לכל משתמש יש ערך שנקרא “accessRole”.
הערכים יכולים להיות:
“kids”, “juvenile”, “adult”.
מתחת לגיל 13 יש להגדיר kids.
בין 13 ל18 יש להגדיר juvenile.
ו18 ומעלה יש להגדיר adult.

1
2
3
4
age = 18
accessRole = ''

print(accessRole)
  1. תיצרו מחרוזת ומספר כמשתנים.
    בדקו בתנאי אם אורך המחרוזת גדולה יותר מהמספר אז הוא ידפיס “Your String is too large - Exiting”
    אם הוא שווה בדיוק למספר הוא ידפיס “Your String is in the correct length”
    אחרת הוא ידפיס “String invalid - Exiting”

  2. מבלי להריץ את הקוד - תנסו להגיע למה מודפס

    1
    2
    3
    4
    if False or (True and (5 == 4)) and ('B' in 'ABCDE'):
    print("Correct")
    else:
    print("Else")





מוזמנים לדלג על הגדרת מפה.
זהו נושא מתקדם שייחזור רק בפרק 9.

לפרק הבא:

פייתון 4 - קלט ופלט

Switcher - הגדרת מפה

ניתן לדלג על הקטע הזה במידה ולא מבינים אותו, במאמרים הבאים עוד נלמד על זה לעומק.

נניח אנחנו רוצים לתרגם מספר יום של שבוע לשם שלו,
כיצד אפשר לעשות את זה?

אפשרות א:

1
2
3
4
5
6
7
8
9
day = 2
prefix = 'יום'
dayName = ''
if day == 1:
dayName = prefix + " ראשון"
elif day == 2:
dayName = prefix + " שני"
# לא כתבתי הכל כדי לקצר את הקוד

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

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

1
2
3
4
5
6
7
8
9
10
11
12
day = 2
dayMap = {
1: 'ראשון',
2: 'שני',
3: 'שלישי',
4: 'רביעי',
5: 'חמישי',
6: 'שישי',
7: 'שבת'
}
dayName = 'יום ' + dayMap.get(day,'אין יום כזה')
print(dayName)

בעצם קישרנו בין מספר לערך המחרוזת שלו, וכשאנחנו קוראים ל-get אזי לוקחים את הערך לפי המספר שלנו.
אם day הוא 2 אז נקבל:
‘יום שני’.

הפרק הבא:

פייתון 4 - קלט ופלט

על הפוסט

הפוסט נכתב על ידי Ilya, רישיון על ידי CC BY-NC-ND 4.0.

שתפו את הפוסט

Email Facebook Linkedin Print

קנו לי קפה

#Software#Python