top of page

לולאות FOR בפייתון


בניגוד ללולאות while, אשר מספר הריצות שלהן אינו ידוע מראש ונקבע ע"פ אירוע כלשהו (המשתנה X כבר לא קטן יותר מ-50, המשתמש הקליד את המילה exit וכו'), לולאות for מתבצעות מספר מוגדר של פעמים.


מבנה לולאת FOR

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

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



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

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

אופן הפעולה של לולאת FOR

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

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

למעשה העיקרון הזה נכון לא רק לגבי מספרים אלא לכל סוג אחר של ערכים שנמצא לנכון לתת ללולאה


מכיוון שבפייתון מחרוזות הן רצפים בפני עצמם, שימוש בלולאת for על מחרוזת יביא לריצה של הלולאה על כל אחד מהתווים ע"פ הסדר


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

בדיקת כל הערכים ברצף

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


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


באותו אופן נוכל לבדוק את כל האותיות במשפט (רצף מחרוזתי), כמו בדוגמה הבאה שמחזירה את מספר אותיות הניקוד (vowels) במשפט


לולאות מקוננות

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

הדוגמה הבאה עושה שימוש בלולאות מקוננות כדי להציג נתונים (מספרים מתוך מערך) בצורה ויזואלית



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





0 תגובות

Comentarios


bottom of page