Python3 自學筆記 C06【使用者輸入和 while 迴圈】
- 6.1 函式 input() 的工作原理
函式 input() 讓程式暫停執行,等待使用者輸入一些文字。獲取使用者輸入後,Python將其儲存在一個變數當中,以方便你使用;函式 input() 返回為 string 型別
message = input("Please tell me your name:")
print("Hello , " + message + "!")
輸出結果如下:
Please tell me your name:anliy
Hello , anliy!
進階:
message = "Please tell me your name so that we can personalize the messages you see."
message += "\nWhat's your first name?"
name = input(message)
print("\nHello , " + name + "!")
輸出結果如下:
Please tell me your name so that we can personalize the messages you see.
What's your first name?trhx
Hello , trhx!
- 6.1.1 使用 int() 來獲取數值輸入
使用函式 input() 時,Python會將使用者輸入解讀為字串:
>>> age = input("How old are you?")
How old are you?19
>>> age
'19'
為了解決這個問題,可以使用函式 int() ,它讓Python將輸入視為數值:
>>> age = input("How old are you?")
How old are you?19
>>> age = int(age)
>>> age
19
例項:
age = input("Please tell me your age:")
age = int(age)
if age >= 18:
print ("You are old enough to go to the Internet bar!")
else:
print("You are not old enough to go to Internet bar!")
輸出結果如下:
Please tell me your age:17
You are not old enough to go to Internet bar!
- 6.1.2 求模運算子
處理數值資訊時,求模運算子(%)是一個很有用的工具,它將兩個數相除並返回餘數:
>>> 4 % 3
1
>>> 5 % 3
2
>>> 8 % 2
0
>>> 7 % 3
1
- 6.1.3 在 Python 2.7 中獲取輸入
如果使用 Python 2.7,應該使用函式 raw_input()
來提示使用者輸入,這個函式與 Python 3 中的 input()
一樣,也將輸入解讀為字串;Python 2.7 也包含函式 input()
,但它將使用者輸入解讀為Python程式碼,並嘗試執行它們
- 6.2 while 迴圈
for 迴圈用於針對集合中的每一個元素的一個程式碼塊,而 while 迴圈不斷地執行,直到指定的條件不滿足為止
- 6.2.1 使用 while 迴圈
一個簡單的 while 迴圈:
num = 1
while num < 5:
print(num)
num += 1
輸出結果如下:
1
2
3
4
- 6.2.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)
print(message)
執行程式:
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program.Hello everyone!
Hello everyone!
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program.Hello again!
Hello again!
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program.quit
quit
- 6.2.3 使用標誌
在要求很多條件都滿足才繼續執行的程式中,可以定義一個變數,用於判斷整個程式是否處於活動狀態,這個變數稱為標誌
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)
執行結果與6.2.2一致
- 6.2.4 使用 break 退出迴圈
要立即退出 while 迴圈,不再執行迴圈中餘下的程式碼,也不管條件測試的結果如何,可使用 break 語句,break 語句用於控制程式流程,可使用它來控制哪些程式碼將執行,哪些程式碼不執行
prompt = "\nPlease enter the name of a city you have visited:"
prompt += "\nEnter 'quit' when you are finished."
active = True
while active:
city = input(prompt)
if city == 'quit':
break
else:
print("I'd love to go to " + city.title() + "!")
執行程式:
Please enter the name of a city you have visited:
Enter 'quit' when you are finished.Shanghai
I'd love to go to Shanghai!
Please enter the name of a city you have visited:
Enter 'quit' when you are finished.Beijing
I'd love to go to Beijing!
Please enter the name of a city you have visited:
Enter 'quit' when you are finished.quit
在任何Python迴圈中都可以使用break語句,例如,可以使用break語句來退出遍歷列表或字典
- 6.2.5 在迴圈中使用 continue
要返回到迴圈開頭,並根據條件測試結果決定是否繼續執行迴圈,可使用 continue 語句,它不像 break 語句那樣不再執行餘下的程式碼並退出整個迴圈,例如,從1到10只打印其中奇數:
number =0
while number < 10:
number += 1
if number % 2 == 0:
continue
print(number)
輸出結果如下:
1
3
5
7
9
- 6.3 使用 while 迴圈來處理列表和字典
for迴圈是一種遍歷列表的有效方式,但在for迴圈中不應修改列表,否則將導致Python難以跟蹤其中的元素,要在遍歷列表的同時對其進行修改,可使用while迴圈
- 6.3.1 在列表之間移動元素
unconfirmed_users = ['alice' , 'brian' , 'candace']
confirmed_users = []
while unconfirmed_users:
current_user = unconfirmed_users.pop()
print("Verifying user: " + current_user.title())
confirmed_users.append(current_user)
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:
print(confirmed_user.title())
首先建立一個未驗證使用者列表,其中包含使用者Alice、Brian和Candace,還建立了一個空列表,用於儲存已驗證的使用者,程式中的 while 迴圈將不斷地執行,直到列表 unconfirmed_users 變成空的。在這個迴圈中,函式pop() 以每次一個的方式從列表 unconfirmed_users 末尾刪除未驗證的使用者。由於Candace位於列表 unconfirmed_users 的末尾,因此其名字將首先被刪除、儲存到變數 current_user 中並加入到列表 confirmed_users 中。接下來是Brian,然後是Alice
為模擬使用者驗證過程,我們列印一條驗證訊息並將使用者加入到已驗證使用者列表中。未驗證使用者列表越來越短,而已驗證使用者列表越來越長。未驗證使用者列表為空後結束迴圈,再列印已驗證使用者列表:
Verifying user: Candace
Verifying user: Brian
Verifying user: Alice
The following users have been confirmed:
Candace
Brian
Alice
- 6.3.2 刪除包含特定值的所有列表元素
可以使用方法 remove() 來刪除列表中特定的值,但如果要刪除的值在列表中出現了多次,方法 remove() 就不管用了,如果要刪除列表中所有包含特定值的元素則可以使用 while 迴圈:
names = ['alice' , 'candace' , 'alice' , 'brian' , 'alix' , 'candace' , 'heliy']
print(names)
while 'candace' in names:
names.remove('candace')
print(names)
輸出結果如下:
['alice', 'candace', 'alice', 'brian', 'alix', 'candace', 'heliy']
['alice', 'alice', 'brian', 'alix', 'heliy']
使用方法 remove() 做對比:
names = ['alice' , 'candace' , 'alice' , 'brian' , 'alix' , 'candace' , 'heliy']
print(names)
names.remove('candace')
print(names)
輸出結果如下:
['alice', 'candace', 'alice', 'brian', 'alix', 'candace', 'heliy']
['alice', 'alice', 'brian', 'alix', 'candace', 'heliy']
- 6.3.3 使用使用者輸入來填充字典
responses = {}
#設定一個標誌,指出調查是否繼續
polling_active = True
while polling_active:
#提示輸入被調查者的姓名和回答
name = input("\nWhat's your name?")
response = input("What kind of fruit do you like?")
#將答卷儲存在字典中
responses[name] = response
#詢問是否還有其他人要參與回答
repeat = input("Would you like to let another person respond?(Yes/No)")
if repeat == 'No':
polling_active = False
#調查結束,顯示結果
print("\n------ Poll Results ------")
for name , response in responses.items():
print(name + " like " + response + ".")
執行程式:
What's your name?TRHX
What kind of fruit do you like?apple
Would you like to let another person respond?(Yes/No)Yes
What's your name?TRHXCC
What kind of fruit do you like?banana
Would you like to let another person respond?(Yes/No)No
------ Poll Results ------
TRHX like apple.
TRHXCC like banana.