閱讀《Python編程從入門到實踐》Day06

第七章

1淆两、函數(shù)input()的工作原理

函數(shù)input()讓程序暫停運(yùn)行师崎,等待用戶輸入一些文本铺敌。

message = input("Tell me something, and I will repeat it back to you: ")
print(message)
# 輸出:
Tell me something, and I will repeat it back to you: python
python

括號中接收的參數(shù)就是向用戶顯示的提示或者說明汇歹,讓用戶知道該如何做。

(1)編寫清晰的程序

使用input()函數(shù)時偿凭,最好指定清晰的提示产弹,便于用戶輸入準(zhǔn)確的信息。通常在提示的末尾再添加一個空格笔喉,以便區(qū)分提示與輸入。當(dāng)你需要指出獲取特定輸入的原因時硝皂,提示可能會很長常挚,這時就可以將提示存儲在一個變量中,然后再將變量傳遞給函數(shù)input()稽物。

prompt = "If you tell us who you are, we can personlize the messages you see."
prompt += "\nWhat is your first name? "
name = input(prompt)
print(name)
# 輸出:
If you tell us who you are, we can personlize the messages you see.
What is your first name? Jackson
Jackson

上述例子演示了一種創(chuàng)建多行字符串的方式奄毡,首先將前半部分字符串存儲在一個變量中,然后使用運(yùn)算符+=在原本字符串的末尾附加一個字符串贝或。

(2)使用int()來獲取數(shù)值輸入

使用函數(shù)input()時吼过,Python將用戶輸入解讀為字符串锐秦。

age = input("How old are you? ")
print(age)
print(type(age))
# 輸出:
How old are you? 18
18
<class 'str'>

通過使用type()函數(shù)可以得知所輸入的數(shù)值確實被當(dāng)成了字符串類型。當(dāng)你需要把它當(dāng)成數(shù)字來使用時盗忱,就可以使用函數(shù)int()酱床,它可以將數(shù)字字符串轉(zhuǎn)換成數(shù)值。將數(shù)值輸入用于計算和比較前趟佃,務(wù)必將其轉(zhuǎn)換為數(shù)值表示扇谣。

(3)求模運(yùn)算符

求模運(yùn)算符(%)可以將兩個數(shù)相除并返回余數(shù)。

print(10 % 3)
# 輸出:
1
(4)在Python 2.7 中獲取輸入

如果你使用的是Python 2.7闲昭,應(yīng)使用函數(shù)raw_input()來提示用戶輸入罐寨。這個函數(shù)與Python 3中的input()一樣,也將輸入解讀為字符串序矩。
Python 2.7也包含函數(shù)input()鸯绿,但它將用戶輸入解讀為Python代碼,并嘗試運(yùn)行它們簸淀。因此瓶蝴,最好的結(jié)果是出現(xiàn)錯誤,指出Python不明白輸入的代碼啃擦;而最糟糕的結(jié)果是囊蓝,將運(yùn)行你原本無意運(yùn)行的代碼。所以如果你正在使用Python 2.7令蛉,請使用raw_input()來獲取輸入聚霜。

2、while循環(huán)簡介

for循環(huán)用于針對集合中的每個元素的一個代碼塊珠叔,而while循環(huán)不斷地運(yùn)行蝎宇,直到指定的條件不滿足為止。

(1)使用while循環(huán)
current_number = 1
while current_number <= 5:
    print(current_number)
    current_number += 1
# 輸出:
1
2
3
4
5

上述的循環(huán)例子中祷安,表示當(dāng)current_number的值小于等于5時姥芥,循環(huán)繼續(xù)執(zhí)行;當(dāng)其大于5時汇鞭,循環(huán)終止凉唐。

(2)讓用戶選擇何時退出
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)
# 輸出:

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello!
Hello!

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Python
Python

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit

在上述的程序中,只有當(dāng)你輸入“quit”的時候霍骄,程序才會退出台囱,否則程序會一直循環(huán)下去。

(3)使用標(biāo)志

