You are on page 1of 22

‫מבוא כללי לתכנות ולמדעי המחשב‬

‫‪1843-0310‬‬

‫מרצה‪ :‬אמיר רובינשטיין‬


‫מתרגל‪ :‬דין שמואל‬

‫אוניברסיטת תל אביב‬
‫סמסטר חורף ‪2017-8‬‬

‫שיעור ‪ – 2‬יסודות פייתון‬


‫משתנים‪ ,‬טיפוסים ואופרטורים‬ ‫‪.1‬‬

‫משפטי תנאי‬ ‫‪.2‬‬

‫אוספים‪ :‬מחרוזות (‪ )str‬ורשימות (‪)lists‬‬ ‫‪.3‬‬

‫פונקציות‬ ‫‪.4‬‬
‫‪1‬‬
‫יסודות התכנות בשפת ‪Python‬‬
‫בהרצאות ובתרגולים הראשונים אנו סוקרים את יסודות התכנות בשפת פייתון‪.‬‬
‫סיכום הפרטים העיקריים מופיע בשקפים הבאים‪ ,‬וההסברים יינתנו בכיתה‪.‬‬

‫הערה חשובה‪:‬‬
‫אחרי כל שיעור חשוב מאוד "לשחק" עם רכיבי ‪ Python‬החדשים שנלמדו‪.‬‬
‫פשוט לפתוח ‪ IDLE‬ולנסות‪ ,‬לשנות‪ ,‬להריץ‪ ,‬להיכשל ולהצליח‪.‬‬

‫‪2‬‬
‫בואו נתחיל !‬
‫השקפים הבאים מכילים סיכום של הנושאים שראיתם בשני התרגולים הראשונים‪:‬‬ ‫•‬
‫‪ -‬משתנים‪ ,‬טיפוסים ואופרטורים‬

‫‪ -‬משפטי תנאי‬

‫לאחר מכן נמשיך לנושאים חדשים‪.‬‬ ‫•‬


‫‪ -‬אוספים סדורים‪ :‬מחרוזות (‪ )str‬ורשימות (‪)lists‬‬

‫‪ -‬פונקציות‬

‫‪3‬‬
‫‪ .1‬משתנים (‪ )Variables‬וטיפוסים (‪)types‬‬

