1. 程式人生 > >Python3 自學筆記 C06【使用者輸入和 while 迴圈】

Python3 自學筆記 C06【使用者輸入和 while 迴圈】

Python3 自學筆記第六章【使用者輸入和 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.