בפוסט הבלוג הזה, נתעסק במושג לולאות for (for loops), שמאפשרות לנו לעבור על רצף של איברים. לולאות for שימושיות במיוחד כאשר אנחנו עובדים עם רצפים (sequences) כמו רשימות או מחרוזות.
לולאת for
בסיסית#
התחביר הבסיסי של לולאת for בפייתון הוא כדלקמן:
בכל איטרציה, משתנה הלולאה item
מקבל את הערך של האיבר הבא ברצף. בלוק הקוד בתוך הלולאה מתבצע עם הערך הזה.
דוגמא 1#
בדוגמה זו, אנו עוברים על כל האיברים ברשימה ומדפיסים אותם למסך. עבור כל איבר ברשימה, המשתנה item
מקבל את הערך של האיבר הנוכחי בלולאה.
דוגמא 2#
באותה צורה אפשר לרוץ על מחרוזת אות אות. בואו נראה דוגמא:
בדוגמה זו, אנחנו מעבירים על כל תו במחרוזת באמצעות לולאת for. אנחנו בודקים אם התו הנוכחי שווה ל-"a". אם הוא כן, אנחנו מחליף אותו במחרוזת "AAA" ומוסיפים אותו למחרוזת התוצאה result
. אחרת, אנחנו מוסיפים את התו כפי שהוא למחרוזת התוצאה. לבסוף, אנחנו מדפיסים את התוצאה.
אפשרות אחרת לפתור את הבעיה הנ"ל היא בעזרת הפונקציה replace
שלמדנו בחלק על
מחרוזות מתקדמות:
זוהי רק דוגמא אחת מיני רבות לעובדה שאין בהכרח רק דרך אחת לפתור כל בעיה תכנותית.
דוגמא 3#
לא נשכח שכמו בלולאות while, גם כאן נוכל להתשמש בcontinue
וbreak
במידת הצורך:
range
#
פונקציית range
היא דרך קלה להגדיר רצף מספרים בלי לכתוב את כולם מראש ברשימה. הנה הסינטקס הבסיסי של פונקציה זו:
stop
: הערך הסופי של רצף המספרים. הערך הסופי אינו כלול בסדרה המוחזרת. בדיפולט הערך הראשון של הרצף הוא 0.
בנוסף יש עוד פרמטרים אפשריים עבור הפונקציה:
start
: הערך הראשון בסדרת המספרים. אם לא צוין, הערך התחלתי ברירת המחדל הוא 0.step
: גודל הצעד במעבר על רשימת המספרים. הצעד ברירת המחדל הוא 1.
בואו נראה כמה דוגמאות:
enumerate
#
הפונקציה enumerate
שימושית כאשר ברצונך לעבור על רשימה ולשמור גם את המיקום הנוכחי של כל איבר ברשימה. השימוש ב-enumerate
מאפשר לנו לעבוד בצורה נוחה עם מידע נוסף על האיברים שברשימה.
דוגמא#
בדוגמה זו, אנו עוברים על כל תו במחרוזת באמצעות הפונקציה enumerate
, שמספקת את האינדקס והתו בכל צעד. אנו בודקים אם האינדקס הוא זוגי או אי-זוגי באמצעות אופרטור המודולו %. אם האינדקס הוא זוגי (מתחלק ב-2), אנו ממירים את התו לאותיות קטנות ומוסיפים אותו למחרוזת result. אם האינדקס הוא אי-זוגי, אנו ממירים את התו לאותיות גדולות ומוסיפים אותו למחרוזת result. לבסוף, אנו מדפיסים את המחרוזת result המותאמת שבה כל תו זוגי מופיע באותיות קטנות וכל תו אי-זוגי מופיע באותיות גדולות.
list comprehension#
List comprehensions הם תכונה קצרה ועוצמתית שמאפשרת ליצור רשימות חדשות בהתבסס על רשימות קיימות. הם מספקים דרך קומפקטית ואלגנטית לבצע פעולות על איברים ברשימה וליצור רשימה חדשה בשורה אחת של קוד.
על מנת להמחיש את המושג, נשקול דוגמה שבה יש לנו רשימה של מספרים ורוצים ליצור רשימה חדשה שמכילה את הריבוע של כל מספר. בואו נראה איך היינו עושים זאת עם לולאת for רגילה:
בקוד שמופיע לעיל, אנחנו מאתחלים רשימה ריקה בשם squared_numbers. לאחר מכן, אנחנו מעבירים על כל איבר ברשימה numbers, מחשבים את הריבוע של המספר הנוכחי ומוסיפים את התוצאה לרשימה squared_numbers.
ארוך הא? 💤💤💤💤💤💤
עכשיו, נכתוב מחדש את אותה הדוגמה באמצעות list comprehension:
שימו לב לסינטקס הקצר:
השילוב של קוד קומפקטי, קריא ויעיל עם היכולת ליצור רשימות חדשות בצורה מהירה הופך את list comprehensions לכלי חזק בפיתוח תוכנה המפשט את התהליך של יצירת רשימות מבוססות רשימות קיימות ומספקים פתרון אלגנטי למגוון רחב של משימות תכנותיות.
ההבדל בין לולאת for
וwhile
#
לולאות for ו-while משמשות למטרות שונות ובתרחישים שונים.
השתמש בלולאת for כאשר אתה יודע את מספר החזרות מראש או כאשר ברצונך לעבור ברצף (כגון רשימה, מחרוזת או range
). הלולאה for מעבירה אוטומטית דרך כל פריט ברצף עד שהיא מגיעה לסיומה. זה אידיאלי למצבים בהם יש לך אוסף ידוע של פריטים לעבור עליהם.
השתמש בלולאת while כאשר ברצונך לחזור על קוד כל עוד תנאי מסוים הוא נכון. להבדיל מהלולאה for, לולאת ה-while אינה דורשת לדעת את מספר החזרות המדויק מראש. זה מתאים כאשר ברצונך להמשיך לחזור עד שתנאי מסוים מתקיים או עד שאירוע מסוים מתרחש.
ככלל אצבע נעדיף תמיד להשתמש בלולאת for, אלא אם כמות החזרות לא ידועה.
תרגילים#
תרגיל 1- count vowels#
כתוב תוכנית Python המבקשת מהמשתמש להזין משפט. התוכנית שלך צריכה לספור ולהדפיס את מספר התנועות (a, e, i, o, u) במשפט באמצעות לולאה for.
דוגמאת הדפסה:
Enter a sentence: Hi There
Number of vowels: 3
תרגיל 2- עצרת#
כתוב תוכנית Python שלוקחת מספר שלם אי-שלילי מהמשתמש ומחשבת את העצרת של המספר הזה באמצעות לולאת for. אם המספר הוא שלילי כתוב הערה בהתאם. השתמש בפונקציה range
.
שימו לב שעל פי הגדרת העצרת, 1=!0
דוגמאת הדפסה למספר תקין:
Enter a non-negative integer: 5
The factorial of 5 is 120
ועבור מספר לא תקין:
Enter a non-negative integer: -7
Not a non-negative integer.