לולאות 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 הקפות סביב עצמו (לולאה פנימית).

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

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