מירי
כיתה ח · תכנות בפייתון

לולאות בפייתון for ו-while, סיבוב אחרי סיבוב

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

1

הרעיון

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

for עם range

range(1, 5) נותן 1, 2, 3, 4. מתחילים ב-start, עוצרים לפני stop. בכל סיבוב המשתנה i מקבל את המספר הבא.

for i in range(1, 5):
    print(i)

while עם תנאי

חוזרים כל עוד התנאי נכון. כשהוא נהיה לא נכון, יוצאים. חייבים לשנות משהו בגוף, אחרת הלולאה לא תיגמר.

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.
2

מעבדה: מזיזים את range ועוקבים

הזיזו את המחוונים. הקוד משתנה, והמעקב מתחיל מחדש. לחצו "שורה הבאה" וראו איך i, total ו-count משתנים. הטבלה למטה מראה כל סיבוב בשורה משלו.

נסו את אלה:

הריצו בעצמכם

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

3

טעויות שכולם עושים

stop לא נכנס

רוצים 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

while שלא נגמר

אם שום דבר בגוף לא משנה את התנאי, הלולאה רצה לנצח.

✗ לא נגמר

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)
4

דוגמה פתורה: while שמכפיל

במשחק יש מטבע אחד, וכל יום כמות המטבעות מוכפלת. אחרי כמה ימים יהיו לפחות 100 מטבעות? לא יודעים מראש כמה סיבובים יהיו, ולכן משתמשים ב-while. עברו צעד אחרי צעד.

5

תרגול


  

6

שאלות שכולם שואלים

מה ההבדל בין for ל-while בפייתון?

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

למה range(1, 5) לא כולל את 5?

כך פייתון בנויה: range עוצר לפני stop. היתרון: ב-range(0, n) יש בדיוק n סיבובים. כדי לכלול את 5, כתבו range(1, 6).

מה זו טבלת מעקב ולמה היא עוזרת?

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