הפקולטה לפיזיקה, הטכניון. חורף 2013
מרצה: רונן אברבנאל
בפייתון, אין צורך להצהיר מפורשות על טיפוסי משתנים. לשם קביעת משתנה, יש להציב בו ערך מתאים.
b=3
a=3.14
נדון בטיפוסי המשתנים השונים
מספר שלם (integer)
1+1
2
a=4
type(a)
int
מספר ממשי (float, נקודת צפה)
c = 2.1
type(c)
float
מספרים מרוכבים (complex)
d = 1.5 + 0.5j
d.real
1.5
d.imag
0.5
d.conjugate()
(1.5-0.5j)
type(1.0 + 0j)
complex
משתנים בוליאנים (Booleans, True/False)
3>4
False
test = (3<4)
test
True
type(test)
bool
אפשר להשתמש במפרש של פייתון (או בממשק אחר שלו) לחישובים פשוטים, באמצעות פעולות החשבון בבסיסיות: +, -, /, %
7*3
21
3**10
59049
8%3
2
בחלוקת שלמים מתקבל מספר שלם:
3/2
1
a=3
b=2
a/b
1
כדי לבצע חילוק אמיתי ניתן להמיר את המשתנה,
3/2.0
1.5
a=3; b=2
1.0*a/b
1.5
float(b)
2.0
(containers) פייתון מכיל מספר סוגי מיכלים יעילים למדי, בהם ניתן לאכסן מספר משתנים "בסיסיים"
רשימה היא אוסף מסודר של אוביקטים, אשר יכול להיות להם טיפוס שונה. לדוגמה,
L=[3,1.2,"bar",2j]
L
[3, 1.2, 'bar', 2j]
L=['red','blue','green',
'black', 'white']
type(L)
list
ניתן לגשת לאברים בתוך רשימה באמצעות האינדקס שלהם - המיקום ברשימה. בפייתון, כמו ב-C, האינדקס מתחיל באפס.
L[2]
'green'
L[0]
'red'
אינדקסים שליליים יגשלו לרשימה מהסוף:
L[-1]
'white'
L[-2]
'black'
וכך לבחור פרוסה מהרשימה ("slicing") על ידי שליפת טווח אינדקסי:
L[2:4]
['green', 'black']
L[:-1]
['red', 'blue', 'green', 'black']
באופן כללי, התחביר של פריסת רשימות הוא מהצורה,
L[start:stop:stride]
כבר ראינו את שני הפרמטרים הראשונים. הפרמטר השלישי מגדיר את ה"דילוג" לאורך הרשימה.
כל הפרמטרים אופציונאליים
L[::2]
['red', 'green', 'white']
print L2
print L
['white', 'black', 'green', 'blue', 'red'] ['red', 'blue', 'green', 'black', 'white']
L2 = L[::-1]
אפשר לשנות את התוכן של רשימות:
L[1] = 3
L[2] = "navy"
L
['red', 3, 'navy', 'black', 'white']
L.append("UV")
L
['red', 3, 'navy', 'black', 'white', 'UV']
L.pop() #Removes and returns the last item
'UV'
L.extend(["UV","IR"]) #Exttend L in place
L2 = ["UV","IR"]
L2.extend(L)
L2
['UV', 'IR', 'red', 'blue', 'green', 'black', 'white', 'UV', 'IR', 'UV', 'IR']
L.sort() #in place
L
[3, 'black', 'navy', 'red', 'white']
ניתן לחבר רשימות
r = L[::-1]
r+L
['white', 'red', 'navy', 'black', 3, 3, 'black', 'navy', 'red', 'white']
או להכפיל אותן (לחבר רשימה לעצמה..)
r*2
['white', 'red', 'navy', 'black', 3, 'white', 'red', 'navy', 'black', 3]
הערה אם אתם לא יודעים איזה פונקציות "שייכות" לאובייקט, הפקודה 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'
File "<ipython-input-50-fccbb4e2b03b>", line 1 s5 = 'I'm a string' ^ SyntaxError: invalid syntax
s6 = 'I\'m a string \nwith newline and \t tab and \\'
s6
"I'm a string \nwith newline and \t tab and \\"
print s6
I'm a string with newline and tab and \
s7 = r"i'm a string\not string"
print s7
i'm a string\not string
pri t s7
i'm a string\not string
ניתן לפרוס (slice) מחרוזת כמו שפורסים רשימה,
a = "hello, world!"
a[7:10]
'wor'
אבל לא ניתן לשנות תווים בודדים באמצעות מקום. יש לעזות את זה "כמו שצריך"
a = "hello, world!"
a[2] = 'z'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-2-8f124c87c8cf> in <module>() 1 a = "hello, world!" ----> 2 a[2] = 'z' TypeError: 'str' object does not support item assignment
a.replace('l','z',1)
'hezlo, world!'
a.replace('l','z')
'hezzo, worzd!'
אפשר לקבל עזרה על פונקציות ואובייקטים באמצעות הפונקציה help()
help(str)
help("a")
help("a".replace)
?"a" #In Ipython
ניתן להכניס משתנים לתוך מחרוזות (כמו ב-printf ב-c)
"an integer %d" % 42
'an integer 42'
pi = 3.1415
"an integer %d, a float %f, and a string %s" % (42, pi, "moo")
'and integer 42, a float 3.141500, and a string moo'
"formated float %.2f" % pi
'formated float 3.14'
ועוד הרבה אחרים. פייתון מאוד חזק בכל הנוגע למניפולציה על מחרוזות.
טבלה שממפה מפתח (key) לערך (value)
tel = {"Noam": 1234,
"Irit" : 5678,
"Ronen" : 9123 }
tel
{'Irit': 5678, 'Noam': 1234, 'Ronen': 9123}
tel["Noam"]
1234
ניתן לשנות את ערכו של מפתח במילון, או להוסיף מפתח חדש,
tel["Noam"] = 4675
tel
{'Irit': 5678, 'Noam': 4675, 'Ronen': 9123}
tel["Shira"] = 111
tel
{'Irit': 5678, 'Noam': 4675, 'Ronen': 9123, 'Shira': 111}
לשלוף את המפתחות או הערכים,
tel.keys()
['Shira', 'Noam', 'Ronen', 'Irit']
tel.values()
[111, 4675, 9123, 5678]
כמו רשימות, אבל אי אפשר לשנות אותן. נשמע קצת מטופש, אבל נשתמש בהן הרבה בהמשך.
t = 123, "abc", 2j+1
t
(123, 'abc', (1+2j))
פעולות השמה משמשות להצבת שמות לערכים, ועל מנת לשנות את ההפרטים באובייקטים שניתנים לשנות אותם (כמו רשימות, להבדיל מו-tuples)
בקצרה, השמה מתבצעת כדלהלן :
a = [1,2,3]
b = a
a
[1, 2, 3]
b
[1, 2, 3]
a is b
True
b[1] = "hi"
a
[1, 'hi', 3]
לביצוע במפענח.