הפרק הקודם:
פייתון 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 - כותבים בסוף, אם שום תנאי לא מתקיים אז הקוד הזה ייתבצע.
תרגיל רמזור
השלימו את הקטע קוד כך שבהתאם למשתנה trafficLight תגדירו את carAction
כאשר הרמזור יהיה בצבע מסוים, עלינו להביא למכונית את הפעולה הנכונה:
red->breakred-yellow->accelerategreen->accelerateyellow->break
בכל מקרה אחר, למשל שהרמזור מקולקל - אנחנו רוצים שהמכונית תעצור!
תנאים על בוליאנים
התנאים if ו elif מקבלים ביטויים או משתנים בוליאנים.
ניתן לבצע תנאים על משתנים בוליאנים מאוד בקלות:
1 | isItDarkInHere = False |
אם אנחנו נותנים שמות טובים למשתנים בוליאנים - הקוד שלנו הופך כמעט לשפה האנגלית
ביטויים בוליאנים
למדנו ב- בוליאנים - Booleans
שניתן להוסיף וגם, או או ניגוד למשתנים בוליאנים.
מכיוון ש-if מקבל בוליאני ניתן גם לתנאים לשים את אותם הצירופים!
למשל:
1 | isLightOn = True |
דוגמא 2:
1 | isGreen = True |
שוב פעם אני רוצה להדגיש - תראו כמה זה דומה לאנגלית!
תנאים על מספרים
קיימים מספר תנאים למספרים שניתן לבדוק,
בדרך כלל נרצה לבדוק אם מספרים שווים, מספר גדול או קטן ממספר אחר או בטווח מסוים.
מי שלמד מתמטיקה יודע שיש לנו גדול מ, קטן מ, שווה ל….
בפייתון התחביר נראה קצת שונה אך זה מאוד דומה למתמטיקה:
1 | minimumAge = 18 |
תרגיל - גישה למערכת
הקוד הבא מתאר קוד גישה למערכת, בהינתן הגיל המתאים המערכת תיתן תפקיד למשתמש.
כל שאר המערכת תעבוד לפי התפקיד הזה.
- כאשר המשתמש מעל גיל 18 יוקנה לו התפקיד
adult. - בין 13 כולל ל18 לא כולל אנחנו נגדיר אותו
juvenile. - מתחת לגיל 13 נגדיר אותו
denied.
תנאים על מחרוזות
במחרוזות נלמד איך לבדוק אם מחרוזת נמצאת במחרוזת אחרת,
וגם נלמד איך לבדוק אורך מחרוזת.
לבדוק אם מחרוזת נמצאת במחרוזת שנייה
בעזרת in בתנאי בין שני מחרוזות ניתן לבדוק אם מחרוזת אחת נמצאת במחרוזת השנייה.
נבדוק אם השם נמצא בתוך המשפט:
1 | myName = 'Ilya' |
לבדוק אורך מחרוזת
בשביל לקבל אורך מחרוזת נוכל לבדוק אותה עם len(str).
נלמד בהמשך מה זה אומר בדיוק.
במקום ה-str אנחנו נשים את המחרוזת שלנו:
1 | coolNickName = "Lily" |
תרגיל - בדיקת שם משתמש
למערכת נוסיף קוד אשר ייבדוק אם שם המשתמש תקין.
במקרים הבאים יש להחזיר את ה-result המתאים:
- אם קיים רווח - יש לשים בתוצאה
space. - אם קטן מ-3 תווים - יש לשים בתוצאה
short. - במקרים אחרים יש לשים בתוצאה
valid.
סדר בדיקת תנאים
פייתון בודק את התנאים משמאל לימין ולכן בתנאים משושרים כאלו כדאי להוסיף סוגריים כדי לתעדף את הבדיקה הנכונה.
דוגמא א
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 | if trafficLight == 'red': |
כפי שלמדנו המקרה הראשון נשתמש ב-if
לכל מקרה נוסף נשתמש ב-elif.
ו”בכל מקרה אחר” נשתמש ב-else.
ככה שלא משנה מה יהיה הערך של המשתנה כשנגיע לסעיף האחרון,
תמיד נגרום למכונית לעצור.
1 | age = 18 |
התנאים פה הם מאוד פשוטים, וניתן להשתמש פה בelse כי אנחנו מגדירים בברור מה קורה אם המצבים האחרים לא מתקיימים.
1 | result = '' |
יודפס Else.
קודם כל ייבדק הצד השמאלי,
לאחר מכן הסוגריים ייפתרו כי צריך לפתור את ה-or.
לאחר מכן הצד השמאלי של ה-and הוא False ולכן הצד הימני שלו לא ייבדק!
מה שסימנתי ב-X אדום בתמונה.
מוזמנים לדלג על הגדרת מפה.
זהו נושא מתקדם שייחזור רק בפרק 9.
לפרק הבא:
פייתון 4 - קלט ופלטSwitcher - הגדרת מפה
ניתן לדלג על הקטע הזה במידה ולא מבינים אותו, במאמרים הבאים עוד נלמד על זה לעומק.
נניח אנחנו רוצים לתרגם מספר יום של שבוע לשם שלו,
כיצד אפשר לעשות את זה?
אפשרות א:
ככה אנחנו צריכים לבצע תנאי על כל יום, ניתן לקצר את זה לצורה פשוטה יותר.
אפשרות ב:
נשתמש במשהו שנקרא מפה, אנחנו נלמד בהמשך באופן מלא יותר על סוג המשתנה הזה.
ככה זה נראה:
בעצם קישרנו בין מספר לערך המחרוזת שלו, וכשאנחנו קוראים ל-get אזי לוקחים את הערך לפי המספר שלנו.
אם day הוא 2 אז נקבל:
‘יום שני’.
הפרק הבא:
פייתון 4 - קלט ופלט