申明: 本站飛宇網 https://feiyetopro.blogspot.com/。自網路收集整理之書籍、文章、影音僅供預覽交流學習研究,其[書籍、文章、影音]情節內容, 評論屬其個人行為, 與本網站無關。版權歸原作者和出版社所有,請在下載 24 小時內刪除,不得用作商業用途;如果您喜歡其作品,請支持訂閱購買[正版]。謝謝!

第 5 章 輸入
到現在為止,希望程式“處理一些數”時,都必須把這些數直接放在代碼中。例如,如果編寫了第 3 章中的溫度轉換程式,你可能會把要轉換的溫度直接放在代碼中。如果想要轉換一個不同的溫度,就必須修改代碼。
如果你希望使用者在程式運行時輸入他想轉換的溫度呢?之前我們說過,一個程式有 3 大部分:輸入、處理和輸出。我們的第一個程式只有輸出。溫度轉換程式有處理(轉換溫度)和輸出,但是沒有輸入。現在該向程式增加第三個部分了:輸入。輸入就是指在程式運行時向其提供某樣東西,也就是某種資訊。
這樣一來,我們就能寫出 與使用者交互的程式,這就有趣多了。
Python 有一個內置函數,名為 raw_input(),可以用這個函數從使用者那裡得到輸入。在這一章中,我們將學習如何在程式中使用 raw_input()。
5.1 raw_input()
raw_input() 函數從使用者那裡得到一個字串。正常情況下會從鍵盤得到這個輸入,也就是說,用戶要鍵入輸入。
raw_input() 也是一個 Python 內置函數,就像 str()、int()、float() 和 type() 一樣(在第 4 章中已經見過這些函數)。後面還會學習更多有關函數的內容。不過對現在來說,只需要記住使用 raw_input() 時要加上小括弧(圓括號)。

Raw input
在 Python 3 中,raw_input() 改名為 input() 了。它與 Python 2 中的 raw_input() 完全一樣。
可以這樣來使用:
someName
= raw_input()
這會讓使用者鍵入一個字串,並把它賦給名字 someName。
現在把它放在程式裡。在 IDLE 中創建一個新檔,鍵入代碼清單 5-1 中的代碼。
代碼清單 5-1 使用 raw_input() 得到一個字串
print
"Enter your name: "
somebody
= raw_input()
print
"Hi", somebody, "how are you today?"
保存這個程式,並在 IDLE 中運行,看看它如何工作。應該可以看到類似下面的結果:
Enter
your name:
Warren
Hi
Warren how are you today?
我鍵入了我的名字,程式把它賦給了 somebody。
5.2 print 命令和逗號
通常情況下,希望從使用者得到輸入時,必須告訴他你想要什麼,應當提供類似這樣的一個消息:
print
"Enter your name: "
然後用 raw_input() 函數得到使用者的回應:
someName
= raw_input()
如果運行這些代碼行,並鍵入你的名字,會得到:
Enter
your name:
Warren
如果希望使用者在消息的同一行上鍵入他的答案,只需要在 print 語句的末尾放上一個逗號,就像這樣:
print
"Enter your name: ",
someName
= raw_input()
注意逗號放在結束引號的外面。
如果運行這個代碼,會得到:
Enter
your name: Warren
逗號可以用來把多個 print 語句合併到同一行上。逗號只是表示“列印完這個內容後不要跳轉到下一行”。代碼清單 5-1 的最後一行就是這麼做的。
在 IDLE 編輯器視窗中鍵入代碼清單 5-2 中的代碼,並運行這個程式。
代碼清單 5-2 逗號用來做什麼?
print
"My",
print
"name",
print
"is",
print
"Dave."
運行這個程式時應該會得到這樣的結果:
My
name is Dave.
注意到了嗎?引號中的每個詞末尾都沒有空格,但是運行這個程式時每個單詞之間卻出現了空格。使用逗號將多個 print 語句合併到同一行時,Python 會增加一個空格。

行尾逗號
在 Python 3 中,通過在行尾添加逗號使得列印的內容都在同一行的方法不再有效。而且,在 Python 3 中使用 print() 時,要列印的內容必須被包含在一對括弧中。所以如果你在使用 Python 3,代碼清單 5-2 應該是這樣:
print(
"My" , end=" ")
print(
"name" , end=" ")
print(
"is" , end=" ")
print(
"Dave." , end=" ")

很高興你問這個問題!我正要講到這一點。
列印 raw_input() 提示語的簡便方法
列印提示消息還有一種簡便方法。raw_input() 函數可以直接列印消息,所以你根本不必使用 print 語句:
someName
= raw_input ("Enter your name: ")
這就像 raw_input() 函數內置了 print 一樣。從現在起我們都將使用這個簡便方法。

