לולאת for#
בסרטון זה הוצג שימוש קלאסי בלולאת for: מציאת הערך המקסימלי בתוך רשימת מספרים. תוך כדי למדנו את התחביר של לולאת for בפייתון:
תחביר#
for elem in elements:
statement1
statement2
…
rest of code…
איך זה עובד?
בשורה הראשונה, מופיעה לולאת for עוברת איבר-איבר באובייקטים מטיפוסים המייצגים אוסף איברים (elements), כמו רשימה או מחרוזת. בכל מעבר על איבר בודד, או איטרציה, הלולאה מחלצת איבר בודד מהאוסף ושמה אותו במשתנה המצביע את לאיבר הנוכחי (elem).
נגדיר את השורות הבאות הנמצאות בהזחה מוגדרות כבלוק של קוד של הלולאה. והוא ירוץ בכל איטרציה.
לאחר שיסתיימו כל האיטרציות של הלולאה, ירוצו השורות הנמצאות לאחר בלוק הקוד של הלולאה (rest of code), כלומר, אלו שנמצאות מחוץ להזחה.
אז כיצד תתבצע הריצה בדגומא לעיל?
באיטרציה הראשונה יישמר האיבר הראשון של elements במשתנה elem, ואז ירוצו הפקודות שבגוף הלולאה.
באיטרציה השנייה, יישמר האיבר השני במשתנה elem, ושוב ירוצו הפקודות.
כך נמשיך עד שייגמרו האיברים, ואז הלולאה מסתיימת ועוברים להמשך הקוד (rest of code).
כדאי לדעת! .
טיפוסים המייצגים אוסף איברים שניתן לעבור עליהם אחד לאחר השני נקראים גם iterables. בהמשך, נרחיב על המשמעות של iterables בהקשר של לולאות
תרגול#
ממשו באמצעות לולאת
forאת הפונקציהcount_spaces(s), אשר מקבלת מחרוזת s ומחזירה כמה פעמים מופיע התו רווח (" ").
def count_spaces(s):
# Add your code here
pass
רמז: מה היינו רוצים לעשות?
להתחיל ספירה כלשהיא באפס.
לעבור על כל תו במחרוזת.
כל פעם שאנחנו רואים את התו רווח, להוסיף 1 לספירה.
כך, בסוף המחרוזת, נקבל את כמות הרווחים המופיעים במחרוזת.
לחצו כאן כדי לצפות בפתרון
def count_spaces(s):
cnt = 0
for char in s:
if char == " ":
cnt = cnt+1
return cnt
ממשו את הפונקציה count_char המופיעה בחלונית הקוד. הפונקציה מקבלת כקלט מחרוזת s ותו c. הפונקציה תעבור על תווי המחרוזת s, תספור כמה פעמים מופיע בה התו c, ותחזיר את מספר זה.
רמז: ניתו להיעזר בפונקציה הקודמת.
לאחר שפתרתם את התרגיל, הריצו את הקוד וצפו בתוצאות בחלונית הפלט.
def count_char(s, c):
# delete pass and fill in your code below
pass
### TESTS ###
print("********************")
print("Starting the test:")
print("********************")
print("Counting spaces in 'Hello world!'")
ans = count_char("Hello world!", " ")
if ans == 1:
print("CORRECT: Very good, 'Hello world!' has one space")
else:
print("WRONG: 'Hello world!' has one space but the code returned", ans)
print("********************")
print("Counting 'a' in 'I hate bananas'")
ans = count_char("I hate bananas", "a")
if ans == 4:
print("CORRECT: Very good, 'I hate bananas' has 4 a's")
else:
print("WRONG: 'I hate bananas' has 4 a's but the code returned", ans)
print("********************")
print("Counting 'z' in 'it's not here'")
ans = count_char("it's not here", "z")
if ans == 0:
print("CORRECT: Very good, 'it's not here' has no z's")
else:
print("WRONG: 'it's not here' has no z's but the code returned", ans)
print("********************")
print("Tests concluded, add more tests of your own below!")
print("********************")
********************
Starting the test:
********************
Counting spaces in 'Hello world!'
WRONG: 'Hello world!' has one space but the code returned None
********************
Counting 'a' in 'I hate bananas'
WRONG: 'I hate bananas' has 4 a's but the code returned None
********************
Counting 'z' in 'it's not here'
WRONG: 'it's not here' has no z's but the code returned None
********************
Tests concluded, add more tests of your own below!
********************
עכשיו כשאנחנו יודעים איך נראית לולאת for, בואו נממש בעצמנו את הפונקציה שמוצאת מקסימום של רשימה.
לפניכם הקוד שראינו בסרטון. נסו לשנות אותו כך שהפונקציה תחזיר את האיבר המינימלי ברשימה. אל תשכחו לשנות את שם הפונקציה כך שתשקף את השינוי!
def my_max(lst):
maximum = lst[0]
for x in lst:
if x > maximum:
maximum = x
return maximum