在要求很多條件都滿足才繼續(xù)運(yùn)行的程序中读整,可定義一個變量簿训,用于判斷整個程序是否處于活動狀態(tài)。這個變量被成為標(biāo)志,充當(dāng)了程序的交通信號燈膘侮。你可以讓程序在標(biāo)志為True時繼續(xù)運(yùn)行的榛,并在任何事件導(dǎo)致標(biāo)志的值為False時讓程序停止運(yùn)行。這樣困曙,在while語句中就只需要檢查一個條件——標(biāo)志的當(dāng)前值是否為True表伦,并將所有測試(是否發(fā)生了應(yīng)將標(biāo)志設(shè)置為False的事件)都放在其他地方蹦哼,從而讓程序變得更為整潔。

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)

在這個例子中添加了一個active標(biāo)志要糊,簡化了while語句纲熏,因為不需要在其中做任何的比較局劲,相關(guān)的邏輯由程序的其他部分處理奶赠。只要active的值為True,循環(huán)就會一直運(yùn)行苹丸;而當(dāng)程序運(yùn)行到某一刻時將active的值改為了False苇经,循環(huán)就終止扇单。使用標(biāo)志可以使得后期修改程序變得更簡單容易。

(4)使用break退出循環(huán)

要立即退出while循環(huán)施流,不再運(yùn)行循環(huán)中余下的代碼鄙信,也不管條件測試的結(jié)果如何扮碧,可使用break語句。它用于控制程序流程蚓土。

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
while True:
    message = input(prompt)
    if message == 'quit':
        break
    else:
        print(message)
# 輸出:

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello
Hello

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit

以True作為條件測試的while循環(huán)將不斷運(yùn)行,直到遇到break語句蜀漆。在任何的Python循環(huán)中都可以使用break語句确丢。

(5)在循環(huán)中使用continue

要返回到循環(huán)的開頭吐限,并根據(jù)條件測試結(jié)果決定是否繼續(xù)執(zhí)行循環(huán),可使用continue語句诸典,它與break不一樣描函,它只是退出了當(dāng)次的循環(huán),然后繼續(xù)執(zhí)行下一次循環(huán)狐粱;而break是直接退出整個循環(huán)肌蜻。

current_number = 0
while current_number < 10:
    current_number += 1
    if current_number % 2 == 0:
        continue
    print(current_number)
# 輸出:
1
3
5
7
9

這里只輸出了1到10之間的奇數(shù),因為每當(dāng)遇到偶數(shù)時都碰到了continue語句篡撵,使其退出了那一次的循環(huán)酸休。

(6)避免無限循環(huán)

在while循環(huán)中斑司,其中自增自減的語句時必不可少的但汞,一旦寫漏了私蕾,就會出現(xiàn)無限循環(huán)。要避免編寫無限循環(huán)磕潮,務(wù)必對每個while循環(huán)進(jìn)行測試自脯,確保它按預(yù)期那樣結(jié)束膏潮。

3、使用while循環(huán)來處理列表和字典

for循環(huán)是一種遍歷列表的有效方式轻纪,但在for循環(huán)中不應(yīng)修改列表刻帚,否則將導(dǎo)致Python難以跟蹤其中的元素我擂。要在遍歷列表的同時對其進(jìn)行修改缓艳,可使用while循環(huán)阶淘。

(1)在列表之間移動元素

使用一個while循環(huán)溪窒,在驗證用戶的同時將其從未驗證用戶用戶列表中提取出來,再將其加入到另一個已驗證用戶列表中摹芙。

unconfirm_users = ['alice', 'brian', 'candace']
confirm_users = []
while unconfirm_users:
    current_user = unconfirm_users.pop()
    print("Verifying user: " + current_user.title())
    confirm_users.append(current_user)
print("\nThe following users have been confirmed: ")
for confirm_user in confirm_users:
    print(confirm_user.title())
# 輸出:
Verifying user: Candace
Verifying user: Brian
Verifying user: Alice

The following users have been confirmed: 
Candace
Brian
Alice
(2)刪除包含特定值的所有列表元素

