הפרק הקודם:
פייתון 2 - משתניםמה נלמד במאמר
- נסביר על כיצד קוד נטען ורץ
- תנאים, מה הם וכיצד לכתוב אותם
- שימושים פרקטיים לתנאים
- if, elif, else, switcher.
כיצד קוד רץ
כדי להבין איך לכתוב קוד - קודם צריך להבין איך הקוד רץ בפועל.
בפרק הקודם הגדרנו משתנים אחד אחרי השני.
שום קטע קוד לא רץ בו זמנית, לפחות לא כרגע.
קוד פייתון מריץ שורה אחרי שורה - באופן סדרתי.
מה הבעיה בקוד הבא?
1 | first = 1 |
תשובה, יש ללחוץ על הטקסט על מנת לראות:
מכיוון שהקטע קוד רץ בצורה סדרתית אנחנו ניסינו להשתמש במשתנה שעוד לא הוגדר
ורק יוגדר בשורת הקוד אחריו!
לכן קטע הקוד המתוקן ייראה כך:
1 | first = 1 |
אז אם כן יש לזכור לעת עתה שהקוד שלנו רץ בצורה סדרתית ויש חשיבות לסדר הדברים!
תנאי
תנאי זו בעצם שאלה -
אם משהו קורה או קרה בעבר אז…
ואם משהו אחר קורה אז…
אחרת תעשה …
ככה אנחנו יכולים לשאול את הקוד שאלות ולצפות לתשובה.
פסודו קוד
פסודו קוד הוא קוד שכתוב בשפה מאוד כללית כולל עברית או אנגלית.
המטרה שלו הוא לתאר איך הקוד שלנו ייראה ברגע שנכתוב אותו בשפה מסוימת כמו - פייתון.
נשתמש בפסודו קוד כדי לתאר כיצד הדרך פתרון שלנו עובדת.
נתאר בפסודו קוד תנאי לצבע תפוח:
1 | תפוח = אדום |
אני אשתמש במושגי פסודו-קוד ואציג דרכי פתרון לא רק בעזרת קוד ולכן זה חשוב להכיר את המושג.
תנאים בפייתון
1 | if condition: |
התחביר של תנאי הוא בעזרת if
ואז ביטוי בוליאני - ביטוי שהתוצאה שלו הוא True
או False
.
ז”א ביטוי שיגיד לנו נכון או לא נכון.
הזחות - Tab או Space
בתחביר של פייתון יש לשים נקודותיים (בכחול) ורווחים או טאב בשורה הבאה אחריו - זה נקרא הזחה.
באנגלית - Indentation.
תזכרו את זה כי זה חוזר על עצמו.
כדי שקוד ייחשב תקין צריך הזחה תקינה - 4 רווחים או טאב אחד,
חייבים להיות גם עקבי, אי אפשר שורה אחת רווחים ושורה אחרת טאבים.
בשביל לשים Tab ניתן להשתמש בכפתור במקלדת:
הרבה אנשים כולל אני משתמשים ב-Tab ולא רווחים.
המילה השמורה pass
pass
היא מילה שמורה בפייתון אשר אומרת לקוד לא לעשות כלום, אז למה אנחנו צריכים את זה?
פייתון לא מאפשר לשים שורה ריקה אחרת זה יהיה תחביר לא נכון.
לכן שמים pass
על מנת שפייתון יזהה שאנחנו לא רוצים לעשות כלום.
אז יש לנו 3 מילים להגדיר תנאיif
- אם תנאי מתקיים אזי…else if
- אם התנאי הראשון לא מתקיים אז נוכל להגדיר תנאי אחר כלשהוelse
- כותבים בסוף, אם שום תנאי לא מתקיים אז הקוד הזה ייתבצע.
תנאים על בוליאנים
התנאים if
ו elif
מקבלים ביטויים או משתנים בוליאנים.
ניתן לבצע תנאים על משתנים בוליאנים מאוד בקלות:
1 | isItDarkInHere = False |
אם אנחנו נותנים שמות טובים למשתנים בוליאנים - הקוד שלנו הופך כמעט לשפה האנגלית
ביטויים בוליאנים
למדנו ב- בוליאנים - Booleans
שניתן להוסיף וגם, או או ניגוד למשתנים בוליאנים.
מכיוון ש-if
מקבל בוליאני ניתן גם לתנאים לשים את אותם הצירופים!
למשל:
1 | isLightOn = True |
דוגמא 2:
1 | isGreen = True |
שוב פעם אני רוצה להדגיש - תראו כמה זה דומה לאנגלית!
תנאים על מספרים
קיימים מספר תנאים למספרים שניתן לבדוק,
בדרך כלל נרצה לבדוק אם מספרים שווים, מספר גדול או קטן ממספר אחר או בטווח מסוים.
מי שלמד מתמטיקה יודע שיש לנו גדול מ, קטן מ, שווה ל….
בפייתון התחביר נראה קצת שונה אך זה מאוד דומה למתמטיקה:
1 | minimumAge = 18 |
תנאים על מחרוזות
במחרוזות נלמד איך לבדוק אם מחרוזת נמצאת במחרוזת אחרת,
וגם נלמד איך לבדוק אורך מחרוזת.
לבדוק אם מחרוזת נמצאת במחרוזת שנייה
בעזרת in
בתנאי בין שני מחרוזות ניתן לבדוק אם מחרוזת אחת נמצאת במחרוזת השנייה.
נבדוק אם השם נמצא בתוך המשפט:
1 | myName = 'Ilya' |
לבדוק אורך מחרוזת
בשביל לקבל אורך מחרוזת נוכל לבדוק אותה עם len(str)
.
נלמד בהמשך מה זה אומר בדיוק.
במקום ה-str
אנחנו נשים את המחרוזת שלנו:
1 | coolNickName = "Lily" |
סדר בדיקת תנאים
פייתון בודק את התנאים משמאל לימין ולכן בתנאים משושרים כאלו כדאי להוסיף סוגריים כדי לתעדף את הבדיקה הנכונה.
דוגמא א
1 | if True or False and True: |
מכיוון שיש לנו or
פייתון יבדוק רק את הצד השמאלי וייראה שהוא נכון.
ולכן הוא לא יילך לבדוק את השאר!
לפי הטבלה שלמדנו כל דבר שהוא או עם נכון הוא תמיד יהיה נכון.
דוגמא ב
1 | if False and True: |
כאן ה-True לא ייבדק כי כל דבר שיש לו וגם עם False הוא תמיד יהיה לא נכון!
דוגמא ג
1 | if (True or False) and True: |
כמו הדוגמא הראשונה אך כאן הוספנו סוגריים, בעצם עכשיו הor לא יבדוק את הצד הימני כי הוא True תמיד.
ומחוץ לסוגריים זה ייבדוק כי זה and והוא צריך להיבדק כדי לדעת מה תוצאת הביטוי הבוליאני.
להלן תרשים שמציג מה נבדק ומה לא, שימו לב בדוגמא השלישית לסוגריים.
תרגילים
1.
למערכת רכב אוטומטי אנחנו צריכים לכתוב קטע קוד אשר מטפל ברמזור,
ויש לכתוב איזו פעולה תתבצע עבור כל צבע ברמזור.
האופציות של הרמזור יוגדרו כמחרוזת באותיות לטיניות קטנות:
“red”, “red-yellow”, “green”, “yellow”.
והאופציות לפעולה יהיו גם כן באותו פורמט:
“accelerate” , “break”
השלימו את הקטע קוד כך שבהתאם למשתנה trafficLight תגדירו את carAction והדפיסו אותו בסוף קטע הקוד.
1 | trafficLight = 'red' |
2.
לאתר אינטרנט רוצים להגדיר משתמש באיזה תנאי גיל הוא עומד.
תכנים מסוימים קיימים לילדים, לנוער ולמבוגרים - 18 ומעלה.
לכל משתמש יש ערך שנקרא “accessRole”.
הערכים יכולים להיות:
“kids”, “juvenile”, “adult”.
מתחת לגיל 13 יש להגדיר kids.
בין 13 ל18 יש להגדיר juvenile.
ו18 ומעלה יש להגדיר adult.
1 | age = 18 |
תיצרו מחרוזת ומספר כמשתנים.
בדקו בתנאי אם אורך המחרוזת גדולה יותר מהמספר אז הוא ידפיס “Your String is too large - Exiting”
אם הוא שווה בדיוק למספר הוא ידפיס “Your String is in the correct length”
אחרת הוא ידפיס “String invalid - Exiting”מבלי להריץ את הקוד - תנסו להגיע למה מודפס
1
2
3
4if False or (True and (5 == 4)) and ('B' in 'ABCDE'):
print("Correct")
else:
print("Else")
1 | trafficLight = 'red' |
עבור כל מצב - באנגלית state - אנחנו רוצים לבצע פעולה כלשהו.
הפעולה שאנחנו עושים היא לתת ערך למשתנה carAction.
ניתן להשתמש בelse במקום elif בסוף,
אך הסיבה שאנחנו משתמשים בזה זה כדי להגדיר תנאי מדויק,
אם במצב מסוים יגדירו מצב חדש לרמזור, יכול לקרות מצב שבו נבצע פעולה שלא מתאימה למצב שלנו.
לכן בקוד שבודק מצב ובהתאם עושה משהו, יש להגדיר תנאי כללי שקורה, ואם לא חושבים על זה מההתחלה אז באגים חמורים יכולים לקרות כתוצאה מכך.
1 | age = 18 |
התנאים פה הם מאוד פשוטים, וניתן להשתמש פה בelse כי אנחנו מגדירים בברור מה קורה אם המצבים האחרים לא מתקיימים.
תיצרו מחרוזת ומספר כמשתנים.
בדקו בתנאי אם אורך המחרוזת גדולה יותר מהמספר אז הוא ידפיס “Your String is too large - Exiting”
אם הוא שווה בדיוק למספר הוא ידפיס “Your String is in the correct length”
אחרת הוא ידפיס “String invalid - Exiting”
1 | myString = 'Hello World' |
יודפס Else.
קודם כל ייבדק הצד השמאלי,
לאחר מכן הסוגריים ייפתרו כי צריך לפתור את ה-or
.
לאחר מכן הצד השמאלי של ה-and
הוא False
ולכן הצד הימני שלו לא ייבדק!
מה שסימנתי ב-X אדום בתמונה.
מוזמנים לדלג על הגדרת מפה.
זהו נושא מתקדם שייחזור רק בפרק 9.
לפרק הבא:
פייתון 4 - קלט ופלטSwitcher - הגדרת מפה
ניתן לדלג על הקטע הזה במידה ולא מבינים אותו, במאמרים הבאים עוד נלמד על זה לעומק.
נניח אנחנו רוצים לתרגם מספר יום של שבוע לשם שלו,
כיצד אפשר לעשות את זה?
אפשרות א:
1 | day = 2 |
ככה אנחנו צריכים לבצע תנאי על כל יום, ניתן לקצר את זה לצורה פשוטה יותר.
אפשרות ב:
נשתמש במשהו שנקרא מפה, אנחנו נלמד בהמשך באופן מלא יותר על סוג המשתנה הזה.
ככה זה נראה:
1 | day = 2 |
בעצם קישרנו בין מספר לערך המחרוזת שלו, וכשאנחנו קוראים ל-get אזי לוקחים את הערך לפי המספר שלנו.
אם day הוא 2 אז נקבל:
‘יום שני’.
הפרק הבא:
פייתון 4 - קלט ופלט