קורס פייתון למתחילים אונליין חינם - דווין קורס תכנותקורס פייתון למתחילים אונליין חינם - דווין קורס תכנות

לולאות for ולולאות while בפייתון

על מה נעבור

מוטיבציה

נניח אנחנו רוצים לממש את הלוגיקה הבאה:

flowchart RL; INPUT[/קבל מספר y/]--> A[הגדר x=0]; A --> IF{x מתחלק ב-2 ללא שארית} IF -- True --> PRINT[הדפס x] PRINT --> INC[x=x+1] IF -- False --> INC INC --> IF_LOOP{x קטן מ y} IF_LOOP -- True --> IF IF_LOOP -- False --> DONE[צא מהתוכנית]

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

לולאת while

לולאת while מורכבת מהרכיבים הבאים:

  1. תנאי הלולאה.
  2. גוף הלולאה.

גוף לולאת הwhile ימשיך להתבצע כל עוד תנאי הלולאה הוא True.

דוגמא:

1i = 0
2my_list = []
3while i < 100:
4 if i % 10 == 0:
5 my_list.append(i)
6 i = i + 1

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

דוגמה ללולאה אינסופית:

1i = 1
2while i > 0:
3 print("hello world")

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

לולאת for

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

לולאת for מורכבת מהרכיבים הבאים:

  1. אובייקט רצף, לדוגמה רשימה (ובהמשך נלמד מבני נתונים נוספים עליהם נוכל לעבור בלולאת for).
  2. משתנה המייצג אלמנט מתוך אובייקט הרצף.
  3. גוף הלולאה שבדומה לתנאים או פונקציות נמצא בהזחה אחת ימינה.

1for i in [1, 2, 3, 4]:
2 print(i)

פונקציית range

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

דוגמא:

1for i in range(10, 13):
2 print(f"hello-{i}")

פונקציית enumerate

לפעמים אנחנו לא רוצים רק ״לגעת״ בכל איברי הרצף אלא גם לקבל גישה למיקומים שלהם ברשימה.
כדי לעשות זאת נשתמש בפונקציה enumerate.
. פונקציה זו מייצרת רצף ״חדש״ של זוגות של איברים כאשר האיבר הראשון בזוג הוא index המציין את מיקום האיבר ברצף והאיבר השני הוא איבר עצמו.

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

דוגמה:

1my_mixed_list = [[10, 20, "a", "b", "c"], [1, 2, 3, 4], ["a", "a", "a"]]
2for idx, _ in my_mixed_list:
3 for inner_idx, j in my_mixed_list[idx]:
4 if j == "a":
5 my_mixed_list[idx][inner_idx] = 999
6print(my_mixed_list)

פקודות יחודיות ללולאות

break

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

1my_list = [1, 23, 99, 42, ..., 365, ..., 22031992]
2for number in my_list:
3 if number == 42:
4 print('We have found the answer to life, the universe, and everything!')
5 break

continue

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

1num = 1
2while num <= 10:
3 if num % 3 == 0:
4 num += 1
5 continue # Skip numbers divisible by 3
6 print(num)
7 num += 1

בדוגמה זו, אם המספר זוגי, ערכו יעלה ב-1 ולא יודפס. אם המספר אי-זוגי, המספר יודפס ואז ערכו יעלה ב-1.

שימוש ב-continue כאשר הלולאה באיטרציה האחרונה יוביל ליציאה מהלולאה

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

1num = 1
2while num <= 10:
3 if not num % 3 == 0:
4 print(num)
5 num += 1

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

1for i in range(3):
2 for j in range(3):
3 if j == 1:
4 break # This breaks the inner loop
5 print(i, j)
6
7for i in range(3):
8 for j in range(3):
9 if j == 1:
10 continue # This continues to the next iteration of the inner loop
11 print(i, j)

בואו נצייר מלבן

נניח אנחנו רוצים להדפיס מלבן למסך בגודל כלשהו שנקבל מהמשתמש.
דוגמה עבור הגודל 4*2 התוכנה צריכה להדפיס למסך: (מלבן בגובה 2 כוכביות ורוחב 4 כוכביות)

1****
2****

דוגמה עבור 5*3 (מלבן בגובה 3 כוכביות ורוחב 5 כוכביות

1*****
2* *
3*****

מלאו את הקוד הנכון במקום ???.

לחצו כאן כדי לראות את הקוד

התו n\ מייצג הורדת שורה כאשר משרשרים אותה למחרוזת בעת הדפסה פייתון יבצע ירידת שורה.

תרגול נוסף

אתגר 1 מתוך 3.
כתבו פונקציה is_palindrome אשר מקבלת כפרמטר מחרוזת ומחזירה True אם המחרוזת פלינדרום, אחרת הפונקציה תחזיר False.
מה זה פלינדרום (Palindrome)? מחרוזת אשר אפשר לקרוא אותה משני הכיוונים באותה צורה. המחרוזות הבאות הן פלינדרום - level, radar, abba, race car, 12321.
גם בעברית קיימים פלינדרומים - ״ילד כותב בתוך דלי״.
הכוונה: התעלמו מרווחים ועשו שימוש בלולאת for על אורך המחרוזת.

OUTPUT

הצהרת נגישות

© 2022 DevIn. All rights reserved