第三章 基本使用
last edited 2 months ago by panjy
下面我們用例子來介紹Python的基本用法。在例子中,用戶輸入和系統輸出靠有沒有提示 (>>>和...)來分別。如果要試這些例子的話,需要鍵入提示後的所有命令,例子 中沒有提示的行是系統的輸出。注意只有次提示的行意味著需要鍵入一個空行,這用於結束 多行命令。
3.1 用Python作計算器使用
啟動解釋程序,等待主提示>>>出現。解釋程序可以作為計算器使用。鍵入一個 表達式,解釋程序就可以輸出結果。表達式的寫法很直觀:+,-,*,/, %, **等算符的作用 和其它大多數語言(如Pascal或C)沒什麼差別,括號可以用來組合。例如:
>>> 2+2
4
>>> # 這是一個注釋
... 2+2
4
>>> 2+2 # 和代碼在同一行的注釋
4
>>> (50-5*6)/4
5
>>> # 整數除法得下面的整數
... 7/3
2
>>> 7/-3
-3
>>>
和C中一樣,等於號用來給變量賦值,賦值的結果不顯示:
>>> width = 20
>>> height = 5*9
>>> width * height
900
>>>
可以同時給幾個變量賦同一個值:
>>> x = y = z = 0 # 把 x, y 和 z賦零
>>> x
0
>>> y
0
>>> z
0
>>>
Python完全支持浮點數,混合類型的運算會把整數先轉換成浮點數:
>>> 4 * 2.5 / 3.3
3.0303030303
>>> 7.0 / 2
3.5
>>>
Python也提供了復數,方法是用j和J作為虛數單位,如1+1j,3.14e-10j,等等。
3.2. 字符串
Python除處理數字外還可以處理字符串,字符串用單撇號或雙撇號包裹:
>>> 'spam eggs'
'spam eggs'
>>> 'doesn't'
"doesn't"
>>> "doesn't"
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> ""Yes," he said."
'"Yes," he said.'
>>> '"Isn't," she said.'
'"Isn't," she said.'
>>>
字符串輸出格式與輸入的樣子相同,都是用撇號包裹,撇號和其它特殊字符用用反斜槓轉 義。如果字符串中有單撇號而沒有雙撇號則用雙撇號包裹,否則應該用單撇號包裹。後面要 介紹的print語句可以不帶撇號或轉義輸出字符串。
字符串可以用+號連接起來,用*號重復:
>>> Word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'
>>>
字符串可以象在C中那樣用下標索引,字符串的第一個字符下標為0。
Python沒有單獨的字符數據類型,一個字符就是長度為一的字符串。象在Icon語言中那樣 ,可以用片段(slice)記號來指定子串,片段即用冒號隔開的兩個下標。
>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
>>>
片段有很好的缺省值:第一下標省略時缺省為零,第二下標省略時缺省為字符串的長度。
>>> word[:2] # 前兩個字符
'He'
>>> word[2:] # 除前兩個字符串外的部分
'lpA'
>>>
注意s[:i]? + s[i:]? 等於 s 是片段運算的一個有用的恆等式。
>>> word[:2] + word[2:]
'HelpA'
>>> word[:3] + word[3:]
'HelpA'
>>>
不合理的片段下標可以很好地得到解釋:過大的下標被換成字符串長度,上界小於下界時 返回空串。
>>> word[1:100]
'elpA'
>>> word[10:]
''
>>> word[2:1]
''
>>>
下標允許為負數,這時從右向左數。例如:
>>> word[-1] # 最後一個字符
'A'
>>> word[-2] # 倒數第二個字符
'p'
>>> word[-2:] # 最後兩個字符
'pA'
>>> word[:-2] # 除最後兩個字符外的部分
'Hel'
>>>
但要注意的是 -0 實際還是 0,所以它不會從右向左數!
>>> word[-0] # (因為 -0 等於 0)
'H'
>>>
超出范圍的片段下標被截斷,但在非片段的情況下不要這樣:
>>> word[-100:]
'HelpA'
>>> word[-10] # 錯誤
Traceback (innermost last):
File "<stdin>", line 1
IndexError: string index out of range
>>>
記住片段意義的最好方法是把下標看成是字符 之間的點,第一個字符的左邊界號碼為0。有n個字符的字符串的最後一個字符的右邊 界下標為n,例如:
+---+---+---+---+---+
H e l p A
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1
第一行數字給出字符串中下標0到5的位置,第二行給出相應的負下標。從i到j的片段由在 邊界i和j之間的字符組成。
對於非負下標,如果下標都在界內,則片段的長度為下標的差。例如,word[1:3]? 的長度 為 2。
內置函數len()返回字符串的長度:
>>> s = 'supercalifragilisticeXPialidocious'
>>> len(s)
34
>>>
多行的長字符串也可以用行尾反斜槓續行,續行的行首空白不被忽略,如
hello = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
Note that whitespace at the beginning of the line is\
significant.\n"
print hello
結果為
This is a rather long string containing
several lines of text just as you would do in C.
Note that whitespace at the beginning of the line is significant.
對於特別長的字符串(比如包含說明的幾段文字),如果用上面的方式每行都用\n\結尾 是很麻煩的,特別是這樣無法用象Emacs這樣的功能強大的編輯器重新編排。對這種情況,可 以使用三重撇號,例如
hello = """
This string is bounded by triple double quotes (3 times ").
Unescaped newlines in the string are retained, though \
it is still possible\nto use all normal escape sequences.
Whitespace at the beginning of a line is
significant. If you need to include three opening quotes
you have to escape at least one of them, e.g. """.
This string ends in a newline.
"""
三重撇號字符串也可以用三個單撇號,沒有任何語義差別。
多行的字符串常量可以直接連接起來,字符串常量之間用空格分隔則在編譯時可以自動連 接起來,這樣可以把一個長字符串連接起來而不需要犧牲縮進對齊或性能,不象用加號連接 需要運算,也不象字符串串內的換行其行首空格需要保持。
3.3 列表
Python中有幾種復合數據類型,用來把其它值組合到一起。其中最靈活的是列表,可 以寫成在方括號之間用逗號隔開的若干值(項)。列表的項不必取同一類型。
>>> a = ['spam', 'eggs', 100, 1234]
>>> a
['spam', 'eggs', 100, 1234]
>>>
象字符串下標那樣,列表下標從0開始,列表可以取片段,可以連接,等等:
>>> a[0]
'spam'
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
['eggs', 100]
>>> a[:2] + ['bacon', 2*2]
['spam', 'eggs', 'bacon', 4]
>>> 3*a[:3] + ['Boe!']
['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boe!']
>>>
與字符串不同的是列表是可變的,可以修改列表的每個元素:
>>> a
['spam', 'eggs', 100, 1234]
>>> a[2] = a[2] + 23
>>> a
['spam', 'eggs', 123, 1234]
>>>
也可以給一個片段重新賦值,這甚至可以改變表的大小:
>>> # 替換若干項:
... a[0:2] = [1, 12]
>>> a
[1, 12, 123, 1234]
>>> # 去掉若干項:
... a[0:2] = []
>>> a
[123, 1234]
>>> # 插入若干項:
... a[1:1] = ['bletch', 'xyzzy']
>>> a
[123, 'bletch', 'xyzzy', 1234]
>>> a[:0] = a # 在開頭插入自身
>>> a
[123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]
>>>
內置函數也使用於列表:
>>> len(a)
8
>>>
可以建立嵌套列表(表的元素也是列表),如:
>>> q = [2, 3]
>>> p = [1, q, 4]
>>> len(p)
3
>>> p[1]
[2, 3]
>>> p[1][0]
2
>>> p[1].append('xtra') # 列表方法
>>> p
[1, [2, 3, 'xtra'], 4]
>>> q
[2, 3, 'xtra']
>>>
注意這個例子中p[1]?和q實際是同一個對象!也就是說它們只不過是同一個東西的兩個名 字(引用)而已。
3.4 編程初步
Python當然不是只能用來把兩個數加到一起,它可以完成很復雜的工作。例如,我們可以 寫出Fibonacci序列的開始幾個:
>>> # Fibonacci 序列:
... # 兩個元素的和定義下一個
... a, b = 0, 1
>>> while b < 10:
... print b
... a, b = b, a+b
...
1
1
2
3
5
8
>>>
這個例子介紹了幾個新特色。
第一行包含一個多重賦值: 變量a和b同時得到新值0和1。在最後一行又用了多重賦值, 我們可以看出賦值時先把右邊都算出後再進行賦值。
while循環當循環條件(這裡即: b < 10)成立時不斷執行。在Python中和C中一樣,非 零整數值為真值,零為假值。條件也可以是字符串或列表或任何序列,長度為非零的為真, 空序列為假。例子中所用的是一個簡單比較。標准的比較算符和C一樣:
<, >, ==, <=, >= 和 !=。
循環體是縮進的:縮進是Python用來組合語句的方式。Python目前還不能提供智能自動縮 進,所以你需要自己為每個縮進行鍵入制表符或空格。實際使用中你可以用文本編輯程序為Python 准備復雜的輸入,多數文本編輯程序都有自動縮進的功能。在交互輸入復合語句時必修附加 一個空行以指示復合語句的完成(因為解釋程序無法猜到哪是語句的最後一行)。print語句 顯示後面的表達式值。這和直接寫出表達式不同,它可以顯示多個表達式和字符串,而且可 以用於程序文件中。顯示時字符串沒有撇號,各項目之間插入一個空格,所以你可以以精美 的格式顯示,如:
>>> i = 256*256
>>> print 'The value of i is', i
The value of i is 65536
>>>
在尾部寫一個逗號可以避免最後換行:
>>> a, b = 0, 1
>>> while b < 1000:
... print b,
... a, b = b, a+b
...
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>>
注意如果前一行沒有結束的話系統在顯示提示之前先換行。
Python還提供了和C語言一樣的printf格式的輸出方式,這是用%實現的,左邊是格式,如:
>>> print 'The value of 1/7 is approximately %5.3f.' % 0.142857
The value of 1/7 is approximately 0.143.
>>>
如果有多個需要輸出的項百分號右邊的項可以是一個序組,如
>>> print "Name: %-10s Age: %3d" % ("White", 31)
Name: White Age: 31
... a, b = b, a+b
...
1
1
2
3
5
8
>>>
這個例子介紹了幾個新特色。
第一行包含一個多重賦值: 變量a和b同時得到新值0和1。在最後一行又用了多重賦值, 我們可以看出賦值時先把右邊都算出後再進行賦值。
while循環當循環條件(這裡即: b < 10)成立時不斷執行。在Python中和C中一樣,非 零整數值為真值,零為假值。條件也可以是字符串或列表或任何序列,長度為非零的為真, 空序列為假。例子中所用的是一個簡單比較。標准的比較算符和C一樣:
<, >, ==, <=, >= 和 !=。
循環體是縮進的:縮進是Python用來組合語句的方式。Python目前還不能提供智能自動縮 進,所以你需要自己為每個縮進行鍵入制表符或空格。實際使用中你可以用文本編輯程序為Python 准備復雜的輸入,多數文本編輯程序都有自動縮進的功能。在交互輸入復合語句時必修附加 一個空行以指示復合語句的完成(因為解釋程序無法猜到哪是語句的最後一行)。print語句 顯示後面的表達式值。這和直接寫出表達式不同,它可以顯示多個表達式和字符串,而且可 以用於程序文件中。顯示時字符串沒有撇號,各項目之間插入一個空格,所以你可以以精美 的格式顯示,如:
>>> i = 256*256
>>> print 'The value of i is', i
The value of i is 65536
>>>
在尾部寫一個逗號可以避免最後換行:
>>> a, b = 0, 1
>>> while b < 1000:
... print b,
... a, b = b, a+b
...
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>>
注意如果前一行沒有結束的話系統在顯示提示之前先換行。
Python還提供了和C語言一樣的printf格式的輸出方式,這是用%實現的,左邊是格式,如:
>>> print 'The value of 1/7 is approximately %5.3f.' % 0.142857
The value of 1/7 is approximately 0.143.
>>>
如果有多個需要輸出的項百分號右邊的項可以是一個序組,如
>>> print "Name: %-10s Age: %3d" % ("White", 31)
Name: White Age: 31
...
1
1
2
3
5
8
>>>
這個例子介紹了幾個新特色。
第一行包含一個多重賦值: 變量a和b同時得到新值0和1。在最後一行又用了多重賦值, 我們可以看出賦值時先把右邊都算出後再進行賦值。
while循環當循環條件(這裡即: b < 10)成立時不斷執行。在Python中和C中一樣,非 零整數值為真值,零為假值。條件也可以是字符串或列表或任何序列,長度為非零的為真, 空序列為假。例子中所用的是一個簡單比較。標准的比較算符和C一樣:
<, >, ==, <=, >= 和 !=。
循環體是縮進的:縮進是Python用來組合語句的方式。Python目前還不能提供智能自動縮 進,所以你需要自己為每個縮進行鍵入制表符或空格。實際使用中你可以用文本編輯程序為Python 准備復雜的輸入,多數文本編輯程序都有自動縮進的功能。在交互輸入復合語句時必修附加 一個空行以指示復合語句的完成(因為解釋程序無法猜到哪是語句的最後一行)。print語句 顯示後面的表達式值。這和直接寫出表達式不同,它可以顯示多個表達式和字符串,而且可 以用於程序文件中。顯示時字符串沒有撇號,各項目之間插入一個空格,所以你可以以精美 的格式顯示,如:
>>> i = 256*256
>>> print 'The value of i is', i
The value of i is 65536
>>>
在尾部寫一個逗號可以避免最後換行:
>>> a, b = 0, 1
>>> while b < 1000:
... print b,
... a, b = b, a+b
...
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>>
注意如果前一行沒有結束的話系統在顯示提示之前先換行。
Python還提供了和C語言一樣的printf格式的輸出方式,這是用%實現的,左邊是格式,如:
>>> print 'The value of 1/7 is approximately %5.3f.' % 0.142857
The value of 1/7 is approximately 0.143.
>>>
如果有多個需要輸出的項百分號右邊的項可以是一個序組,如
>>> print "Name: %-10s Age: %3d" % ("White", 31)
Name: White Age: 31