天天看點

簡明Python教程學習筆記_1_基本字元串縮進控制流

用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中是重要的。事實上行首的空白是重要的。它稱為縮進。在邏輯行首的空白(空格和制表符)用來決定邏輯行的縮進層次,進而用來決定語句的分組。

這意味着同一層次的語句必須有相同的縮進。每一組這樣的語句稱為一個塊。我們将在後面的章節中看到有關塊的用處的例子。

你需要記住的一樣東西是錯誤的縮進會引發錯誤。例如:

簡明Python教程學習筆記_1_基本字元串縮進控制流

<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

&lt;&lt;

左移

把一個數的比特向左移一定數目(每個數在記憶體中都表示為比特或二進制數字,即0和1)

2 &lt;&lt; 2得到8。——2按比特表示為10

&gt;&gt;

右移

把一個數的比特向右移一定數目

11 &gt;&gt; 1得到5。——11按比特表示為1011,向右移動1比特後得到101,即十進制的5。

&amp;

按位與

數的按位與

5 &amp; 3得到1。

|

按位或

數的按位或

5 | 3得到7。

^

按位異或

數的按位異或

5 ^ 3得到6

~

按位翻轉

x的按位翻轉是-(x+1)

~5得到6。

&lt;

小于

傳回x是否小于y。所有比較運算符傳回1表示真,傳回0表示假。這分别與特殊的變量true和false等價。注意,這些變量名的大寫。

5 &lt; 3傳回0(即false)而3 &lt; 5傳回1(即true)。比較可以被任意連接配接:3 &lt; 5 &lt; 7傳回true。

&gt;

大于

傳回x是否大于y

5 &gt; 3傳回true。如果兩個操作數都是數字,它們首先被轉換為一個共同的類型。否則,它總是傳回false。

&lt;=

小于等于

傳回x是否小于等于y

x = 3; y = 6; x &lt;= y傳回true。

&gt;=

大于等于

傳回x是否大于等于y

x = 4; y = 3; x &gt;= 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

同一性測試

&lt;,&lt;=,&gt;,&gt;=,!=,==

比較

&lt;&lt;,&gt;&gt;

移位

+,-

加法與減法

*,/,%

乘法、除法與取餘

+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>函數生成的數的清單,但是廣義說來我們可以使用任何種類的由任何對象組成的序列!