לולאה חוזרת על אותן שורות שוב ושוב, בלי לכתוב אותן הרבה פעמים. עם for ו-range קובעים כמה סיבובים יהיו, ועם while חוזרים כל עוד תנאי מתקיים. כאן עוקבים אחרי כל סיבוב בטבלת מעקב. את הרעיון פגשתם בלי קוד בחידות הלולאות, ובהמשך תשתמשו בלולאות עם רשימות ופונקציות.
בלולאה יש כותרת שמסתיימת בנקודתיים, וגוף: השורות המוזזות פנימה. הגוף רץ פעם אחת בכל סיבוב.
range(1, 5) נותן 1, 2, 3, 4. מתחילים ב-start, עוצרים לפני stop. בכל סיבוב המשתנה i מקבל את המספר הבא.
for i in range(1, 5):
print(i)
חוזרים כל עוד התנאי נכון. כשהוא נהיה לא נכון, יוצאים. חייבים לשנות משהו בגוף, אחרת הלולאה לא תיגמר.
coins = 1
while coins < 50:
coins = coins * 2
משתנה שמתחיל ב-0 לפני הלולאה, וגדל בכל סיבוב. total = total + i צובר סכום. count = count + 1 סופר סיבובים.
range(start, stop, step) לא כולל את stop. מספר הסיבובים ב-range(a, b) הוא b − a.הזיזו את המחוונים. הקוד משתנה, והמעקב מתחיל מחדש. לחצו "שורה הבאה" וראו איך i, total ו-count משתנים. הטבלה למטה מראה כל סיבוב בשורה משלו.
נסו את אלה:
אפשר לשנות את הקוד ולהריץ פייתון אמיתי. בפעם הראשונה הטעינה לוקחת כמה שניות.
רוצים 1 עד 10? צריך לכתוב 11 בתור stop.
✗ עוצר ב-9
for i in range(1, 10):✓ מגיע ל-10
for i in range(1, 11):אם total = 0 בתוך הגוף, הוא מתאפס בכל סיבוב. שימו אותו לפני הלולאה.
✗ מתאפס
for i in range(4):
total = 0
total = total + i✓ צובר
total = 0
for i in range(4):
total = total + iאם שום דבר בגוף לא משנה את התנאי, הלולאה רצה לנצח.
✗ לא נגמר
n = 1
while n < 10:
print(n)✓ נגמר
n = 1
while n < 10:
print(n)
n = n + 3אחרי הכותרת באות נקודתיים. רק שורות מוזזות שייכות לגוף. שורה בלי הזחה רצה פעם אחת, אחרי הלולאה.
✗ שגיאה
for i in range(3)
print(i)✓ תקין
for i in range(3):
print(i)במשחק יש מטבע אחד, וכל יום כמות המטבעות מוכפלת. אחרי כמה ימים יהיו לפחות 100 מטבעות? לא יודעים מראש כמה סיבובים יהיו, ולכן משתמשים ב-while. עברו צעד אחרי צעד.
ב-for יודעים מראש על מה עוברים, למשל על המספרים של range. ב-while לא יודעים כמה סיבובים יהיו: חוזרים כל עוד תנאי נכון. כל לולאת for אפשר לכתוב גם עם while, אבל for קצרה יותר ובטוחה יותר. נסו במעבדה.
כך פייתון בנויה: range עוצר לפני stop. היתרון: ב-range(0, n) יש בדיוק n סיבובים. כדי לכלול את 5, כתבו range(1, 6).
טבלה שבה כל שורה היא סיבוב, וכל עמודה היא משתנה. ממלאים אותה ביד, סיבוב אחרי סיבוב, ורואים בדיוק מה המחשב עושה. כך מוצאים מהר טעות של סיבוב אחד יותר או פחות. תרגלו למטה.