January 29, 2021

פייתון 6 - לולאות


הפרק הקודם:

פייתון 5 - רשימות

מה נלמד

  • מהי לולאה ומהי השימוש שלה
  • for, while
  • for in range
  • for in enumerate
  • break-continue

לולאות

לולאה כמו השם שלה היא משהו שחוזר על עצמה.

דוגמא - מחזור יום לילה

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

1
2
כל עוד השמש חיה:  
תזיז את כדור הארץ

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

דוגמא - הלופ של משחק מחשב

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

1
2
3
כל עוד לא יצאנו מהמשחק:  
עדכן את המשחק
צייר למסך

או בקוד פייתוני:

1
2
3
4
isPlaying = True
while(isPlaying):
update()
render()

לולאה זה קטע קוד שרץ פעם אחת או יותר.

while

הלולאה הכי בסיסית היא -

בזמן שתנאי מתקיים, תריץ את הקוד הזה,
אם התנאי לא מתקיים, תריץ קוד אחר.

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

1
2
3
4
5
6
7
8
9
10
condition = True
counter = 0

while(condition):
print("Hello World")
counter += 1
if counter == 10:
condition = False
else:
print("Bye world")

אם נתרגם את זה מאנגלית זה ייקרא כך:
בזמן שהתנאי שלנו מתקיים, תדפיסו למסך, תגדילו את הסופר באחד,
אם הסופר שווה ל 10, יש לשים בתנאי שלנו לא נכון.
שימו לב שאחרי ששמנו במשתנה שלנו “לא נכון” אז התנאי שלנו יפסיק להתקיים.

כעת תנסו לאתחל את המשתנה condition לFalse, מה בעצם מודפס?

תרגיל

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

for

זוכרים משיעור קודם את הרשימות?
כעת נוכל לשלב אותם עם לולאות.

אם אנחנו משתמשים בהדפסה הבסיסית למערך אז אנחנו מקבלים תוצאה די מוזרה:

1
2
3
arr = [1,2,3]  
print(arr)
[1, 2, 3]

אנחנו רוצים להדפיס את הרשימה בצורה יפה יותר,
נניח יש לנו מערך שמות ואנחנו רוצים ליצור רשימה שמית עם מספרים, למשל:

  1. Iluga
  2. Vasily
  3. Dana

נשתמש בזה ככה:

1
2
3
4
5
arr = ['Ilya' , 'Vasily' , 'Dana']
index = 1
for name in arr:
print(f'{index}. {name}')
index +=1

זוכרים את ה-f?
בעזרתו אנחנו יכולים לפרמט מחרוזת בצורה יפה מבלי לחבר מחרוזות.
אחרת היינו כותבים ככה:

1
print(string(index) + '. ' + name)  

תרגיל

  1. יש לנו שמות של כוכבי לכת, התבקשתם לכתוב תכנית שמקבלת שם מהמשתמש ולכתוב את השם המלא ע”פ החיפוש.
    שמות כוכבי הלכת הם:
    [‘mercury’, ‘venus’ , ‘earth’, ‘mars’, ‘jupiter’, ‘saturn’, ‘uranus’, ‘neptune’]

אם המשתמש כתב ‘mer’ על התכנית להחזיר mercury.

for range

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

1
2
3
4
counter = 0
while counter < 5:
print(counter)
counter += 1

במקום זה פייתון מאפשר לנו בקלות מאוד לרוץ על רשימה של מספרים בעזרת הפעולה range:

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

תרגיל

  1. תקלטו מספר מהמשתמש ותדפיסו את כל המספרים הזוגיים עד המספר שקלטתם מהמשתמש.
  2. תממשו את המשחק 7 בום - תקלטו מספר מהמשתמש ותדפיסו את כל המספרים עד למספר שהמשתמש בחר,
    אם המספר מכיל את הספרה 7 או מתחלק ב7 אז תדפיסו “boom” במקום.

for enumerate

הfor הזה הוא שילוב של for in רגיל וfor range.
הוא נותן לכם גם את האלמנט ברשימה וגם את האינדקס שלו.
תנסו את הקוד הבא:

1
2
for index, value in enumerate(["p", "y", "t", "h", "o", "n"]):
print(index, value)

break- continue

כפי שראינו עד כה יש מילים שמורות בפייתון שעוזרות לנו לנהל איך הקוד שלנו רץ,
if,elif,else יוצרות לנו תנאים - קוד ירוץ רק בתנאי מסוים שקורה.
לולאות עוזרות לנו לבצע קוד מסוים מספר פעמים בהתאם לתנאי או למספר שאנו קיבלנו.
אזי פייתון מאפשר שליטה נוספת בלולאות שלנו - במידה ונרצה להמשיך או לבצע סיום לולאה מוקדמת.

break - לצאת מהלולאה
continue - לצאת מהלולאה ולהמשיך אותה הלאה

דוגמא:

1
2
3
4
5
6
7
8
9
10
11
12
13
tries = 10
isAdmin = False
isIluga = False
while tries > 0:
name = input('Please login with your name: ')
if name == 'iluga':
isIluga = True
continue # מדליק את הדגל וממשיך עם הלולאה
elif name == 'admin':
isAdmin = True
break # מדליק את הדגל ועוצר את הלולאה.
else
tries -= 1

תרגילים

  1. תקלטו מהמשתמש את השם שלו ותדפיסו כל אות בשורה חדשה.
    למשל:
1
2
3
4
5
6
Enter your name: iluga  
i
l
u
g
a
  1. תקלטו מספר מהמשתמש ותכניסו לרשימה את כל המספרים שנכנסים לסדרת פיבונאצ’י עד למספר הזה כולל.
    מהי סדרת פיבונאצ’י? זוהי סדרת מספרים שהמספר הבא שלה הוא סכום הקודמים.
    1
    0 1 1 2 3 5 8 13 21 34....
    אז אם המשתמש קלט 8 הרשימה צריכה להכיל את המספרים:
    1
    [0,1,1,2,3,5,8]
  2. תכתבו תוכנה אשר מקבלת מספרים מהמשתמש עד שהקלט הוא ‘done’ ותדפיסו את התוצאות הבאות:
  • ממוצע של המספרים.
  • המספר הכי גדול.
  • המספר הכי קטן.



פייתון 7 - פונקציות

על הפוסט

הפוסט נכתב על ידי Ilya, רישיון על ידי CC BY-NC-ND 4.0.

שתפו את הפוסט

Email Facebook Linkedin Print

קנו לי קפה

#Software#Python