2.2 לולאות הרצאה
לולאות¶
- המון פעמים בתכנות אנחנו רוצים להריץ איזשהו קטע קוד מספר פעמים.
- מה אם נרצה להדפיס 10 פעמים "hello"?
- אפשר להשתמש בלולאות כדי לכתוב את הקוד הזה בצורה יותר טובה
לולאת while:¶
- לולאה מסוג
whileהיא מבנה קוד בתכנות שמבצע בלוק של קוד שוב ושוב כל עוד תנאי מסוים מתקיים. הלולאה בודקת את התנאי לפני כל ביצוע של הבלוק, ואם התנאי הוא אמת (True), היא ממשיכה לרוץ. ברגע שהתנאי הופך לשקר (False), הלולאה נפסקת. הנה כמה דוגמאות: - (מומלץ להריץ את קטעי הקוד הבאים בשביל לראות את התוצאה).
- בדוגמה זו הקוד ידפיס את מה שרשום בתוך ה-print אין סוף פעמים.
- הסיבה לכך היא ש10 תמיד יהיה גדול מ5 בכל מצב ולכן התנאי תמיד אמיתי ולעולם לא יהיה שקר. במילים אחרות, אין שום דבר שיגרום ללולאה לעצור.
- בדוגמה זו הקוד ידפיס את הספרות 0 עד 9.
- בואו נסביר למה בכך שנחלק את מה שהמחשב עושה שלב שלב:
1. ראשית, המחשב מקבל את את הפרמטר count = 0 ובעצם "שומר אותו" בזיכרון שלו.
2. לאחר מכן מתחילה הלולאה המציבה את התנאי הבא: while count != 10.
תנאי זה אומר שכל עוד count לא שווה ל10 הלולאה מתקיימת, כלומר, True.
3. בשלב הבא נאמר למחשב להדפיס את קאונט- print(count). אבל הלולאה עוד לא נגמרה.
4. לבסוף, המחשב מתבקש, לאחר שהוא מדפיס את count, להוסיף 1 לכמה ש-count שווה. ובכך הערך של count עולה ב-1 כל פעם שהלולאה רצה עד שcount יהיה שווה ל10, דבר אשר יחזיר False ובעצם יעצור את הלולאה שם ולא ידפיס את 10.
- לולאה זו, בדומה לדוגצה הראשונה, תדפיס infinite loop אין סוף פעמים.
- אין יותר מידי מה הסביר בלולאה זו, מה שקורה כאן זה בעצם כאשר נרשום while True הלולאה תמיד תחזיר True ולכן תרוץ אין סוף פעמים.
לולאת for:¶
- לולאת
forהיא מבנה קוד בתכנות שמשמש לחזרה על סדרה של ערכים. ב-Python, לולאתforמשמשת לרוב לעבור על אוסף של איברים (כמו רשימה, מחרוזת, טווח מספרים וכו') ולבצע פעולה על כל אחד מהם.
- בדוגמה זו נוכל לראות רשימה בשם numbers ולולאת for אשר מבצעת את הפעולה:
for number in numbers
פעולה זו אומרת כך: עובר כל number (כלומר עבור כל איבר שיהיה, לא משנה אם זה רשימת מספרין או לא) ב- numbers, תדפיס את number. מה שזה בעצם עושה זה לעבור על איבר ברשימה numbers ומדפיס אותו.
- מה הוא איטרטור (iterator)? כל datatype שאנחנו יכולים לעבור עליו באמצעות לולאות: רשימה, מחרוזת, טאפל, מילון, סט ועוד.
-
דוגמאות:
-
עוד דוגמאות של
for: - בדוגמאות אלו אין הסברים מכיוון שהם עובדי בדיוק כמו הדוגמה למעלה, אני ממליץ לכם להריץ את הקוד ולראות בעצמכם מה הוא עושה, אך לפני זה תנסו לחזות מה הוא יעשה בשביל לראות אם באמת הבנתם.
-
רשימה של טאפלים:
-
הפונקציה המובנית
enumerate:
-
הפונקציה
splitעםfor:
-
לולאת
forעם_: - תזכורת: התו
_אינו עושה משהו ספציפי, זהו רק הסימון ללתו כללי, הקוד יעבוד בדיוק אותו דבר אם היינו רושמים x במקום _ .
```python
for _ in range(2):
print("hello")
- לעבור על מילון עם הפונקציה `items`: - הפונקציה `items()` היא מתודה המשמשת על מילונים ב-Python. היא מחזירה רשימה של זוגות מפתח-ערך (key-value pairs) הנמצאים במילון. כל זוג מיוצג כ-tuple, כאשר האלמנט הראשון הוא המפתח והשני הוא הערך. ```python # Interating dictionary.items dictionary = { "hello": "shalom", "thanks": "toda", "boy": "ben" } dictionary.items() for x, y in dictionary.items(): print(x, y) # will print: hello shalom # thanks toda # boy ben
סינטקס: break ו - continue:¶
- אנחנו יכולים לעצור לולאה באמצע עם
break. -
הפקודה
breakהיא כלי בתכנות המשמש ליציאה מיידית מלולאה (כמוforאוwhile). כאשר הפקודהbreakמבוצעת בתוך לולאה, היא גורמת ללולאה להסתיים באופן מיידי, והביצוע של התוכנית ממשיך לאחר הלולאה, כלומר, המחשב מפסיק לקרוא את הלולאה.
-
אנחנו יכולים לדלג על איטרציה של לולאה עם
continue. -
הפקודה
continueמשמשת בתוך לולאות (כמוforאוwhile) כדי לדלג על ההמשך של האיטרציה הנוכחית ולעבור ישירות לאיטרציה הבאה. כלומר, כאשר הפקודהcontinueמבוצעת, הקוד שלאחריה בתוך גוף הלולאה לא יורץ, והלולאה תמשיך לאיטרציה הבאה שלה.
-
שימו לב: יש פעמים ששימוש ב
breakו -continueיכול להפוך את הקוד שלך לפחות קריא ולא צפוי, בדרך כלל אנחנו לא נשתמש בkeywords הללו.
סקופ - scope¶
- בדומה לתנאים, כאשר אנחנו מגדירים משתנים בתוך לולאה (בבלוק של קוד) אנחנו לא נוכל לגשת אליהם מחוץ ללולאה (לבלוק של קוד), בעצם הסקופ של המשתנים שאנחנו מגדירים בלולאות, הוא רק בלולאות - בדיוק כמו בתנאים.
- הקוד הבא יחזיר שגיאה, בגלל שאנחנו מנסים לגשת למשתנה x שמוגדר בבלוק של קוד שנמצא בתוך הלולאה - הסקופ של המשתנה x הוא רק בלולאה. אז איי אפשר להשתמש בו מחוץ ללולאה.
- שימו לב שגם יש משהו הגיוני בדבר, אם אנחנו מגדירים משתנה בתוך בלוק של קוד, אם זה לולאה או תנאי אין לנו שום סיבה שהוא יצא מהתנאי או מהלולאה, לא אמורה להיות לו משמעות מחוץ לבלוק.
- אנחנו נפגוש את זה עוד המון בהמשך.