我們已經(jīng)知道remove()可以刪除列表中與之匹配的第一個元素浮禾,而當(dāng)有多個相同的元素出項在列表中時盈电,可以使用while循環(huán)來刪除所有特定的值匆帚。

pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:
    pets.remove('cat')
print(pets)
# 輸出:
['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit']
(3)使用用戶輸入來填充字典

使用while循環(huán)來創(chuàng)建一個調(diào)查程序吸重,并將收集的數(shù)據(jù)存儲在一個字典中,用戶的名字就是鍵摩幔,用戶的回答就是值。最后打印調(diào)查結(jié)果车遂。

responses = {}
polling_active = True
while polling_active:
    name = input("\nWhat is your name? ")
    response = input("Which mountain would you like to climb someday? ")
    responses[name] = response
    repeat = input("Would you like to let another person respond?(yes/no) ")
    if repeat == 'no':
        polling_active = False
print("\n--- Poll Result ---")
for name, response in responses.items():
    print(name + " would like to climb " + response + ".")
# 輸出:
What is your name? Eric
Which mountain would you like to climb someday? Denali
Would you like to let another person respond?(yes/no) yes

What is your name? Lynn
Which mountain would you like to climb someday? Devil's Thumb
Would you like to let another person respond?(yes/no) no

--- Poll Result ---
Eric would like to climb Denali.
Lynn would like to climb Devil's Thumb.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衣陶,隨后出現(xiàn)的幾起案子闸氮,更是在濱河造成了極大的恐慌宴霸,老刑警劉巖挫剑,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異翎蹈,居然都是意外死亡荤堪,警方通過查閱死者的電腦和手機(jī)枢赔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門糠爬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揩抡,你說我怎么就攤上這事峦嗤∷干瑁” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糠睡。 經(jīng)常有香客問我疚颊,道長材义,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮喘漏,結(jié)果婚禮上华烟,老公的妹妹穿的比我還像新娘盔夜。我一直安慰自己喂链,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迟杂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侧漓。 梳的紋絲不亂的頭發(fā)上布蔗,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天纵揍,我揣著相機(jī)與錄音,去河邊找鬼傍睹。 笑死犹菱,一個胖子當(dāng)著我的面吹牛腊脱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悍抑,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼记靡!你這毒婦竟也來了团驱?” 一聲冷哼從身側(cè)響起嚎花,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤紊选,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后憔辫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仿荆,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拢操,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年杠园,在試婚紗的時候發(fā)現(xiàn)自己被綠了抛蚁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惕橙。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡弥鹦,死狀恐怖彬坏,靈堂內(nèi)的尸體忽然破棺而出栓始,到底是詐尸還是另有隱情,我是刑警寧澤洒疚,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布油湖,位于F島的核電站乏德,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胧瓜。R本人自食惡果不足惜府喳,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一蘑拯、第九天 我趴在偏房一處隱蔽的房頂上張望申窘。 院中可真熱鬧,春花似錦剃法、人聲如沸贷洲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浓领。三九已至联贩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盲厌,已是汗流浹背吗浩。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工懂扼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留阀湿,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像啊央,于是被迫代替她去往敵國和親涨醋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 提心吊膽要“點評”~21天充電行動(十六) 一.緣起 半個月前已在微信群中見到了“寒假小講師公開賽”的預(yù)告,心中暖...
    N1124王雙鳳閱讀 249評論 0 2
  • 姓名:張躍 公司:本一設(shè)計 【日精進(jìn)打卡第28天】 【知-學(xué)習(xí)】 《六項精進(jìn)》大綱0遍共12遍 《大學(xué)》背誦2遍 ...
    小小蛋兒閱讀 144評論 0 0
  • 今天是2018年1月25日 是【曉暉有話說】陪伴你的第三百九十一天 山亭秋色滿梯轻, 巖牖涼風(fēng)度。 疏蘭尚染煙彬伦, 殘菊...
    暉暉曉閱讀 391評論 0 0