用python編寫運作一個傳統的“hello world”程式。通過它,你将學會如何編寫、儲存和運作python程式。
有兩種使用python運作你的程式的方式
字元串是 字元的序列 。字元串基本上就是一組單詞。
在每個python程式中都要用到字元串,是以請特别留心下面這部分的内容。下面告訴你如何在python中使用字元串。
使用單引号(')
你可以用單引号訓示字元串,就如同<code>'quote me on this'</code>這樣。所有的空白,即空格和制表符都照原樣保留。
使用雙引号(")
在雙引号中的字元串與單引号中的字元串的使用完全相同,例如<code>"what's your name?"</code>。
使用三引号('''或""")
利用三引号,你可以訓示一個多行的字元串。你可以在三引号中自由的使用單引号和雙引号。例如:
轉義符
假設你想要在一個字元串中包含一個單引号('),那麼你該怎麼訓示這個字元串?例如,這個字元串是<code>what's your name?</code>。你肯定不會用<code>'what's your name?'</code>來訓示它,因為python會弄不明白這個字元串從何處開始,何處結束。是以,你需要指明單引号而不是字元串的結尾。可以通過轉義符 來完成這個任務。你用<code>\'</code>來訓示單引号——注意這個反斜杠。現在你可以把字元串表示為<code>'what\'s your name?'</code>。
另一個表示這個特别的字元串的方法是<code>"what's your name?"</code>,即用雙引号。類似地,要在雙引号字元串中使用雙引号本身的時候,也可以借助于轉義符。另外,你可以用轉義符<code>\\</code>來訓示反斜杠本身。
值得注意的一件事是,在一個字元串中,行末的單獨一個反斜杠表示字元串在下一行繼續,而不是開始一個新的行。例如:
自然字元串
如果你想要訓示某些不需要如轉義符那樣的特别處理的字元串,那麼你需要指定一個自然字元串。自然字元串通過給字元串加上字首<code>r</code>或<code>r</code>來指定。
unicode字元串
unicode是書寫國際文本的标準方法。如果你想要用你的母語如北印度語或阿拉伯語寫文本,那麼你需要有一個支援unicode的編輯器。類似地,python允許你處理unicode文本——你隻需要在字元串前加上字首<code>u</code>或<code>u</code>。例如,<code>u"this is a unicode string."</code>。
記住,在你處理文本檔案的時候使用unicode字元串,特别是當你知道這個檔案含有用非英語的語言寫的文本。
字元串是不可變的
一旦你創造了一個字元串,你就不能再改變它了。雖然這看起來像是一件壞事,但實際上它不是。我們将會在後面的程式中看到為什麼我們說它不是一個缺點。
空白在python中是重要的。事實上行首的空白是重要的。它稱為縮進。在邏輯行首的空白(空格和制表符)用來決定邏輯行的縮進層次,進而用來決定語句的分組。
這意味着同一層次的語句必須有相同的縮進。每一組這樣的語句稱為一個塊。我們将在後面的章節中看到有關塊的用處的例子。
你需要記住的一樣東西是錯誤的縮進會引發錯誤。例如:

<code></code>
注意,在第二行的行首有一個空格。python訓示的這個錯誤告訴我們程式的文法是無效的,即程式沒有正确地編寫。它告訴你, 你不能随意地開始新的語句塊 (當然除了你一直在使用的主塊)。
如何縮進
不要混合使用制表符和空格來縮進,因為這在跨越不同的平台的時候,無法正常工作。我 強烈建議 你在每個縮進層次使用單個制表符 或兩個或四個空格 。
選擇這三種縮進風格之一。更加重要的是,選擇一種風格,然後一貫地使用它,即 隻 使用這一種風格。
運算符與它們的用法
運算符
名稱
說明
例子
+
加
兩個對象相加
3 + 5得到8。'a' + 'b'得到'ab'。
-
減
得到負數或是一個數減去另一個數
-5.2得到一個負數。50 - 24得到26。
*
乘
兩個數相乘或是傳回一個被重複若幹次的字元串
2 * 3得到6。'la' * 3得到'lalala'。
**
幂
傳回x的y次幂
3 ** 4得到81(即3 * 3 * 3 * 3)
/
除
x除以y
4/3得到1(整數的除法得到整數結果)。4.0/3或4/3.0得到1.3333333333333333
//
取整除
傳回商的整數部分
4 // 3.0得到1.0
%
取模
傳回除法的餘數
8%3得到2。-25.5%2.25得到1.5
<<
左移
把一個數的比特向左移一定數目(每個數在記憶體中都表示為比特或二進制數字,即0和1)
2 << 2得到8。——2按比特表示為10
>>
右移
把一個數的比特向右移一定數目
11 >> 1得到5。——11按比特表示為1011,向右移動1比特後得到101,即十進制的5。
&
按位與
數的按位與
5 & 3得到1。
|
按位或
數的按位或
5 | 3得到7。
^
按位異或
數的按位異或
5 ^ 3得到6
~
按位翻轉
x的按位翻轉是-(x+1)
~5得到6。
<
小于
傳回x是否小于y。所有比較運算符傳回1表示真,傳回0表示假。這分别與特殊的變量true和false等價。注意,這些變量名的大寫。
5 < 3傳回0(即false)而3 < 5傳回1(即true)。比較可以被任意連接配接:3 < 5 < 7傳回true。
>
大于
傳回x是否大于y
5 > 3傳回true。如果兩個操作數都是數字,它們首先被轉換為一個共同的類型。否則,它總是傳回false。
<=
小于等于
傳回x是否小于等于y
x = 3; y = 6; x <= y傳回true。
>=
大于等于
傳回x是否大于等于y
x = 4; y = 3; x >= y傳回true。
==
等于
比較對象是否相等
x = 2; y = 2; x == y傳回true。x = 'str'; y = 'str'; x == y傳回false。x = 'str'; y = 'str'; x == y傳回true。
!=
不等于
比較兩個對象是否不相等
x = 2; y = 3; x != y傳回true。
not
布爾“非”
如果x為true,傳回false。如果x為false,它傳回true。
x = true; not y傳回false。
and
布爾“與”
如果x為false,x and y傳回false,否則它傳回y的計算值。
x = false; y = true; x and y,由于x是false,傳回false。在這裡,python不會計算y,因為它知道這個表達式的值肯定是false(因為x是false)。這個現象稱為短路計算。
or
布爾“或”
如果x是true,它傳回true,否則它傳回y的計算值。
x = true; y = false; x or y傳回true。短路計算在這裡也适用。
運算符優先級
描述
lambda
lambda表達式
not x
in,not in
成員測試
is,is not
同一性測試
<,<=,>,>=,!=,==
比較
<<,>>
移位
+,-
加法與減法
*,/,%
乘法、除法與取餘
+x,-x
正負号
~x
指數
x.attribute
屬性參考
x[index]
下标
x[index:index]
尋址段
f(arguments...)
函數調用
(experession,...)
綁定或元組顯示
[expression,...]
清單顯示
{key:datum,...}
字典顯示
'expression,...'
字元串轉換
在python中有三種控制流語句——<code>if</code>、<code>for</code>和<code>while</code>
<code><code>使用if語句</code></code>
注意
我們使用了縮進層次來告訴python每個語句分别屬于哪一個塊。這就是為什麼縮進在python如此重要的原因。<code>elif</code>和<code>else</code>從句都必須在邏輯行結尾處有一個冒号,下面跟着一個相應的語句塊(當然還包括正确的縮進)。
使用while語句
我們把<code>raw_input</code>和<code>if</code>語句移到了<code>while</code>循環内,并且在while循環開始前把<code>running</code>變量設定為<code>true</code>。首先,我們檢驗變量<code>running</code>是否為<code>true</code>,然後執行後面的while-塊 。在執行了這塊程式之後,再次檢驗條件,在這個例子中,條件是<code>running</code>變量。如果它是真的,我們再次執行while-塊,否則,繼續執行可選的else-塊,并接着執行下一個語句。
當<code>while</code>循環條件變為<code>false</code>的時候,<code>else</code>塊才被執行——這甚至也可能是在條件第一次被檢驗的時候。如果<code>while</code>循環有一個<code>else</code>從句,它将始終被執行,除非你的<code>while</code>循環将永遠循環下去不會結束!
<code>true</code>和<code>false</code>被稱為布爾類型。你可以分别把它們等效地了解為值<code>1</code>和<code>0</code>。在檢驗重要條件的時候,布爾類型十分重要,它們并不是真實的值<code>1</code>。
else塊事實上是多餘的,因為你可以把其中的語句放在同一塊(與<code>while</code>相同)中,跟在<code>while</code>語句之後,這樣可以取得相同的效果。
使用for語句
我們所做的隻是提供兩個數,<code>range</code>傳回一個序列的數。這個序列從第一個數開始到第二個數為止。例如,<code>range(1,5)</code>給出序列<code>[1, 2, 3, 4]</code>。預設地,<code>range</code>的步長為1。如果我們為<code>range</code>提供第三個數,那麼它将成為步長。例如,<code>range(1,5,2)</code>給出<code>[1,3]</code>。記住,range向上 延伸到第二個數,即它不包含第二個數。
<code>for</code>循環在這個範圍内遞歸——<code>for i in range(1,5)</code>等價于<code>for i in [1, 2, 3, 4]</code>,這就如同把序列中的每個數(或對象)指派給i,一次一個,然後以每個<code>i</code>的值執行這個程式塊。在這個例子中,我們隻是列印i的值。
記住,<code>for..in</code>循環對于任何序列都适用。這裡我們使用的是一個由内建<code>range</code>函數生成的數的清單,但是廣義說來我們可以使用任何種類的由任何對象組成的序列!