234221 מבוא למחשב בשפת פייתון 3 מבני בקרה ולולאות פרופ' ראובן בר-יהודה דין לייטרסדורף הפקולטה למדעי המחשב הטכניון מכון טכנולוגי לישראל נערך ע"י יעל ארז 1
פקודות והזחות 2
פקודה פשוטה >>> 3+2 5 >>> x = 5 שורה אחת של קוד אנו מכירים שני סוגים ביטויי: חישוב או קריאה לפעולה פקודת השמה: משייכת ערך למשתנה נכיר בהמשך סוגי פקודות נוספים ביטוי בדרך כלל מציג ערך על המסך כאשר מריצים קוד במפרש הפקודות )interpreter( 3
פקודה מורכבת לרוב פורשת מספר שורות בנויה מ ה header ומאוסף פקודות מוזחות )indented( header פקודות מוזחות נלמד כעת על מספר קובע אם הפקודות המוזחות בעזרת רווחים או טאבים header -ים שונים יתבצעו header: statement1 statement2 statement3 4
פקודות תנאי 5
פקודת if expression True Statements False משערכת ביטוי (expression) ומבצעת את הפקודות המוזחות )statements( אם ערך הביטוי הינו True...some code... if expression: statements...more code... מבנה הפקודה בקוד: x = int(input("please enter x: ")) if x < 0: x = -x print("the absolute value of x is: " + str(x)) 6
פקודת if-else True expression st1 st2 False משערכת ביטוי ובהתאם לערכו מבצעת רצף אחד מבין שני רצפים של פקודות מוזחות...some code... if expression: statements1 else: statements2...more code... temp = int(input("please enter temperature: ")) if temp < 20: print("wear your coat!") else: print("go to the beach!") מבנה הפקודה בקוד: 7
קינון פקודות if ניתן לבצע פקודת if בתוך פקודת if אחרת! הפקודות אשר משויכות ל if הפנימי צריכות להיות מוזחות שוב temp = int(input("please enter temperature: ")) if temp < 20: if coat_is_dry: print("wear your coat!") else: print("dry your coat first!") 8
קינון פקודות if נתבונן בדוגמה של קינון פקודות if grade = int(input("please enter grade: ")) if grade >= 90: print("a") else: if grade >= 80: print("b") else: if grade >= 70: print("c") else: 9
דוגמא שנה מעוברת כתבו תוכנית המקבלת שנה מהמשתמש, ובודקת האם זו שנה מעוברת או לא. 10
if-elif קינון פקודות if ופקודת True if grade >= 90: print("a") else: if grade >= 80: print("b") else: if grade >= 70: print("c") else: if grade >= 60: print("d") else: print("f") התנאים במבנה if-elif שקולים נבדקים בזה אחר זה עד אשר תנאי אחד הינו if grade >= 90: print("a") elif grade >= 80: print("b") elif grade >= 70: print("c") elif grade >= 60: print("d") else: print("f") אופציונאלי 11
פקודות לולאה 12
לולאת while expression True Statements True משערכת ביטוי ומבצעת את הפקודות המוזחות לאחר ביצוע הפקודות, חוזרים לשערוך הביטוי כך עד אשר הביטוי משתערך כ אם ערך הביטוי False...some code... while expression: statements...more code... x = 1 while x <= 5: print("hello world") x = x + 1 False 13
לולאת while expression True Statements False n! = 1*2*3 *(n-1)*n num = 1 n = 10 while n >= 1: num *= n n -= 1 print("10! is: " + str(num)) דוגמה: חישוב עצרת 14
לולאת for משמשת למעבר על סדרה של איברים, לדוגמה: רשימות Range מחרוזות נלמד בקרוב 15
קינון לולאות while row = 3 col = 4 while row > 0: col = 4 while col > 0: print(str(row*col),end=' ') col-=1 print('\n') row-=1 ניתן לבצע לולאה בתוך לולאה אחרת! 12 9 6 3 8 6 4 2 4 3 2 1 16
קינון לולאות עם if ניתן לקנן פקודת if בתוך לולאה num = 10 while num>0: if num % 2 == 1: print(num) num-=1 9 7 5 3 1 17
דוגמה: מציאת המספר הקטן ביותר בקלט קלט: סדרה של מספרים מהמשתמש פלט: מספר מינימאלי ברשימה n = int(input("how many numbers are there? ")) min_number = int(input("enter float("inf") a number: ")) n-=1 while n > 0: x = int(input("enter a number: ")) n-=1 if x < min_number: min_number = x print(min_number) הקוד חוזר על עצמו איך נפתור זאת? 18
דגשים על הזחות 19
דגשים על הזחות הזחות בצורה ויזואלית Block 1 Block 2 Block 3 Block 2 - continued Block 1 - continued 20
דגשים על הזחות כל הפקודות בקוד אשר אינן חלק פנימי של פקודה מורכבת חייבות להיות לא מוזחות לא ניתן סתם לשים הזחות בקוד 21
דגשים על הזחות כל הפקודות בחלק הפנימי של אותה פקודה מורכבת חייבות להופיע באותה ההזחה 22
פקודות שינוי בקרה 23
break ניתן להשתמש בפקודה זו אך ורק בתוך לולאה הפקודה עוצרת את ריצת הלולאה מידית וממשיכה את ריצת התוכנית מהקוד העוקב ללולאה דוגמה: סכימת מספרים מהקלט עד קבלת מספר שלילי total = 0 while True: x = int(input("enter a number: ")) if x<0: break total += x print(total) 24
for-else, while-else ניתן להוסיף else לאחר כל לולאה הקוד אשר מוזח תחת הelse ירוץ עם סיום הלולאה, כל עוד הלולאה הסתיימה באופן רגיל )סיום סדרת האיברים בעבור )while אי קיום תנאי הלולאה בעבור,for אם הקוד הסתיים עקב ביצוע,break אזי הקוד תחת הelse לא יורץ 25
for-else, while-else דוגמה בדיקה אם מספר הוא ראשוני: n =int(input( please enter a number )) div = 2 while div < n: if n % div == 0: print(n, 'equals', div, '*', n//div) break div += 1 else: # loop fell through without finding a factor print(n, 'is a prime number') יתבצע אם div >= n בסוף הלולאה 26
continue ניתן להשתמש בפקודה זו אך ורק בתוך לולאה הפקודה מסיימת אך ורק את האיטרציה הנוכחית של הלולאה אם צריך לבצע איטרציה נוספת, עוברים אליה מיד 27
continue דוגמה: קבלת 100 מספרים כקלט וסכימת כל החיוביים total = 0 i = 0 while i < 100: i += 1 x = int(input("enter a number: ")) if x < 0: continue total += x print(total) 28
continue דוגמה: קבלת 100 מספרים כקלט מה יקרה אם נעביר את וסכימת לסוף הלולאה? כל החיוביים total = 0 i = 0 while i < 100: i += 1 x = int(input("enter a number: ")) if x < 0: continue total += x print(total) i+=1 total = 0 i = 0 while i < 100: x = int(input("enter a number: ")) if x < 0: continue total += x i += 1 print(total) 29
pass פקודה אשר לא מבצעת אף חישוב משתמשים בפקודה זאת כאשר הקוד מחייב פקודה אך איננו רוצים לבצע שום דבר לדוגמה, לא ניתן לרשום לולאה ללא קוד מוזח while True: pass # Busy-wait for keyboard interrupt (Ctrl+C) 30
לולאות אינסופיות לולאה אשר תנאי הריצה שלה תמיד True בכדי לצאת מלולאה כזו צריך לשבור את ריצת, break לדוגמה בעזרת בדרך כלל משתמשים בלולאות כאלה כאשר תנאי העצירה האמיתי מסובך מידי בכדי לרשום בשורת ההגדרה של הלולאה while True: n = input("please enter 'hello':") if n == 'hello': break 31
בעיות דיוק בתנאי הלולאה האם הלולאות הבאות שקולות? x=0 while x!= 2.0: x += 0.2 print(x) 0.2 0.4 0.6000000000000001 0.8 1.0 1.2 1.4 1.5999999999999999 1.7999999999999998 1.9999999999999998 2.1999999999999997 2.4 2.6 2.8000000000000003 3.0000000000000004 (אינסופי)... x=0 while x <= 2.0: x += 0.2 print(x) 0.2 0.4 0.6000000000000001 0.8 1.0 1.2 1.4 1.5999999999999999 1.7999999999999998 1.9999999999999998 2.1999999999999997 32
סיכום משפט תנאי if לולאות while/for תנאי מקונן, לולאה מקוננת break continue pass 33
34 The