python之禅星号_Python基础1
介紹Python基礎(chǔ),包括變量和簡(jiǎn)單數(shù)據(jù)類型、列表基礎(chǔ)、操作列表、if語(yǔ)句、字典、輸入函數(shù)和while循環(huán)
在文件名和文件夾名中,最好使用小寫字母,并使用下劃線來(lái)表示空格,因?yàn)檫@是Python采用的命名約定
如果輸出的時(shí)間太長(zhǎng),按Ctrl + C停止輸出,或關(guān)閉輸出窗口
每當(dāng)要運(yùn)行Python代碼片段時(shí),都請(qǐng)打開一個(gè)命令窗口并啟動(dòng)Python終端會(huì)話。要關(guān)閉該終端會(huì)話,可按Ctrl + Z,再按回車鍵,也可執(zhí)行命令exit() 。
python.org:瀏覽Python主頁(yè)(http://python.org/),尋找你感興趣的主題。你對(duì)Python越熟悉,這個(gè)網(wǎng)站對(duì)你來(lái)說(shuō)就越有用。
每個(gè)變量都存儲(chǔ)了一個(gè)值——與變量相關(guān)聯(lián)的信息。在程序中可隨時(shí)修改變量的值,而Python將始終記錄變量的最新值。
程序存在錯(cuò)誤時(shí),Python解釋器將竭盡所能地幫助你找出問題所在。程序無(wú)法成功地運(yùn)行時(shí),解釋器會(huì)提供一個(gè)traceback。traceback是一條記錄,指出了解釋器嘗試運(yùn)行代碼時(shí),在什么地方陷入了困境。
名稱錯(cuò)誤通常意味著兩種情況:要么是使用變量前忘記了給它賦值,要么是輸入變量名時(shí)拼寫不正確。
方法是Python可對(duì)數(shù)據(jù)執(zhí)行的操作。在name.title()中,name后面的句點(diǎn)(.)讓Python對(duì)變量name執(zhí)行方法title()指定的操作。每個(gè)方法后面都跟著一對(duì)括號(hào),這是因?yàn)榉椒ㄍǔP枰~外的信息來(lái)完成其工作。這種信息是在括號(hào)內(nèi)提供的。函數(shù)title()不需要額外的信息,因此它后面的括號(hào)是空的。title()以首字母大寫的方式顯示每個(gè)單詞,即將每個(gè)單詞的首字母都改為大寫。
要將字符串改為全部大寫或全部小寫的處理方法:upper()、lower()。存儲(chǔ)數(shù)據(jù)時(shí),方法lower()很有用。很多時(shí)候,你無(wú)法依靠用戶來(lái)提供正確的大小寫,因此需要將字符串先轉(zhuǎn)換為小寫,再存儲(chǔ)它們。以后需要顯示這些信息時(shí),再將其轉(zhuǎn)換為最合適的大小寫方式。
使用加號(hào)(+)來(lái)合并字符串。這種合并字符串的方法稱為 拼接 。通過拼接,可使用存儲(chǔ)在變量中的信息來(lái)創(chuàng)建完整的消息。
要在字符串中添加制表符,可使用字符組合\t,eg:print("\tPython")
要在字符串中添加換行符,可使用字符組合\n,eg:print("C\nJavaScript\n")
Python能夠找出字符串開頭和末尾多余的空白。要確保字符串末尾沒有空白,可使用方法rstrip()。然而,這種刪除只是暫時(shí)的,接下來(lái)再次詢問 該變量的值時(shí),你會(huì)發(fā)現(xiàn)這個(gè)字符串與輸入時(shí)一樣,依然包含多余的空白。要永久刪除這個(gè)字符串中的空白,必須將刪除操作的結(jié)果存回到變量中。你還可以剔除字符串開頭的空白,或同時(shí)剔除字符串兩端的空白。為此,可分別使用方法lstrip()和strip():
使用兩個(gè)乘號(hào)表示乘方運(yùn)算,空格不影響Python計(jì)算表達(dá)式的方式,它們的存在旨在讓你閱讀代碼時(shí),能迅速確定先執(zhí)行哪些運(yùn)算。Python將帶小數(shù)點(diǎn)的數(shù)字都稱為浮點(diǎn)數(shù)。
但需要注意的是,結(jié)果包含的小數(shù)位數(shù)可能是不確定的:所有語(yǔ)言都存在這種問題,沒有什么可擔(dān)心的。Python會(huì)盡力找到一種方式,以盡可能精確地表示結(jié)果,但鑒于計(jì)算機(jī)內(nèi)部表示數(shù)字的方式,這在有些情況下很難。就現(xiàn)在而言,
暫時(shí)忽略多余的小數(shù)位數(shù)即可。eg:>>> 0.2 + 0.1??? 0.30000000000000004
調(diào)用函數(shù)str(),Python將非字符串值表示為字符串:
Python社區(qū)的理念都包含在Tim Peters撰寫的“Python之禪”中。要獲悉這些有關(guān)編寫優(yōu)秀Python代碼的指導(dǎo)原則,只需在解釋器中執(zhí)行命令import this。
列表
列表由一系列按特定順序排列的元素組成。在Python中,用方括號(hào)([])來(lái)表示列表,并用逗號(hào)來(lái)分隔其中的元素。列表是有序集合,因此要訪問列表的任何元素,只需將該元素的位置或索引告訴Python即可。要訪問列表元素,可指出列表的名稱,再指出元素的索引,并將其放在方括號(hào)內(nèi)。在Python中,第一個(gè)列表元素的索引為0,而不是1。Python為訪問最后一個(gè)列表元素提供了一種特殊語(yǔ)法。通過將索引指定為-1,可讓Python返回最后一個(gè)列表元素。
你創(chuàng)建的大多數(shù)列表都將是動(dòng)態(tài)的,這意味著列表創(chuàng)建后,將隨著程序的運(yùn)行增刪元素。要修改列表元素,可指定列表名和要修改的元素的索引,再指定該元素的新值。
方法append()將元素添加到了列表末尾,而不影響列表中的其他所有元素:eg: motorcycles.append('ducati')
方法insert()可在列表的任何位置添加新元素。需要指定新元素的索引和值。這種操作將列表中既有的每個(gè)元素都右移一個(gè)位置:eg: motorcycles.insert(0, 'ducati')
可以根據(jù)位置或值來(lái)刪除列表中的元素。如果知道要?jiǎng)h除的元素在列表中的位置,可使用del語(yǔ)句。eg:del motorcycles[0]使用del語(yǔ)句將值從列表中刪除后,你就無(wú)法再訪問它了。
方法pop()可刪除列表末尾的元素,并讓你能夠接著使用它。術(shù)語(yǔ)彈出(pop)源自這樣的類比:列表就像一個(gè)棧,而刪除列表末尾的元素相當(dāng)于彈出棧頂元素。eg: popped_motorcycle = motorcycles.pop()實(shí)際上也可以使用pop()來(lái)刪除列表中任何位置的元素,只需在括號(hào)中指定要?jiǎng)h除的元素的索引即可。eg: first_owned = motorcycles.pop(0)每當(dāng)使用pop()時(shí),被彈出的元素就不再在原列表中了。
根據(jù)值刪除元素,可使用方法remove(),在括號(hào)中寫入要?jiǎng)h除的值。方法remove()只刪除第一個(gè)指定的值。如果要?jiǎng)h除的值可能在列表中出現(xiàn)多次,就需要使用循環(huán)來(lái)判斷是否刪除了所有這樣的值。要?jiǎng)h除的值可以存儲(chǔ)在其他變量中,并被其他變量使用。
方法sort()永久性地修改了列表元素的排列順序。按與字母順序相反的順序排列列表元素,只需向sort()方法傳遞參數(shù)reverse=True。eg: cars.sort(reverse=True)
函數(shù)sorted()能夠按特定順序顯示列表元素,同時(shí)不影響它們?cè)诹斜碇械脑寂帕许樞颉g: sorted(cars)調(diào)用函數(shù)sorted()后,列表元素的排列順序并沒有變。如果要按與字母順序相反的順序顯示列表,也可向函數(shù)sorted()傳遞參數(shù)reverse=True。
要反轉(zhuǎn)列表元素的排列順序,可使用方法reverse()。reverse()不是指按與字母順序相反的順序排列列表元素,而只是反轉(zhuǎn)列表元素的排列順序:eg: cars.reverse()方法reverse()永久性地修改列表元素的排列順序,但可隨時(shí)恢復(fù)到原來(lái)的排列順序,為此只需對(duì)列表再次調(diào)用reverse()即可。
函數(shù)len()可快速獲悉列表的長(zhǎng)度。eg: len(cars)
操作列表
需要對(duì)列表中的每個(gè)元素都執(zhí)行相同的操作時(shí),可使用Python中的for循環(huán)。
eg:?magicians = ['alice', 'david', 'carolina']
for magician in magicians: (從列表magicians中取出一個(gè)名字,并將其存儲(chǔ)在變量magician中)
print(magician)
在for循環(huán)后面,沒有縮進(jìn)的代碼都只執(zhí)行一次,而不會(huì)重復(fù)執(zhí)行。
注意代碼縮進(jìn)錯(cuò)誤
for語(yǔ)句末尾的冒號(hào)告訴Python,下一行是循環(huán)的第一行。
在數(shù)據(jù)可視化中,處理的幾乎都是由數(shù)字(如溫度、距離、人口數(shù)量、經(jīng)度和緯度等)組成的集合,列表非常適合用于存儲(chǔ)數(shù)字集合。
函數(shù)range()讓Python從你指定的第一個(gè)值開始數(shù),并在到達(dá)你指定的第二個(gè)值后停止,因此輸出不包含第二個(gè)值(這里為5)。
eg: for value in range(1,5):
print(value)
要?jiǎng)?chuàng)建數(shù)字列表,可使用函數(shù)list()將range()的結(jié)果直接轉(zhuǎn)換為列表。如果將range()作為list()的參數(shù),輸出將為一個(gè)數(shù)字列表。
eg: numbers = list(range(1,6))
使用函數(shù)range()時(shí),還可指定步長(zhǎng)。在Python中,兩個(gè)星號(hào)(**)表示乘方運(yùn)算。
eg: even_numbers = list(range(2,11,2))
數(shù)字列表的最大值、最小值和總和:eg:min(digits)/ max(digits)/ sum(digits)
列表解析 將for循環(huán)和創(chuàng)建新元素的代碼合并成一行,并自動(dòng)附加新元素。
eg: squares = [value**2 for value in range(1,11)]表達(dá)式為value**2,它計(jì)算平方值。接下來(lái),編寫一個(gè)for循環(huán),用于給表達(dá)式提供值,再加上右方括號(hào)。在這個(gè)示例中,for循環(huán)為for value in range(1,11),它將值1~10提供給表達(dá)式value**2。
處理列表的部分元素——Python稱之為切片
要?jiǎng)?chuàng)建切片,可指定要使用的第一個(gè)元素和最后一個(gè)元素的索引。與函數(shù)range()一樣,Python在到達(dá)你指定的第二個(gè)索引前面的元素后停止。
eg: players[0:3]如果你沒有指定第一個(gè)索引,Python將自動(dòng)從列表開頭開始
如果要遍歷列表的部分元素,可在for循環(huán)中使用切片。
eg: for player in players[:3]:
要復(fù)制列表,可創(chuàng)建一個(gè)包含整個(gè)列表的切片,方法是同時(shí)省略起始索引和終止索引([:])。
eg: friend_foods = my_foods[:]將my_foods已有的的副本存儲(chǔ)到friend_foods,在其后對(duì)my_foods列表中元素的更改不會(huì)影響到friend_foods中的元素。
而friend_foods = my_foods則是讓Python將新變量friend_foods關(guān)聯(lián)到包含在my_foods中的列表,因此這兩個(gè)變量都指向同一個(gè)列表,兩個(gè)列表是相同的。
列表非常適合用于存儲(chǔ)在程序運(yùn)行期間可能變化的數(shù)據(jù)集。列表是可以修改的,這對(duì)處理網(wǎng)站的用戶列表或游戲中的角色列表至關(guān)重要。然而,有時(shí)候你需要?jiǎng)?chuàng)建一系列不可修改的元素,元組可以滿足這種需求。Python將不能修改的值稱為不可變的 ,而不可變的列表被稱為元組。試圖修改元組的操作是被禁止的(eg : dimensions[0] = 250)
使用圓括號(hào)來(lái)標(biāo)識(shí)。定義元組后,就可以使用索引來(lái)訪問其元素,就像訪問列表元素一樣。雖然不能修改元組的元素,但可以給存儲(chǔ)元組的變量賦值。因此,如果要修改前述矩形的尺寸,可重新定義整個(gè)元組:
eg : dimensions = (400, 100)將一個(gè)新元組存儲(chǔ)到變量dimensions中
若要提出Python語(yǔ)言修改建議,需要編寫Python改進(jìn)提案 (Python Enhancement Proposal,PEP)。PEP 8是最古老的PEP之一,它向Python程序員提供了代碼格式設(shè)置指南。
每條if語(yǔ)句的核心都是一個(gè)值為True或False的表達(dá)式,這種表達(dá)式被稱為 條件測(cè)試。Python根據(jù)條件測(cè)試的值為True還是False來(lái)決定是否執(zhí)行if語(yǔ)句中的代碼。如果條件測(cè)試的值為True,Python就執(zhí)行緊跟在if語(yǔ)句后面的代碼;如果為False,Python就忽略這些代碼。
大多數(shù)條件測(cè)試都將一個(gè)變量的當(dāng)前值同特定值進(jìn)行比較。最簡(jiǎn)單的條件測(cè)試檢查變量的值是否與特定值相等(==):不等(!=)
eg: >>> car = 'bmw'
>>> car == 'bmw'
True首先使用一個(gè)等號(hào)將car的值設(shè)置為'bmw',這種做法你已見過很多次。接下來(lái),使用兩個(gè)等號(hào)(==)檢查car的值是否為'bmw'。這個(gè)相等運(yùn)算符在它兩邊的值相等時(shí)返回True,否則返回False。在這個(gè)示例中,兩邊的值相等,因此Python返回True。
要檢查是否兩個(gè)條件都為True,可使用關(guān)鍵字and將兩個(gè)條件測(cè)試合而為一。為改善可讀性,可將每個(gè)測(cè)試都分別放在一對(duì)括號(hào)內(nèi),但并非必須這樣做。
eg: (age_0 >= 21) and (age_1 >= 21)
關(guān)鍵字or也能夠讓你檢查多個(gè)條件,但只要至少有一個(gè)條件滿足,就能通過整個(gè)測(cè)試。
要判斷特定的值是否已包含在列表中,可使用關(guān)鍵字in。
eg: >>> requested_toppings = ['mushrooms', 'onions', 'pineapple']
>>> 'mushrooms' in requested_toppings
True
還有些時(shí)候,確定特定的值未包含在列表中很重要;在這種情況下,可使用關(guān)鍵字not in。
eg: banned_users = ['andrew', 'carolina', 'david']
user = 'marie'
if user not in banned_users:
print(user.title() + ", you can post a response if you wish.")
布爾表達(dá)式 ,是條件測(cè)試的別名。與條件表達(dá)式一樣,布爾表達(dá)式的結(jié)果要么為True,要么為False。
if-else語(yǔ)句if-elif-else結(jié)構(gòu)測(cè)試通過后,Python將執(zhí)行緊跟在它后面的代碼,并跳過余下的測(cè)試。Python并不要求if-elif結(jié)構(gòu)后面必須有else代碼塊。
else是一條包羅萬(wàn)象的語(yǔ)句,只要不滿足任何if或elif中的條件測(cè)試,其中的代碼就會(huì)執(zhí)行,這可能會(huì)引入無(wú)效甚至惡意的數(shù)據(jù)。如果知道最終要測(cè)試的條件,應(yīng)考慮使用一個(gè)elif代碼塊來(lái)代替else代碼塊。這樣,你就可以肯定,僅當(dāng)滿足相應(yīng)的條件時(shí),你的代碼才會(huì)執(zhí)行。
有時(shí)候需檢查你關(guān)心的所有條件。在這種情況下,應(yīng)使用一系列不包含elif和else代碼塊的簡(jiǎn)單if語(yǔ)句。
eg: requested_toppings = ['mushrooms', 'extra cheese']
if 'mushrooms' in requested_toppings:
print("Adding mushrooms.")
if 'pepperoni' in requested_toppings:
print("Adding pepperoni.")
if 'extra cheese' in requested_toppings:
print("Adding extra cheese.")
print("\nFinished making your pizza!")
確定列表不是空的
eg: requested_toppings = []
if requested_toppings:在if語(yǔ)句中將列表名用在條件表達(dá)式中時(shí),Python將在列表至少包含一個(gè)元素時(shí)返回True,并在列表為空時(shí)返回False。
for requested_topping in requested_toppings:
print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")
else:
print("Are you sure you want a plain pizza?")
對(duì)于requested_toppings中的每個(gè)元素,都檢查它是否是比薩店供應(yīng)的配料,再?zèng)Q定是否在比薩中添加它:
eg: available_toppings = ['mushrooms', 'olives', 'green peppers','pepperoni', 'pineapple', 'extra cheese']如果比薩店供應(yīng)的配料是固定的,也可使用一個(gè)元組來(lái)存儲(chǔ)它們。
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
for requested_topping in requested_toppings:
if requested_topping in available_toppings:
print("Adding " + requested_topping + ".")
else:
print("Sorry, we don't have " + requested_topping + ".")
print("\nFinished making your pizza!")
在條件測(cè)試的格式設(shè)置方面,PEP 8提供的唯一建議是,在諸如==、>=和<=等比較運(yùn)算符兩邊各添加一個(gè)空格,
在Python中,字典是一系列鍵—值對(duì) 。每個(gè)鍵都與一個(gè)值相關(guān)聯(lián),你可以使用鍵來(lái)訪問與之相關(guān)聯(lián)的值。與鍵相關(guān)聯(lián)的值可以是數(shù)字、字符串、列表乃至字典。事實(shí)上,可將任何Python對(duì)象用作字典中的值。在Python中,字典用放在花括號(hào){}中的一系列鍵—值對(duì)表示,鍵—值對(duì)是兩個(gè)相關(guān)聯(lián)的值。指定鍵時(shí),Python將返回與之相關(guān)聯(lián)的值。鍵和值之間用冒號(hào)分隔,而鍵—值對(duì)之間用逗號(hào)分隔。在字典中,你想存儲(chǔ)多少個(gè)鍵—值對(duì)都可以,最簡(jiǎn)單的字典只有一個(gè)鍵—值對(duì)。
eg:alien_0 = {'color': 'green', 'points': 5}
print(alien_0['color'])
print(alien_0['points'])
要獲取與鍵相關(guān)聯(lián)的值,可依次指定字典名和放在方括號(hào)內(nèi)的鍵。
字典是一種動(dòng)態(tài)結(jié)構(gòu),可隨時(shí)在其中添加鍵—值對(duì)。要添加鍵—值對(duì),可依次指定字典名、用方括號(hào)括起的鍵和相關(guān)聯(lián)的值。
添加鍵—值對(duì)
eg: alien_0 = {'color': 'green', 'points': 5}
alien_0['x_position'] = 0
alien_0['y_position'] = 25
鍵—值對(duì)的排列順序與添加順序不同。Python不關(guān)心鍵—值對(duì)的添加順序,而只關(guān)心鍵和值之間的關(guān)聯(lián)關(guān)系。
可先使用一對(duì)空的花括號(hào)定義一個(gè)空字典,再分行添加各個(gè)鍵—值對(duì)。
eg: alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
使用字典來(lái)存儲(chǔ)用戶提供的數(shù)據(jù)或在編寫能自動(dòng)生成大量鍵—值對(duì)的代碼時(shí),通常都需要先定義一個(gè)空字典。
要修改字典中的值,可依次指定字典名、用方括號(hào)括起的鍵以及與該鍵相關(guān)聯(lián)的新值。
eg: alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
print("Original x-position: " + str(alien_0['x_position']))
#向右移動(dòng)外星人
#據(jù)外星人當(dāng)前速度決定將其移動(dòng)多遠(yuǎn)
if alien_0['speed'] == 'slow':
x_increment = 1
elif alien_0['speed'] == 'medium':
x_increment = 2
else:
#這個(gè)外星人的速度一定很快
x_increment = 3
#新位置等于老位置加上增量
alien_0['x_position'] = alien_0['x_position'] + x_increment
print("New x-position: " + str(alien_0['x_position']))通過修改外星人字典中的值,可改變外星人的行為。
對(duì)于字典中不再需要的信息,可使用del語(yǔ)句將相應(yīng)的鍵—值對(duì)徹底刪除。使用del語(yǔ)句時(shí),必須指定字典名和要?jiǎng)h除的鍵。
eg: alien_0 = {'color': 'green', 'points': 5}
del alien_0['points']注意 刪除的鍵 — 值對(duì)永遠(yuǎn)消失了。
字典可以存儲(chǔ)一個(gè)對(duì)象(如游戲中的一個(gè)外星人)的多種信息,但你也可以使用字典來(lái)存儲(chǔ)眾多對(duì)象的同一種信息。確定需要使用多行來(lái)定義字典時(shí),在輸入左花括號(hào)后按回車鍵,再在下一行縮進(jìn)四個(gè)空格,指定第一個(gè)鍵—值對(duì),并在它后面加上一個(gè)逗號(hào)。
eg: favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}在最后一個(gè)鍵—值對(duì)后面加上逗號(hào),為以后在下一行添加鍵—值對(duì)做好準(zhǔn)備。
將較長(zhǎng)的print語(yǔ)句分成多行, 按回車鍵進(jìn)入print語(yǔ)句的后續(xù)各行,并使用Tab鍵將它們對(duì)齊并縮進(jìn)一級(jí)。在print語(yǔ)句的最后一行末尾加上右括號(hào)。
遍歷所有的鍵—值對(duì)
eg: user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
for key, value in user_0.items():
print("\nKey: " + key)
print("Value: " + value)
編寫用于遍歷字典的for循環(huán),可聲明兩個(gè)變量,用于存儲(chǔ)鍵—值對(duì)中的鍵和值。對(duì)于這兩個(gè)變量,可使用任何名稱。for語(yǔ)句的第二部分包含字典名和方法items(),它返回一個(gè)鍵—值對(duì)列表。接下來(lái),for循環(huán)依次將每個(gè)鍵—值對(duì)存儲(chǔ)到指定的兩個(gè)變量中。
注意,即便遍歷字典時(shí),鍵 — 值對(duì)的返回順序也與存儲(chǔ)順序不同。Python不關(guān)心鍵 — 值對(duì)的存儲(chǔ)順序,而只跟蹤鍵和值之間的關(guān)聯(lián)關(guān)系。
在不需要使用字典中的值時(shí),方法keys()很有用。
eg: for name in favorite_languages.keys():代碼行讓Python提取字典favorite_languages中的所有鍵,并依次將它們存儲(chǔ)到變量name中。
遍歷字典時(shí),會(huì)默認(rèn)遍歷所有的鍵,因此,如果將上述代碼中的for name in favorite_languages.keys():替換為for name in favorite_languages:,輸出將不變。
eg: favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
friends = ['phil', 'sarah']
for name in favorite_languages.keys():
print(name.title())
if name in friends:
print(" Hi " + name.title() +
", I see your favorite language is " +
favorite_languages[name].title() + "!")
方法keys()并非只能用于遍歷;實(shí)際上,它返回一個(gè)列表,其中包含字典中的所有鍵,eg: if ?'erin' ?not ?in ?favorite_ languages.keys():
按順序遍歷字典中的所有鍵
字典總是明確地記錄鍵和值之間的關(guān)聯(lián)關(guān)系,但獲取字典的元素時(shí),獲取順序是不可預(yù)測(cè)的。一種辦法是在for循環(huán)中對(duì)返回的鍵進(jìn)行排序。為此,可使用函數(shù)sorted()來(lái)獲得按特定順序排列的鍵列表的副本:
eg: favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(name.title() + ", thank you for taking the poll.")
遍歷字典中的所有值
使用方法values(),它返回一個(gè)值列表,而不包含任何鍵。
eg: for language in favorite_languages.values():
這種做法提取字典中所有的值,而沒有考慮是否重復(fù)。為剔除重復(fù)項(xiàng),可使用集合(set)。集合類似于列表,但每個(gè)元素都必須是獨(dú)一無(wú)二的:
eg:for language in set(favorite_languages.values()):
通過對(duì)包含重復(fù)元素的列表調(diào)用set(),可讓Python找出列表中獨(dú)一無(wú)二的元素,并使用這些元素來(lái)創(chuàng)建一個(gè)集合。
有時(shí)候,需要將一系列字典存儲(chǔ)在列表中,或?qū)⒘斜碜鳛橹荡鎯?chǔ)在字典中,這稱為嵌套。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。
字典列表
eg: alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]
for alien in aliens:
print(alien)創(chuàng)建一個(gè)外星人列表,其中每個(gè)外星人都是一個(gè)字典,包含有關(guān)該外星人的各種信息。
eg: #創(chuàng)建一個(gè)用于存儲(chǔ)外星人的空列表每個(gè)外星人都是使用代碼自動(dòng)生成, 可以使用for循環(huán)和if語(yǔ)句來(lái)修改某些外星人的顏色。
aliens = []
#創(chuàng)建30個(gè)綠色的外星人
for alien_number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[0:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
#顯示前五個(gè)外星人
for alien in aliens[:5]:
print(alien)
print("...")
#顯示創(chuàng)建了多少個(gè)外星人
print("Total number of aliens: " + str(len(aliens)))
在字典中存儲(chǔ)列表
每當(dāng)需要在字典中將一個(gè)鍵關(guān)聯(lián)到多個(gè)值時(shí),都可以在字典中嵌套一個(gè)列表。
eg: favorite_languages = {
'jen': ['python', 'ruby'],
'sarah': ['c'],
'edward': ['ruby', 'go'],
'phil': ['python', 'haskell'],
}
for name, languages in favorite_languages.items():
print("\n" + name.title() + "'s favorite languages are:")
for language in languages:
print("\t" + language.title())?? ’ \t’制表符,Tab
為進(jìn)一步改進(jìn)這個(gè)程序,可在遍歷字典的for循環(huán)開頭添加一條if語(yǔ)句,通過查看len(languages)的值來(lái)確定當(dāng)前的被調(diào)查者喜歡的語(yǔ)言是否有多種。如果他喜歡的語(yǔ)言有多種,就像以前一樣顯示輸出;如果只有一種,就相應(yīng)修改輸出的措辭,如顯示Sarah's favorite language is C。
注意 列表和字典的嵌套層級(jí)不應(yīng)太多。如果嵌套層級(jí)比前面的示例多得多,很可能有更簡(jiǎn)單的解決問題的方案。
在字典中存儲(chǔ)字典
例如,如果有多個(gè)網(wǎng)站用戶,每個(gè)都有獨(dú)特的用戶名,可在字典中將用戶名作為鍵,然后將每位用戶的信息存儲(chǔ)在一個(gè)字典中,并將該字典作為與用戶名相關(guān)聯(lián)的值。
eg: users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris',
},
}
for username, user_info in users.items():
print("\nUsername: " + username)
full_name = user_info['first'] + " " + user_info['last']
location = user_info['location']
print("\tFull name: " + full_name.title())
print("\tLocation: " + location.title())
注意,表示每位用戶的字典的結(jié)構(gòu)都相同,雖然Python并沒有這樣的要求,但這使得嵌套的字典處理起來(lái)更容易。倘若表示每位用戶的字典都包含不同的鍵,for循環(huán)內(nèi)部的代碼將更復(fù)雜。
輸入函數(shù)input(),通過獲取用戶輸入并學(xué)會(huì)控制程序的運(yùn)行時(shí)間,可編寫出交互式程序。函數(shù)input()讓程序暫停運(yùn)行,等待用戶輸入一些文本。獲取用戶輸入后,Python將其存儲(chǔ)在一個(gè)變量中。
eg: message = input("Tell me something, and I will repeat it back to you: ")
print(message)通過在提示末尾(這里是冒號(hào)后面)包含一個(gè)空格,可將提示與用戶輸入分開,讓用戶清楚地知道其輸入始于何處,
函數(shù)input()接受一個(gè)參數(shù):即要向用戶顯示的 提示 或說(shuō)明,讓用戶知道該如何做。程序等待用戶輸入,并在用戶按回車鍵后繼續(xù)運(yùn)行。輸入存儲(chǔ)在變量message中。
有時(shí)候,提示可能超過一行,這樣可將提示存儲(chǔ)在一個(gè)變量中,再將該變量傳遞給函數(shù)input()。這樣,即便提示超過一行,input()語(yǔ)句也非常清晰。
eg: prompt = "If you tell us who you are, we can personalize the messages you see."
prompt += "\nWhat is your first name? "
name = input(prompt)
print("\nHello, " + name + "!")
使用函數(shù)input()時(shí),Python將用戶輸入解讀為字符串。函數(shù)int()將數(shù)字的字符串表示轉(zhuǎn)換為數(shù)值表示。將數(shù)值輸入用于計(jì)算和比較前,務(wù)必將其轉(zhuǎn)換為數(shù)值表示。
求模運(yùn)算符(%)將兩個(gè)數(shù)相除并返回余數(shù),可利用這一點(diǎn)來(lái)判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù):
如果你使用的是Python 2.7,應(yīng)使用函數(shù)raw_input()來(lái)提示用戶輸入。這個(gè)函數(shù)與Python 3中的input()一樣,也將輸入解讀為字符串。Python 2.7也包含函數(shù)input(),但它將用戶輸入解讀為Python代碼,并嘗試運(yùn)行它們。
for循環(huán)用于針對(duì)集合中的每個(gè)元素都一個(gè)代碼塊,而while循環(huán)不斷地運(yùn)行,直到指定的條件不滿足為止。
如使用while循環(huán)來(lái)數(shù)數(shù)
eg: current_number = 1
while current_number <= 5:
print(current_number)
current_number += 1
例如,游戲使用while循環(huán),確保在玩家想玩時(shí)不斷運(yùn)行,并在玩家想退出時(shí)停止運(yùn)行。
eg: prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
message = ""
while message != 'quit':
message = input(prompt)
if message != 'quit':
print(message)
在要求很多條件都滿足才繼續(xù)運(yùn)行的程序中(例如,在游戲中,多種事件都可能導(dǎo)致游戲結(jié)束),可定義一個(gè)變量,用于判斷整個(gè)程序是否處于活動(dòng)狀態(tài)。這個(gè)變量被稱為標(biāo)志 ,充當(dāng)了程序的交通信號(hào)燈。你可讓程序在標(biāo)志為True時(shí)繼續(xù)運(yùn)行,并在任何事件導(dǎo)致標(biāo)志的值為False時(shí)讓程序停止運(yùn)行。這樣,在while語(yǔ)句中就只需檢查一個(gè)條件——標(biāo)志的當(dāng)前值是否為True,并將所有測(cè)試(是否發(fā)生了應(yīng)將標(biāo)志設(shè)置為False的事件)都放在其他地方,從而讓程序變得更為整潔。
eg: prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
active = True
while active:
message = input(prompt)
if message == 'quit':
active = False
else:
print(message)
在復(fù)雜的程序中,如很多事件都會(huì)導(dǎo)致程序停止運(yùn)行的游戲中,標(biāo)志很有
用:在其中的任何一個(gè)事件導(dǎo)致活動(dòng)標(biāo)志變成False時(shí),主游戲循環(huán)將退出,此時(shí)可顯示一條游戲結(jié)束消息,并讓用戶選擇是否要重新玩。
要立即退出while循環(huán),不再運(yùn)行循環(huán)中余下的代碼,也不管條件測(cè)試的結(jié)果如何,可使用break語(yǔ)句。break語(yǔ)句用于控制程序流程,可使用它來(lái)控制哪些代碼行將執(zhí)行,
哪些代碼行不執(zhí)行,從而讓程序按你的要求執(zhí)行你要執(zhí)行的代碼。
eg: prompt = "\nPlease enter the name of a city you have visited:"
prompt += "\n(Enter 'quit' when you are finished.) "
while True:
city = input(prompt)
if city == 'quit':
break
else:
print("I'd love to go to " + city.title() + "!")
注意 在任何Python循環(huán)中都可使用break語(yǔ)句。例如,可使用break語(yǔ)句來(lái)退出遍歷列表或字典的for循環(huán)。
要返回到循環(huán)開頭,并根據(jù)條件測(cè)試結(jié)果決定是否繼續(xù)執(zhí)行循環(huán),可使用continue語(yǔ)句,它不break語(yǔ)句那樣不再執(zhí)行余下的代碼并退出整個(gè)循環(huán)。
eg: current_number = 0
while current_number < 10:
current_number += 1
if current_number % 2 == 0:
continue
print(current_number)如從1數(shù)到10,但只打印其中奇數(shù)的循環(huán)
如果程序陷入無(wú)限循環(huán),可按Ctrl + C,也可關(guān)閉顯示程序輸出的終端窗口。要避免編寫無(wú)限循環(huán),務(wù)必對(duì)每個(gè)while循環(huán)進(jìn)行測(cè)試,確保它按預(yù)期那樣結(jié)束。如果你希望程序在用戶輸入特定值時(shí)結(jié)束,可運(yùn)行程序并輸入這樣的值;如果在這種情況下程序沒有結(jié)束,請(qǐng)檢查程序處理這個(gè)值的方式,確認(rèn)程序至少有一個(gè)這樣的地方能讓循環(huán)條件為False或讓break語(yǔ)句得以執(zhí)行。
要記錄大量的用戶和信息,需要在while循環(huán)中使用列表和字典。for循環(huán)是一種遍歷列表的有效方式,但在for循環(huán)中不應(yīng)修改列表,否則將導(dǎo)致Python難以跟蹤其中的元素。要在遍歷列表的同時(shí)對(duì)其進(jìn)行修改,可使用while循環(huán)。通過將while循環(huán)同列表和字典結(jié)合起來(lái)使用,可收集、存儲(chǔ)并組織大量輸入,供以后查看和顯示。
使用一個(gè)while循環(huán),在驗(yàn)證用戶的同時(shí)將其從未驗(yàn)證用戶列表中提取出來(lái),再將其加入到另一個(gè)已驗(yàn)證用戶列表中。
eg:? #首先,創(chuàng)建一個(gè)待驗(yàn)證用戶列表
#和一個(gè)用于存儲(chǔ)已驗(yàn)證用戶的空列表
unconfirmed_users = ['alice', 'brian', 'candace']
confirmed_users = []
#驗(yàn)證每個(gè)用戶,直到?jīng)]有未驗(yàn)證用戶為止
#將每個(gè)經(jīng)過驗(yàn)證的列表都移到已驗(yàn)證用戶列表中
while unconfirmed_users:? while循環(huán)將不斷地運(yùn)行,直到列表unconfirmed _users變成空的。
current_user = unconfirmed_users.pop()
print("Verifying user: " + current_user.title())
confirmed_users.append(current_user)
#顯示所有已驗(yàn)證的用戶
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:
print(confirmed_user.title())
刪除包含特定值的所有列表元素
eg: pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)
使用用戶輸入來(lái)填充字典,可使用while循環(huán)提示用戶輸入任意數(shù)量的信息。
eg: responses = {}
#設(shè)置一個(gè)標(biāo)志,指出調(diào)查是否繼續(xù)
polling_active = True
while polling_active:
#提示輸入被調(diào)查者的名字和回答
name = input("\nWhat is your name? ")
response = input("Which mountain would you like to climb someday? ")
#將答卷存儲(chǔ)在字典中
responses[name] = response
#看看是否還有人要參與調(diào)查
repeat = input("Would you like to let another person respond? (yes/ no) ")
if repeat == 'no':
polling_active = False
#調(diào)查結(jié)束,顯示結(jié)果
print("\n--- Poll Results ---")
for name, response in responses.items():
print(name + " would like to climb " + response + ".")
總結(jié)
以上是生活随笔為你收集整理的python之禅星号_Python基础1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20款厨具消毒机对比测试 格力、大宇等品
- 下一篇: 曝realme真我GT Neo5 SE屏