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

continue בפייתון

תפקידה של המילה השמורה continue בפייתון היא לעבור מייד לאיטרציה הבאה בלולאה. בואו נתחיל בדוגמה:

x = 0
while x < 5:
    x += 1
    print(f"x = {x}, which is small")

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

x = 1, which is small
x = 2, which is small
x = 3, which is small
x = 4, which is small
x = 5, which is small

עכשיו, בואו נגיד שאנחנו רוצים שההדפסה לא תוצג עבור 2. כלומר לפני ההדפסה, נרצה לבדוק האם ערכו של x הוא 2, ואם כן, נרצה להפסיק את ריצת האיטרציה ולעבור מייד לבדיקת התנאי של האיטרציה הבאה.
זה בדיוק מה ש- continue עושה.

x = 0
while x < 5:
    x += 1
    if x == 2:
        continue
    print(f"x = {x}, which is small")

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

x = 1, which is small
x = 3, which is small
x = 4, which is small
x = 5, which is small

הערה חשובה:
בהרבה מקרים, אין סיבה אמיתית להשתמש ב- continue ואפשר להשיג לוגיקה דומה על ידי שימוש ב- if. שימוש ב- if לרוב יהיה גם ברור יותר. עם זאת, חשוב להכיר את continue, ולו רק כדי להבין קוד שעליכם לקרוא.

continue - תרגיל:

כתבו תוכנית שמשתמשת ב- continue ומממשת את הדרישות הבאות:

  1. התוכנית תגדיר משתנה totalString, שבתחילת התוכנית יאותחל להיות המחרוזת הריקה.
  2. התוכנית תבקש מהמשתמש מחרוזות קלט שוב ושוב.
  3. אם מחרוזת הקלט מורכבת מאותיות גדולות בלבד, היא תשורשר למחרוזת totalString.
  4. כאשר המשתמש יזין את המחרוזת “quit”, התוכנית תציג את totalString ותסתיים.

לדוגמה, אם המשתמש הזין:

HELLO,
my
Name :-)
is
JOE!
quit

התוכנית תציג !HELLO, JOE. רמז: תוכלו להשתמש במתודה isupper כדי לבדוק אם מחרוזת מכילה אותיות גדולות בלבד.

הצגת פתרון

break בפייתון

תפקידה של המילה השמורה break הוא לשבור לולאה במהלך ריצתה. אנו יכולים לכלול קוד בלולאה שיבדוק תנאי כלשהו, ואם התנאי הזה מתקיים, הלולאה תסתיים מייד והקוד יעבור לשורה הבאה, אחרי הלולאה.
בואו נשלב break בתוך הלולאה אשר מציגה את המספרים מ-1 עד 4:

x = 0
while x < 5:
    x += 1
    if x >= 2:
        break
    print(f"x = {x}, which is small")

הפלט שמתקבל:

x = 1, which is small

הסבר: באיטרציה השנייה, x נכנס לבלוק של לולאת ה- while כשערכו 1. אז ערכו גדל ל- 2, ולכן התנאי שבודק אם הוא גדול או שווה ל- 2, התקיים. אז התבצעה קריאה ל- break ששברה את הלולאה ולכן שאר הקוד של הלולאה לא התבצע.

break - תרגיל מספר 1:

שכתבו את התוכנית שמקבלת קלטים מהמשתמש, כך שתנאי הלולאה שלה יהיה True (כלומר תנאי שנכון תמיד). על התוכנית לקבל קלטים מהמשתמש עד שיזין “quit”.

הצגת פתרון

break - תרגיל מספר 2:

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

הצגת פתרון

break ו- else בפייתון

תכונה חשובה של שבירת לולאת while על ידי break, היא שהבלוק של ה- else (אם הוא קיים) לא ירוץ. כאשר לולאת while מסתיימת באופן רגיל, כלומר בעקבות כך שהתנאי שהיא בודקת אינו נכון, ירוץ בלוק ה- else, אבל אם היא מפסיקה בעקבות break - בלוק ה- else לא יתבצע.

כדי להמחיש את ההבדל, שימו לב שבתוכנית הזו, שבה לולאת ה- while מפסיקה את ריצתה בעקבות כך שהתנאי שלה הפסיק להיות נכון, בלוק ה- else ירוץ:

x = 1
while x < 3:
    print(f"{x}")
    x += 1
else:
    print("x is too big")

ולכן הפלט הוא:

1
2
x is too big

אבל לעומת זאת, בתוכנית הזו, שמסתיימת בעקבות break, הבלוק של ה- else לא ירוץ:

x = 1
while True:
    print(f"{x}")
    x += 1
    if x >= 3:
        break
else:
    print("x is too big")

ולכן הפלט הוא:

1
2