‫כדי לבצע חישובים‪ ,‬נרצה לשמור ערכים ותוצאות של חישובים בזיכרון המחשב‪.‬‬
‫השמירה תתבצע באמצעות משתנים = שמות שניתנים לערכים בזיכרון‪.‬‬
‫למשל‪:‬‬
‫‪>>> x = 3‬‬
‫)‪>>> print(x‬‬
‫‪3‬‬
‫טיפוסים בפייתון‪:‬‬
‫‪... -97‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫• מספר שלם – ‪ ,integer‬או בקיצור ‪.int‬‬

‫‪... 6.0‬‬ ‫‪-4.7 0.389‬‬ ‫• מספר ממשי – ‪ ,*floating point‬או בקיצור ‪float‬‬

‫"‪... "a‬‬ ‫"‪"hello‬‬ ‫מחרוזת (טקסט) – ‪ string‬או בקיצור ‪str‬‬ ‫•‬

‫‪.True‬‬ ‫‪False‬‬ ‫בוליאני – ‪boolean‬‬ ‫•‬

‫• בהמשך נראה עוד‪...‬‬

‫‪4‬‬ ‫* מקור השם "נקודה צפה" באופן שבו מיוצגים מספרים ממשיים בזיכרון המחשב‪ .‬אולי יוסבר בהמשך הקורס‪.‬‬
‫עוד על טיפוסים‪:‬‬
‫הפונקציה ‪ type‬והמרות (‪)conversions‬‬

‫הפקודה* )(‪ type‬מקבלת אובייקט ומחזירה את הטיפוס שלו‪.‬‬


‫למשל‪:‬‬
‫‪>>> x=3‬‬
‫)‪>>> type(x‬‬
‫>'‪<class 'int‬‬
‫)‪>>> type(x+4.6‬‬
‫>'‪<class 'float‬‬

‫שימו לב כי בדוגמה האחרונה ‪ Python‬ביצע המרה (‪ casting‬או ‪ )conversion‬של ערכו של ‪x‬‬


‫מ‪ int -‬ל‪.float -‬‬
‫ניתן לבצע גם המרה מפורשת (אך לא כל ההמרות חוקיות)‪ .‬נראה זאת בהמשך‪.‬‬

‫* זוהי למעשה פונקציה‪ ,‬מושג עליו נרחיב בהמשך‬


‫‪5‬‬
‫אופרטורים (‪)Operators‬‬

‫אופרטור היא פעולה על ערכים‪ ,‬שנקראים בהקשר זה אופרנדים (‪.)operands‬‬


‫הפעולה מניבה תוצאה כלשהי מוגדרת מראש‪.‬‬

‫אופרטורים נפוצים בשפת פייתון (את חלקם ראיתם בתרגול)‪:‬‬

‫לוגיים‬ ‫השוואתיים‬ ‫טקסטואליים‬ ‫נומריים‬


‫‪and‬‬ ‫== (שוויון)‬ ‫‪( +‬שרשור)‬ ‫‪+‬‬
‫‪or‬‬ ‫=! (אי‪-‬שוויון)‬ ‫* (שכפול)‬ ‫‪( -‬אונארי ובינארי)‬

‫‪not‬‬ ‫>‬ ‫*‬


‫<‬ ‫‪/‬‬
‫=>‬ ‫‪//‬‬
‫=<‬ ‫**‬
‫‪%‬‬

‫‪6‬‬
‫אופרטורים לוגיים (‪)logical operators‬‬

‫נוח להגדיר אופרטורים לוגיים באמצעות טבלאות (שנקראות טבלאות אמת)‪:‬‬

‫‪X and Y‬‬ ‫‪X or Y‬‬


‫‪not X‬‬
‫‪X‬‬ ‫‪Y‬‬
‫‪X‬‬
‫‪T = True‬‬
‫‪F‬‬ ‫‪F‬‬ ‫‪F‬‬ ‫‪F‬‬
‫‪F‬‬ ‫‪T‬‬
‫‪F = False‬‬ ‫‪F‬‬ ‫‪T‬‬ ‫‪F‬‬ ‫‪T‬‬
‫‪T‬‬ ‫‪F‬‬
‫‪T‬‬ ‫‪F‬‬ ‫‪F‬‬ ‫‪T‬‬
‫‪T‬‬ ‫‪T‬‬ ‫‪T‬‬ ‫‪T‬‬

‫‪7‬‬
‫‪ .2‬משפטי תנאי (‪)Conditionals‬‬

‫ביצוע מותנה של פקודות‪.‬‬


‫‪if condition :‬‬ ‫תחביר (‪:)syntax‬‬
‫‪statements‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫שימו לב לנקודותיים (‪ ):‬אחרי התנאי‬ ‫•‬
‫‪statements‬‬ ‫שימו לב ל‪!! tab -‬‬ ‫•‬
‫התנאי יכול להיות מורכב‪ ,‬באמצעות אופרטורים לוגיים‪.‬‬ ‫•‬
‫הפקודות (‪ )statements‬יכולות להיות בעצמן משפטי תנאי‪.‬‬ ‫•‬
‫פקודות בהמשך שיופיעו ללא ‪ ,tab‬אינן חלק ממשפט התנאי‪.‬‬ ‫•‬

‫• אפשר גם להגדיר מה קורה אם התנאי לא מתקיים (‪:)else‬‬


‫‪if condition :‬‬
‫‪statements‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪else:‬‬
‫‪statements‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫• דוגמה בכיתה ‪ +‬דיאגרמת זרימה‪.‬‬
‫‪8‬‬
)Conditionals( ‫ משפטי תנאי‬.2
temp = 30

if temp > 25:


print("It's hot today!")
else:
if temp == 25:
print("perfect temperature")
else:
print("wear something warm")
print("Good bye")
=
temp = 30

if temp > 25:


print("It's hot today!")
elif temp == 25:
print("perfect temperature")
else:
print("wear something warm")
print("Good bye")
9
)Conditionals( ‫ משפטי תנאי‬.2
temp = 30

if temp > 25:


print("It's hot today!")
else:
if temp == 25:
print("perfect temperature")
else:
print("wear something warm")
print("Good bye")
:‫השוו את הנ"ל לתוכנית הבאה‬
temp = 30

if temp > 25:


print("It's hot today!")
else:
if temp == 25:
print("perfect temperature
print("wear something warm")
print("Good bye")
10
‫‪ .3‬אוספים (‪)collections‬‬

‫אוסף בפייתון הוא שם כללי לעצמים שמכילים עצמים אחרים‪.‬‬

‫• דוגמה אחת שכבר ראינו‪ :‬מחרוזת (מכילה תווים)‬

‫• דוגמה נוספת שנראה כעת‪ :‬רשימה (יכולה להכיל כל טיפוס)‬

‫‪11‬‬
‫רשימות (‪)lists‬‬

‫רשימה היא אוסף סדור של איברים כלשהם (לא בהכרח תווים כמו במחרוזת)‪.‬‬
‫מיוצגת בפייתון ע"י הסוגרים [ ]‪ ,‬כאשר האיברים מופרדים בפסיקים‪.‬‬

‫‪>>> lst = [23,‬‬ ‫]"‪5.6, -17, "computer‬‬


‫)‪>>> type(lst‬‬
‫>'‪<class 'list‬‬

‫הדפסת תוכן הרשימה‪:‬‬


‫)‪>>> print(lst‬‬
‫]"‪[23, 5.6, -17, "computer‬‬

‫בדיקת האורך של הרשימה‪:‬‬


‫)‪>>> len(lst‬‬
‫‪4‬‬
‫סכום האיברים‪:‬‬
‫)]‪>>> sum([1,2,3,4‬‬
‫‪10‬‬
‫‪12‬‬
‫פעולות משותפות למחרוזות ולרשימות‬
>>> "good" + "day" >>> [1,2] + [3] ‫• שרשור‬
'goodday' [1,2,3]

>>> "good" *3 >>> [1,2] *4 ‫• שכפול‬


'goodgoodgood' [1,2,1,2,1,2,1,2]

>>> len("good") >>> len([1,2]) ‫• בדיקת אורך‬


4 2

>>> "good" == "Good" >>> [1,2] == [2,1] ‫• השוואה‬


False False )‫איבר‬-‫(איבר‬
>>> "good" == "good" >>> [1,2] == [1]+[2]
True True

>>> "o" in "good" >>> 2 in [1,2] ‫• בדיקת שייכות‬


True True
>>> "a" in "good" >>> 3 in [1,2]
False False

>>> sorted("good") >>> sorted([3,1,2]) :‫• מיון‬


['d', 'g', 'o', 'o'] [1,2,3]

13
‫פעולות משותפות למחרוזות ולרשימות (‪)2‬‬

‫>>>‬ ‫"‪st = "Clinton‬‬ ‫>>>‬ ‫]‪lst = [6,33,-5‬‬ ‫• גישה לאיבר‬


‫>>>‬ ‫]‪st[0‬‬ ‫>>>‬ ‫]‪lst[0‬‬ ‫(לפי אינדקס)‬
‫'‪'C‬‬ ‫‪6‬‬
‫>>>‬ ‫]‪st[1‬‬ ‫>>>‬ ‫]‪lst[1‬‬ ‫אינדקסים מתחילים מ‪0 -‬‬
‫'‪'l‬‬ ‫‪33‬‬
‫>>>‬ ‫]‪st[len(st)-1‬‬ ‫>>>‬ ‫]‪lst[2‬‬
‫'‪'n‬‬ ‫‪-5‬‬
‫>>>‬ ‫])‪st[len(st‬‬ ‫>>>‬ ‫]‪lst[3‬‬
‫???‬ ‫???‬

‫])‪>>> st[0:len(st‬‬ ‫]‪>>> lst[0:3‬‬


‫• חיתוך (‪)slicing‬‬
‫'‪'Clinton‬‬ ‫]‪[6,33,-5‬‬
‫אינדקס התחלה – כולל‬
‫]‪>>> st[0:3‬‬ ‫]‪>>> lst[0:2‬‬ ‫אינדקס סוף – לא כולל‬
‫'‪'Cli‬‬ ‫]‪[6,33‬‬
‫]‪>>> st[3:7‬‬ ‫]‪>>> lst[1:3‬‬
‫'‪'nton‬‬ ‫]‪[33,-5‬‬

‫‪14‬‬
Functions - ‫ פונקציות‬.4

15
‫‪ .4‬פונקציות ‪Functions -‬‬

‫• פונקציה בהקשר של תכנות היא אוסף פקודות שמבצעות פעילות מוגדרת כלשהי‪.‬‬
‫‪ -‬לפונקציה יש שם‪ .‬באמצעותו ניתן "לקרוא" לפונקציה‪ ,‬כלומר לגרום לביצוע אוסף הפקודות‪.‬‬
‫‪ -‬הפונקציה יכולה לקבל קלט (פרמטרים)‬
‫‪ -‬מחזירה פלט (תוצאה כלשהי של החישוב)‬

‫• אפשר להסתכל על פונקציה כעל "קופסה שחורה" (‪.)black box‬‬

‫• ראינו כבר כמה פונקציות מובנות (‪ )built-in‬של פייתון‪:‬‬


‫‪- type‬‬
‫‪- print‬‬
‫‪- len‬‬
‫‪- sum‬‬
‫קלט‬ ‫פלט‬
‫פרמטר‪:‬‬
‫אוסף (למשל רשימה)‬ ‫‪len‬‬ ‫אורך הרשימה‬

‫נלמד כעת לכתוב פונקציות בעצמנו‪ .‬הן יהיו "קופסאות שקופות"‪.‬‬


‫‪16‬‬
‫ חישוב מקסימום‬:‫דוגמה‬

In a file with a .py extension: Run in interactive mode (shell)


def max2(a,b): >>> max2(3,5)
if a>=b: 5
return a >>> a=14
else: >>> max2(3,a)
return b
14

def max3(a,b,c): >>> max3(5,6,1)


if a>=b:
if a>=c: 6
return a >>> max3(a,16,-4)
else: 16
return c
else:
if b>=c:
return b
else:
return c

17
‫פונקציות ‪ -‬המשך‬

‫• יתרונות עיקריים לשימוש בפונקציות‪:‬‬


‫‪ .1‬מונע "שכפול קוד" – במקום לכתוב אותו קוד או קוד דומה הרבה פעמים‪ ,‬כותבים פעם אחת‬
‫וקוראים בכל פעם עם הפרמטרים המתאימים‪.‬‬
‫‪ .2‬המבנה של כלל התוכנית ברור יותר‬
‫‪ .3‬הפשטה – המשתמש בפונקציה לא צריך לדעת את פרטי מימושה‬

‫• תחביר‪:‬‬
‫‪def func_name (parameters) :‬‬

‫‪function body‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪return value‬‬
‫• זרימת הביצוע בעת קריאה לפונקציה‪:‬‬
‫קריאה (‪ :)call‬מפעילים את הפונקציה ("קוראים" לה) ע"י רישום שמה עם הפרמטרים המתאימים בסוגריים‪.‬‬ ‫‪.1‬‬

‫העברת ה"שליטה" לפונקציה‪ :‬ערכי הפרמטרים שבקריאה מוצבים לתוך הפרמטרים של הפונקציה‪.‬‬ ‫‪.2‬‬

‫ביצוע (‪ :)execution‬גוף הפונקציה מתבצע‪ ,‬עד הפעם הראשונה שנתקלים בפקודת ‪.return‬‬ ‫‪.3‬‬

‫‪18‬‬ ‫החזרת ה"שליטה" לסביבה הקוראת‪ :‬הערך שבפקודת ה‪ return -‬מוחזר ל"סביבה" הקוראת‪.‬‬ ‫‪.4‬‬
‫אלטרנטיבות לחישוב מקסימום‬
‫אפשר היה לכתוב את ‪ max3‬בדרכים שונות‪.‬‬
‫‪def max3_v1(a,b,c):‬‬ ‫לדוגמה‪:‬‬
‫‪if a>=b:‬‬ ‫‪def max3_v2(a,b,c):‬‬
‫‪if a>=c:‬‬ ‫‪if a>=b and a>=c:‬‬
‫‪return a‬‬ ‫‪return a‬‬
‫‪else:‬‬ ‫‪elif b>=a and b>=c:‬‬
‫‪return c‬‬ ‫‪return b‬‬
‫‪else:‬‬ ‫‪else:‬‬
‫‪if b>=c:‬‬ ‫‪return c‬‬
‫‪return b‬‬
‫‪else:‬‬
‫‪return c‬‬

‫נקודה למחשבה‪ :‬איזו גרסה יעילה יותר?‬


‫כאן נגדיר יעילות כמספר ההשוואות‪.‬‬ ‫•‬
‫נרצה להבחין בין המקרה הכי גרוע למקרה הכי טוב מבחינת כמות השוואות‪.‬‬ ‫•‬
‫אולי בתרגול ‪ /‬בתרגיל הבית‪...‬‬ ‫•‬

‫‪19‬‬
‫פונקציה שקוראת לפונקציה‬

‫‪ max3‬יכולה להשתמש ב‪! max2 -‬‬


‫‪def max3_v3(a,b,c):‬‬
‫)‪max_first_two = max2(a,b‬‬
‫)‪max_all = max2(max_first_two, c‬‬
‫‪return max_all‬‬

‫דיאגרמת זרימת הנתונים – על הלוח‪.‬‬

‫תרגיל‬
‫באילו דרכים ניתן לחשב מקסימום של ‪ 4‬ערכים?‬
‫ציירו דיאגרמה וכיתבו את הפונקציה עבור אחת הדרכים‪.‬‬

‫‪20‬‬
‫פונקציות בפייתון‬

‫לפונקציות בפייתון ‪ 2‬מקורות אפשריים‪:‬‬

‫‪def max3(a,b,c):‬‬ ‫‪ .1‬פונקציות חדשות שהוגדרו בקוד‪:‬‬


‫‪...‬‬

‫‪ .2‬פונקציות קיימות‪:‬‬
‫‪ .I‬פונציות מובנות )‪:)built-in‬‬
‫…‪print, len, sum,‬‬ ‫למשל‪:‬‬

‫‪ .II‬פונקציות מובנות של מחלקות*‪:‬‬


‫)”‪>>> str.count(“abbabcb”, “b‬‬ ‫למשל הפונקציה ‪ count‬של המחלקה ‪:str‬‬
‫‪4‬‬
‫‪ .III‬פונצקיות של חבילות שצריך "לייבא" ע"י פקודת ‪*import‬‬
‫‪>>> import math‬‬ ‫למשל‪:‬‬
‫)‪>>> math.factorial(5‬‬
‫‪120‬‬

‫‪21‬‬ ‫* נראה עוד בהרצאות ‪ /‬תרגולים ‪ /‬בתרגילי הבית‪ .‬נכיר אותן בהתאם לצורך במהלך הקורס‬
‫תזכורת‪ :‬מה לעשות אחרי השיעור‪...‬‬

‫‪22‬‬

You might also like