說得對!有了 raw_input(),
根本不用再另外買其他東西!
沒有必要再使用 print!
既然 raw_input() 已經內置了 print,又何必另外掏錢呢?
只需要付區區 99.95 美元,它就是你的了!
5.3 輸入數位
我們已經見過如何使用 raw_input() 來得到字串。但是如果希望得到一個數該怎麼做呢?畢竟,我們之所以討論輸入,原本就是為了讓使用者為我們的溫度轉換程式輸入溫度。
如果你讀過第 4 章,應該已經知道答案了。可以從 raw_input() 給我們的字串使用 int() 或 float() 函數創建一個數。可以像這樣:
temp_string
= raw_input()
fahrenheit
= float(temp_string)
先使用 raw_input() 得到使用者的輸入(一個字串)。然後使用 float() 由這個字串創建一個數。得到溫度(作為浮點數)後,為它指定名字 fahrenheit。
不過還有一種簡便方法。只需一步就可以完成所有這些工作,如下:
fahrenheit
= float(raw_input())
所做的工作是一樣的。它由使用者得到字串,然後從這個字串創建一個數。這裡只是稍稍少寫一點代碼。
下面在我們的溫度轉換程式中使用這種方法。試著運行代碼清單 5-3 中的程式,看看會得到什麼。
代碼清單 5-3 使用 raw_input() 轉換溫度
還可以把代碼清單 5-3 最後 3 行合併為一行,像這樣:
print
"That is", celsius, "degrees Celsius"
這實際上是之前 3 個 print 語句的簡寫形式。
結合 int() 使用 raw_input()
如果你希望使用者輸入的數總是整數(而不是小數),可以用 int() 來轉換,例如:
response
= raw_input("How many students are in your class: ")
numberOfStudents
= int(response)
像(Python)程式師一樣思考
得到數字輸入還有一種方法。Python 2 有一個名叫 input() 的函數,可以直接提供一個數,所以不必使用 int() 或 float() 來轉換。我們在第 1 章的猜數程式中用過這個函數,因為這是從使用者得到一個數的最簡單的方法。
但為了保持一致,我們在本書的剩餘部分會始終使用 raw_input()。而且,Python 3 中去除了 input() 函數(可以直接獲取數位而不需要進行轉換),只有 raw_input()。更令人感到混亂的是,Python 2 中的 raw_input() 在 Python 3 中改名為 input(),但它的功能仍然和你在這一章中見到的這個函數一樣,只會得到字串。因為我們很清楚怎樣從一個字串創建一個數,所以建議使用 raw_input(),而不要用 Python 2 中的 input()。
通常,程式的輸入都來自使用者。不過還有其他一些方法得到輸入。可以從電腦硬碟上的檔中得到輸入(這個內容會在第 22 章介紹),或者也可以從互聯網獲取輸入。
如果你能連接互聯網,可以試試代碼清單 5-4 中的程式。它會從這本書的網站打開一個檔,為你顯示這個檔中的消息。
代碼清單 5-4 從互聯網上的一個檔得到輸入
import
urllib2
file
= urllib2.urlopen('http://helloworldbook2.com/data/message.txt')
message
= file.read()
print
message
就這麼簡單。只需要區區 4 行代碼,你的電腦就可以通過互聯網得到這本書網站上的一個檔,並顯示這個檔。如果試著運行這個程式(假設你的互聯網連接工作正常),你會看到這個消息。
如果你在辦公室或學校的電腦上嘗試這個程式,很可能無法正常工作。這是因為,有些辦公室和學校使用一種名叫代理的東西連接到互聯網。代理就是另一台電腦,它相當於互聯網與學校或辦公室之間的一座橋樑或一條通路。取決於代理的設置,這個程式可能不知道如何通過代理連接到互聯網。如果從家裡的電腦(或者其他可以直接連接互聯網而不需要通過代理的地方)運行這個程式,應該能正常工作。
向程式師一樣思考
根據你使用的作業系統(Windows、Linux 或 Mac OS X),運行代碼清單 5-4 中的程式時,你可能會在每行末尾看到小方塊或類似 \r 的字元。這是因為,不同的作業系統使用不同的方法來指示文本行的結束。Windows(和之前的 MS-DOS)使用兩個字元:CR(回車)和 LF(換行)來表示。Linux 只使用 LF,Mac OS X 只使用 CR。
有些程式可以處理所有這些情況,不過有些程式(比如 IDLE)看到行結束符與它期望的不一致時,就會不知所措。發生這種情況時,它們會顯示一個小方塊,表示“我不理解這個字元”。你可能會看到這樣的小方塊,也可能看不到,這取決於你在使用什麼作業系統,還取決於你如何運行程式(使用 IDLE 還是採用另外某種方法)。
你學到了什麼
在這一章,你學到了以下內容。
·
用 raw_input() 輸入文本。
·
向 raw_input() 增加一個提示消息。
·
結合 int() 和 float() 使用 raw_input() 輸入數位。
·
使用逗號將多行列印到一行上。
測試題
1. 對於下面這行代碼:
answer
= raw_input()
如果用戶鍵入 12,answer 的資料類型是什麼?是字串還是一個數?
2. 怎麼讓 raw_input() 列印一個提示消息?
3. 怎麼使用 raw_input() 得到一個整數?
4. 怎麼使用 raw_input() 得到一個浮點數(小數)?
動手試一試
1. 在交互模式中建立兩個變數,分別表示你的姓和名。然後使用一條 print 語句,把姓和名列印在一起。
2. 編寫一個程式,先問你的姓,再問名,然後列印一條消息,在消息中包含你的姓和名。
3. 編寫一個程式詢問一間長方形房間的尺寸(單位是米),然後計算覆蓋整個房間總共需要多少地毯,並顯示出來。
4. 編寫一個程式先完成第 3 題的要求,不過還要詢問每平方尺地毯的價格。然後主程序顯示下面 3 個內容:
·
總共需要多少地毯,單位是平方米。
·
總共需要多少地毯,單位是平方尺(1 平方米 = 9 平方尺)。
·
地毯總價格。
5. 編寫一個程式説明使用者統計她的零錢。程式要問下面的問題。
·
“有多少個五分幣?”
·
“有多少個二分幣?”
·
“有多少個一分幣?”
讓程式給出這些零錢的總面值。



0 留言:
發佈留言