1. 程式人生 > 其它 >Python基礎-第009課:布林值、格式化字串、迴圈

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 == yx 等於y
x < yx小於y
x > yx大於y
x >= yx大於或等於y
x <= yx小於或等於y
x != yx不等於y
x is yx和y是同一個物件
x is not yx和y是不同的物件
x in yx是容器(如序列)y的成員
x not in yx不是容器(如序列)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迴圈。