Python基礎-第009課:布林值、格式化字串、迴圈
Python基礎-第009課:布林值、格式化字串、迴圈
9.1 布林值
用作布林表示式時,下面的值將被解析器視為假(False),而其它的各種值視為真,
False 、 None 、0、 “” 、 () 、[]、 {}
bool函式與list、str和tuple一樣,可用來轉換其他的值。
>>> bool('I think, therefore I am')
True
>>> bool(42)
True
>>> bool('')
False
>>> bool(0)
False
注意 雖然
[]和""
都為假(即bool([]) == bool("") == False
),但它們並不相等(即[] != ""
)。對其他各種為假的物件來說,情況亦如此(一個更顯而易見的例子是() != False
)。
9.1.1 更復雜的條件
1. 比較運算子
表9-1 Python比較運算子
表 達 式 | 描 述 |
---|---|
x == y | x 等於y |
x < y | x小於y |
x > y | x大於y |
x >= y | x大於或等於y |
x <= y | x小於或等於y |
x != y | x不等於y |
x is y | x和y是同一個物件 |
x is not y | x和y是不同的物件 |
x in y | x是容器(如序列)y的成員 |
x not in y | x不是容器(如序列)y的成員 |
與賦值一樣,Python也支援鏈式比較:可同時使用多個比較運算子,如0 < age < 100
。
9.2 格式化字串
用字串的format()
方法,每個替換欄位都用花括號括起,其中可能包含名稱,還可能包含有關如何對相應的值進行轉換和格式設定的資訊。
在最簡單的情況下,替換欄位沒有名稱或將索引用作名稱。
>>> "{}, {} and {}".format("first", "second", "third") 'first, second and third' >>> "{0}, {1} and {2}".format("first", "second", "third") 'first, second and third'
然而,索引無需像上面這樣按順序排列。
>>> "{3} {0} {2} {1} {3} {0}".format("be", "not", "or", "to")
'to be or not to be'
命名欄位方法。
>>> from math import pi
>>> "{name} is approximately {value:.2f}.".format(value=pi, name="π")
'π is approximately 3.14.'
當然,關鍵字引數的排列順序無關緊要。在這裡,我還指定了格式說明符.2f
,並使用冒號將其與欄位名隔開。它意味著要使用包含2位小數的浮點數格式。如果沒有指定.2f
,結果將如下:
>>> "{name} is approximately {value}.".format(name="π", value=pi)
'π is approximately 3.141592653589793.'
最後,如果變數與替換欄位同名,還可使用一種簡寫。在這種情況下,可使用f字串——在字串前面加上f。
>>> from math import pi
>>> f"π is roughly {pi}."
"π is roughly 3.141592653589793."
在這裡,建立最終的字串時,將把替換欄位pi替換為變數pi的值。這與下面這個更明確一些
的表示式等價:
>>> "π is roughly {pi}.".format(pi=pi)
"π is roughly 3.141592653589793."
9.3 迴圈
看一個簡單的例子,假設要列印1~100的所有數。同樣,你可採用笨辦法。
print(1)
print(2)
print(3)
...
print(9)
print(10)
但如果你願意使用笨辦法,就不會求助於Python了,不是嗎?
9.4 while 迴圈
為避免前述示例所示的繁瑣程式碼,能夠像下面這樣做很有幫助:
x = 1
while x <= 10:
print(x)
x += 1
你還可以使用迴圈來確保使用者輸入名字,如下所示:
name = ''
while not name:
name = input('Please enter your name: ')
print('Hello, {}!'.format(name))
請嘗試執行這些程式碼,並在要求你輸入名字時直接按回車鍵。你會看到提示資訊再次出現,因為name還是為空字串,這相當於假。
提示 如果你只是輸入一個空格字元(將其作為你的名字),結果將如何呢?試試看。程式將接受這個名字,因為包含一個空格字元的字串不是空的,因此不會將name視為假。這無疑是這個小程式的一個瑕疵,但很容易修復:只需將
while not name
改為:
while not name or name.isspace()
或while not name.strip()
即可。
9.5 for迴圈
while語句非常靈活,可用於在條件為真時反覆執行程式碼塊。這在通常情況下很好,但有時候你可能想根據需要進行定製。一種這樣的需求是為序列(或其他可迭代物件)中每個元素執行程式碼塊。
注意 基本上,可迭代物件是可使用for迴圈進行遍歷的物件。以後將詳細介紹可迭代物件和迭代器。就目前而言,只需將可迭代物件視為序列即可。為此,可使用for語句:
words = ['this', 'is', 'an', 'ex', 'parrot']
for word in words:
print(word)
或
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in numbers:
print(number)
鑑於迭代(也就是遍歷)特定範圍內的數是一種常見的任務,Python提供了一個建立範圍的內建函式。
>>> range(0, 10)
range(0, 10)
>>> list(range(0, 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> tuple(range(0, 10))
(0, 1, 2, 3, 4, 5, 6, 7, 8,9)
範圍類似於切片。它們包含起始位置(這裡為0),但不包含結束位置(這裡為10)。在很多情況下,你都希望範圍的起始位置為0。實際上,如果只提供了一個位置,將把這個位置視為結束位置,並假定起始位置為0。
>>> range(10)
range(0, 10)
下面的程式列印數1~100:
for number in range(1,101):
print(number)
注意,相比前面使用的while迴圈,這些程式碼要緊湊得多。
提示 只要能夠使用for迴圈,就不要使用while迴圈。