לולאה מקוננת
חלק מהיחידה יסודות במסלול ה-GDScript של Coddy. שיעור 49 מתוך 92.
לולאה מקוננת היא לולאה בתוך לולאה אחרת. בכל איטרציה של הלולאה החיצונית, הלולאה הפנימית מריצה את כל האיטרציות שלה:
var rows := 3
var cols := 2
for i in range(rows):
print("Outer: ", i)
for j in range(cols):
print(" Inner: ", j)Outer: 0
Inner: 0
Inner: 1
Outer: 1
Inner: 0
Inner: 1
Outer: 2
Inner: 0
Inner: 1הבלוק הפנימי מוזח בשתי רמות. הוא רץ rows x cols = 3 x 2 = 6 פעמים בסך הכול. j מתחיל שוב מ־0 בכל פעם שהלולאה החיצונית רצה, בעוד rows ו־cols נשארים ללא שינוי ורק אומרים ללולאות מתי לעצור.
לשתי הלולאות דרושים שמות משתנים שונים. כתיבה של for i בתוך for i אחר היא שגיאה, שמדווחים עליה לפני שהתוכנית רצה.
לולאות מקוננות שימושיות לעבודה עם שורות ועמודות. print() תמיד מסיימת את השורה, לכן כדי להדפיס שורה של כוכביות, צריך לבנות אותה קודם במחרוזת ולהדפיס אותה לאחר שהלולאה הפנימית מסתיימת:
for row in range(2):
var line := ""
for col in range(3):
line += "*"
print(line)***
***הלולאה החיצונית רצה פעם אחת בכל שורה, והלולאה הפנימית מוסיפה כוכב אחד בכל עמודה. פקודת break בתוך הלולאה הפנימית עוצרת רק את הלולאה הפנימית: הלולאה החיצונית ממשיכה לאיטרציה הבאה שלה.
אתגר
קלהתוכנית קוראת שני מספרים שלמים: rows ו-cols.
השתמש בלולאות מקוננות כדי להדפיס מלבן של כוכביות (*) עם rows שורות ו-cols כוכביות בכל שורה.
עבור הקלטים 3 ו-4, הפלט הוא:
****
****
****השתמש במונה חדש לכל לולאה (לדוגמה, row עבור השורות ו-col עבור הכוכביות בשורה) והשווה אותו ל-rows או ל-cols. אל תשנה את rows ו-cols עצמם: כל שורה צריכה שוב cols.
נסו בעצמכם
extends Node
func _ready():
var rows := int(OS.read_string_from_stdin())
var cols := int(OS.read_string_from_stdin())
# לולאה חיצונית: איטרציה אחת לכל שורה
# לולאה פנימית: הוסף כוכבית אחת לכל עמודה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 1
אופרטורים אריתמטייםחלוקה שלמהאופרטור מודולוקיצורי דרך אריתמטייםסיכום – חשבון פשוטאופרטורי השוואהתרגלו בעצמכם: קומפיילר GDScript אונליין