הפקולטה לפיזיקה, הטכניון. חורף 2013
מרצה: רונן אברבנאל
בפייתון, אין צורך להצהיר מפורשות על טיפוסי משתנים. לשם קביעת משתנה, יש להציב בו ערך מתאים.
b=3
a=3.14
נדון בטיפוסי המשתנים השונים
מספר שלם (integer)
1+1
a=4
type(a)
מספר ממשי (float, נקודת צפה)
c = 2.1
type(c)
מספרים מרוכבים (complex)
d = 1.5 + 0.5j
d.real
d.imag
d.conjugate()
type(1.0 + 0j)
משתנים בוליאנים (Booleans, True/False)
3>4
test = (3<4)
test
type(test)
אפשר להשתמש במפרש של פייתון (או בממשק אחר שלו) לחישובים פשוטים, באמצעות פעולות החשבון בבסיסיות: +, -, /, %
7*3
3**10
8%3
בחלוקת שלמים מתקבל מספר שלם:
3/2
a=3
b=2
a/b
כדי לבצע חילוק אמיתי ניתן להמיר את המשתנה,
3/2.0
a=3; b=2
1.0*a/b
float(b)
(containers) פייתון מכיל מספר סוגי מיכלים יעילים למדי, בהם ניתן לאכסן מספר משתנים "בסיסיים"
רשימה היא אוסף מסודר של אוביקטים, אשר יכול להיות להם טיפוס שונה. לדוגמה,
L=[3,1.2,"bar",2j]
L
L=['red','blue','green',
'black', 'white']
type(L)
ניתן לגשת לאברים בתוך רשימה באמצעות האינדקס שלהם - המיקום ברשימה. בפייתון, כמו ב-C, האינדקס מתחיל באפס.
L[2]
L[0]
אינדקסים שליליים יגשלו לרשימה מהסוף:
L[-1]
L[-2]
וכך לבחור פרוסה מהרשימה ("slicing") על ידי שליפת טווח אינדקסי:
L[2:4]
L[:-1]
באופן כללי, התחביר של פריסת רשימות הוא מהצורה,
L[start:stop:stride]
כבר ראינו את שני הפרמטרים הראשונים. הפרמטר השלישי מגדיר את ה"דילוג" לאורך הרשימה.
כל הפרמטרים אופציונאליים
L[::2]
print L2
print L
L2 = L[::-1]
אפשר לשנות את התוכן של רשימות:
L[1] = 3
L[2] = "navy"
L
L.append("UV")
L
L.pop() #Removes and returns the last item
L.extend(["UV","IR"]) #Exttend L in place
L2 = ["UV","IR"]
L2.extend(L)
L2
L.sort() #in place
L
ניתן לחבר רשימות
r = L[::-1]
r+L
או להכפיל אותן (לחבר רשימה לעצמה..)
r*2
הערה אם אתם לא יודעים איזה פונקציות "שייכות" לאובייקט, הפקודה dir() תדפיס את רשימת הפונקציות.
במפרש אינטראקטיבי (לדוגמה, IPython) ניתן להשלים מתודות באמצעות
יש מספר תחבירים אפשריים למחרוזת,
s1 = 'Look at me, im a string'
s2 = "I'm a string too, and I can use ' "
s3 = """" I'm a multiline string
Look at me!"""
s4 = '''There is more then one way
for multiline'''
s5 = 'I'm a string'
s6 = 'I\'m a string \nwith newline and \t tab and \\'
s6
print s6
s7 = r"i'm a string\not string"
print s7
pri t s7
ניתן לפרוס (slice) מחרוזת כמו שפורסים רשימה,
a = "hello, world!"
a[7:10]
אבל לא ניתן לשנות תווים בודדים באמצעות מקום. יש לעזות את זה "כמו שצריך"
a = "hello, world!"
a[2] = 'z'
a.replace('l','z',1)
a.replace('l','z')
אפשר לקבל עזרה על פונקציות ואובייקטים באמצעות הפונקציה help()
help(str)
help("a")
help("a".replace)
?"a" #In Ipython
ניתן להכניס משתנים לתוך מחרוזות (כמו ב-printf ב-c)
"an integer %d" % 42
pi = 3.1415
"an integer %d, a float %f, and a string %s" % (42, pi, "moo")
"formated float %.2f" % pi
ועוד הרבה אחרים. פייתון מאוד חזק בכל הנוגע למניפולציה על מחרוזות.
טבלה שממפה מפתח (key) לערך (value)
tel = {"Noam": 1234,
"Irit" : 5678,
"Ronen" : 9123 }
tel
tel["Noam"]
ניתן לשנות את ערכו של מפתח במילון, או להוסיף מפתח חדש,
tel["Noam"] = 4675
tel
tel["Shira"] = 111
tel
לשלוף את המפתחות או הערכים,
tel.keys()
tel.values()
כמו רשימות, אבל אי אפשר לשנות אותן. נשמע קצת מטופש, אבל נשתמש בהן הרבה בהמשך.
t = 123, "abc", 2j+1
t
פעולות השמה משמשות להצבת שמות לערכים, ועל מנת לשנות את ההפרטים באובייקטים שניתנים לשנות אותם (כמו רשימות, להבדיל מו-tuples)
בקצרה, השמה מתבצעת כדלהלן :
a = [1,2,3]
b = a
a
b
a is b
b[1] = "hi"
a
לביצוע במפענח.