官术网_书友最值得收藏!

第4章 基本輸入與輸出

本章摘要

4-1 Python的輔助說明help( )

4-2 格式化輸出數據使用print( )

4-3 輸出數據到文件

4-4 數據輸入input( )

4-5 處理字符串的數學運算eval( )

4-6 列出所有內建函數dir( )

4-7 專題——溫度轉換/房貸問題/正五角形面積/計算經緯度距離

本章將介紹如何在屏幕上進行輸入與輸出,另外也將講解Python內建的實用功能。

4-1 Python的輔助說明help( )

help( )函數可以列出某一個Python指令或函數的使用說明。

實例:列出輸出函數print( )的使用說明。

當然程序語言是全球化的語言,所有說明是以英文為基礎,要有一定的英文能力才可徹底了解,不過筆者在本書中會詳盡地用中文引導讀者入門。

4-2 格式化輸出數據使用print( )

相信讀者經過前三章的學習,對于使用print( )函數輸出數據已經非常熟悉了,現在是時候完整解說這個輸出函數的用法了。

4-2-1 函數print( )的基本語法

print( )的基本語法格式如下:

    print(value, … , sep=" ", end="\n", file=sys.stdout, flush=False)

value:表示想要輸出的數據,可以一次輸出多個數據,各數據間以逗號隔開。

sep:當輸出多個數據時,可以插入各數據的分隔字符,默認是一個空格。

end:當數據輸出結束時所插入的字符,默認是插入換行字符,所以下一次print( )函數的輸出會在下一行輸出。如果想讓下次輸出不換行,可以在此設置空字符串,或是空格或是其他字符串。

file:數據輸出位置,默認是sys.stdout,也就是屏幕。也可以使用此設置,將輸出導入其他文件或設備。

flush:是否清除數據流的緩沖區,默認是不清除。

程序實例ch4_1.py:重新設計ch3_18.py,其中在第二個print( )中兩個輸出數據的分隔字符是“ $$$”。

執行結果

程序實例ch4_2.py:重新設計ch4_1.py,將兩個數據在同一行輸出,彼此之間使用Tab鍵的距離隔開。

執行結果

4-2-2 格式化print( )輸出

在使用格式化輸出時,基本使用格式如下:

    print("  …輸出格式區…  "  %  ( 變量系列區,  …  ))

在上述輸出格式區中,可以放置變量系列區相對應的格式化字符,這些格式化字符的基本意義如下。

%d:格式化整數輸出。

%f:格式化浮點數輸出。

%x:格式化十六進制整數輸出。

%X:格式化大寫十六進制整數輸出。

%o:格式化八進制整數輸出。

%s:格式化字符串輸出。

%e:格式化科學記數法e的輸出。

%E:格式化科學記數法大寫E的輸出。

程序實例ch4_3.py:格式化輸出的應用。

執行結果

設計程序時,在print( )函數內的輸出格式區也可以用一個字符串變量取代。

程序實例ch4_4.py:重新設計ch4_3.py,在print( )內用字符串變量取代字符串列,讀者可以參考第5行和第6行與原先ch4_3.py的第5行做比較。

執行結果 與ch4_3.py相同。

程序實例ch4_5.py:格式化十六進制和八進制輸出的應用。

執行結果

程序實例ch4_6.py:將整數與浮點數分別以%d、%f、%s格式化,同時觀察執行結果。特別要注意的是,浮點數以整數%d格式化后,小數數據將被舍去。

執行結果

下列是使用%x和%X格式化數據輸出的實例。

下列是使用%e和%E格式化科學記數法數據輸出的實例。

4-2-3 精準控制格式化的輸出

在上述程序實例ch4_6.py中,我們發現最大的缺點是無法精確地控制浮點數的小數輸出位數,print( )函數在格式化過程中,可以讓我們設置保留多少格的空間讓文件做輸出,此時格式化的語法如下。

%(+|-)nd:格式化整數輸出。

%(+|-)m.nf:格式化浮點數輸出。

%(+|-)nx:格式化十六進制整數輸出。

%(+|-)no:格式化八進制整數輸出。

%(-)ns:格式化字符串輸出。

%(-)m.ns:m是輸出字符串寬度,n是顯示字符串長度,n小于字符串長度時會有裁減字符串的效果。

%(+|-)e:格式化科學記數法e輸出。

%(+|-)E:格式化科學記數法大寫E輸出。

上述格式對浮點數而言,m代表保留多少格數供輸出(包含小數點),n則是小數數據保留格數。至于其他的數據格式,n則是保留多少格數空間,如果保留格數空間不足將完整輸出數據,如果保留格數空間太多則數據靠右對齊。

如果是格式化數值數據或字符串數據有加上負號(-),表示保留格數空間有多余時,數據將靠左輸出。如果是格式化數值數據有加上正號(+),如果輸出數據是正值時,將在左邊加上正值符號。

程序實例ch4_7.py:格式化輸出的應用。

執行結果

程序實例ch4_8.py:格式化輸出,靠左對齊的實例。

執行結果

程序實例ch4_9.py:格式化輸出,正值數據將出現正號(+)。

執行結果

程序實例ch4_10.py:格式化輸出的應用。

執行結果

下面是格式化科學記數法e和E輸出的應用。

對于格式化字符串有一個特別的是使用“%m.n”方式格式化字符串,這時m是保留顯示字符串空間,n是顯示字符串長度,如果n的長度小于實際字符串長度,會有裁減字符串的效果。

4-2-4 format( )函數

這是Python增強版的格式化輸出功能,是字符串使用format方法做格式化的動作,基本使用格式如下:

    print("  …輸出格式區…  " .format( 變量系列區,  …  ))

在輸出格式區內的變量使用“{ }”表示。

程序實例ch4_11.py:使用format( )函數重新設計ch4_3.py。

執行結果 與ch4_3.py相同。

程序實例ch4_12.py:以字符串代表輸出格式區,重新設計ch4_11.py。

執行結果 與ch4_3.py相同。

在使用{ }代表變量時,也可以在{ }內增加編號n,此時n將是format( )內變量的順序,編號從0開始計算,變量多時方便了解變量的順序。

程序實例ch4_12_1.py:重新設計ch4_12.py,在{ }內增加編號。

執行結果

也可以在format( )內使用具名參數。

程序實例ch4_12_2.py:使用具名參數,重新設計ch4_12_1.py。

執行結果

也可以將4-2-2節所述格式化輸出數據的概念應用于format( ),例如,d是格式化整數、f是格式化浮點數、s是格式化字符串等。傳統的格式化輸出是使用%配合d、s、f,使用format則是使用“:”,可參考下列實例第5行。

程序實例ch4_12_3.py:計算圓面積,同時格式化輸出。

執行結果

在使用格式化輸出時默認是靠右輸出,也可以使用下列參數設置輸出對齊方式。

>:靠右對齊

<:靠左對齊

^:居中對齊

程序實例ch4_12_4.py:輸出對齊方式的應用。

執行結果

在使用format輸出時也可以使用填充字符,字符是放在“:”后面,在<、^、>或指定寬度之前。

程序實例ch4_12_5.py:填充字符的應用。

執行結果

4-2-5 字符串輸出與基本排版的應用

適度利用輸出格式,可以制作一封排版的信件,以下程序的前3行會先利用sp字符串變量建立一個含40格的空白格數,然后產生對齊效果。

程序實例ch4_12_6.py:有趣排版信件的應用。

執行結果

4-2-6 一個無聊的操作

程序實例ch4_12_6.py第2行,利用空格乘以40產生40個空格,功能是用于排版。如果將某個字符串乘以500,然后用print( )輸出,可以在屏幕上建立一個無聊的畫面。

實例:在屏幕上建立一個無聊的畫面。

上述實例是啟發讀者活用Python,可以產生許多意外的結果。

4-3 輸出數據到文件

在4-2-1節有講解在print( )函數中,默認輸出位置是屏幕(sys.stdout),其實可以利用這個特性將輸出導向一個文件。

4-3-1 打開一個文件open( )

open( )函數可以打開一個文件供讀取或寫入,如果這個函數執行成功,會返回文件流對象,這個函數的基本使用格式如下:

file_Obj = open(file, mode="r")# 只列出最常用的兩個參數

file:用字符串列出要打開的文件,如果不指明路徑,則打開目前工作文件夾。

mode:打開文件的模式,如果省略代表是mode="r",使用時如果mode="w"或其他,也可以省略“mode=”,直接寫“w”。也可以同時具有多項模式,例如,“wb”代表以二進制文件打開供寫入,可以是下列基本模式。下列是第一個字母的操作意義。

 "r":這是默認值,打開文件供讀取(read)。

 "w":打開文件供寫入,如果原先文件有內容將被覆蓋。

 "a":打開文件供寫入,如果原先文件有內容,新寫入數據將附加在后面。

 "x":打開一個新的文件供寫入,如果所打開的文件已經存在會產生錯誤。下列是第二個字母的意義,代表文件類型。

 "b":打開二進制文件模式。

 "t":打開文本文件模式,這是默認值。

file_Obj:這是文件對象,讀者可以自行命名,未來print( )函數可以將輸出導向此對象,不使用時要關閉file_Obj.close( ),才可以返回操作系統的文件管理器觀察執行結果。

4-3-2 使用print( )函數輸出數據到文件

程序實例ch4_13.py:將數據輸出到文件的實例,其中,輸出到out1.txt采用“w”模式,輸出到out2.txt采用“a”模式。

執行結果

這個程序執行后需到ch4文件夾查看執行結果內容,如果執行程序一次,可以得到out1.txt和out2.txt內容相同。但是如果持續執行,out2.txt內容會持續增加,out1.txt內容則保持不變,下列是檢查文件夾內容。

下列是執行兩次此程序后out1.txt和out2.txt的內容。

4-4 數據輸入input( )

這個input( )函數功能與print( )函數功能相反,會從屏幕讀取用戶從鍵盤輸入的數據,它的使用格式如下:

    value = input("prompt: ")

value是變量,所輸入的數據會存儲在此變量內,特別需注意的是所輸入的數據不論是字符串或是數值數據返回到value時一律是字符串數據,如果要執行數學運算需要用int( )函數轉換為整數。

程序實例ch4_14.py:認識輸入數據類型。

執行結果

程序實例ch4_15.py:基本數據輸入與運算。

執行結果

接下來的程序主要是處理中文名字與英文名字的技巧,假設要求使用者分別輸入姓氏(lastname)與名字(firstname),在中文中要處理成名字,可以使用下列字符串連接方式。

    fullname = lastname + firstname

在英文中首先名字在前面姓氏在后面,同時中間有一個空格,因此處理方式如下:

    fullname = firstname + " " + lastname

程序實例ch4_16.py:分別輸入中文和英文的姓氏以及名字,本程序將會輸出名字組合并輸出問候語。

執行結果

4-5 處理字符串的數學運算eval( )

Python內有一個非常好用的計算數學表達式的函數eval( ),這個函數可以直接返回字符串內數學表達式的計算結果。

    result = eval(expression)  # expression是字符串

程序實例ch4_17.py:輸入公式,本程序可以列出計算結果。

執行結果

由上述執行結果可以發現,在第一個執行結果中輸入的是“5*9+10”字符串,eval( )函數可以處理此字符串的數學表達式,然后將計算結果返回,同時也可以發現即使此數學表達式之間有空字符也可以正常處理。

Windows操作系統有計算器程序,其實當我們使用計算器輸入運算公式時,就可以將所輸入的公式用字符串存儲,然后使用eval( )方法就可以得到運算結果。在ch4_15.py中input( )所輸入的數據是字符串,當時我們使用int( )將字符串轉成整數處理,其實也可以使用eval( )配合input( ),直接返回整數數據。

程序實例ch4_18.py:使用eval( )重新設計ch4_15.py 。

執行結果

一個input( )可以讀取一個輸入字符串,我們可以靈活運用多重指定在eval( )與input( )函數上,然后產生一行輸入多個數值數據的效果。

程序實例ch4_19.py:輸入3個數字,本程序可以輸出平均值,注意輸入時各數字間要用“,”隔開。

執行結果

4-6 列出所有內建函數dir( )

閱讀至此,相信讀者已經使用了許多Python內建的函數了,例如help( )、print( )、input( )等,讀者可能想了解到底Python提供哪些內建函數可供我們在設計程序時使用,可以使用下列方式列出Python所提供的內建函數。

    dir(_ _ builtins _ _) # 列出Python內建函數

實例:列出Python所有內建函數。

在本書中,筆者會依功能分類將常用的內建函數分別融入各章節主題中,如果讀者想了解某一個內建函數的功能,可參考4-1節使用help( )函數。

4-7 專題——溫度轉換/房貸問題/正五角形面積/利用經緯度計算距離

4-7-1 設計攝氏溫度和華氏溫度的轉換

攝氏溫度Celsius,C)的由來是在標準大氣壓環境,純水的凝固點是0℃,沸點是100℃,中間劃分100等份,每個等份是攝氏1度。為了紀念瑞典科學家安德斯·攝爾修斯(Anders Celsius)對攝氏溫度定義的貢獻,所以稱為攝氏溫度(Celsius)。

華氏溫度Fahrenheit,F)的由來是在標準大氣壓環境,水的凝固點是32℃、水的沸點是212℃,中間劃分180等份,每個等份是華氏1度。為了紀念德國科學家丹尼爾·加布里埃爾·華倫海特(Daniel Gabriel Fahrenheit)對華氏溫度定義的貢獻,所以稱為華氏溫度(Fahrenheit)。

攝氏和華氏溫度互轉的公式如下:

攝氏溫度 = ( 華氏溫度 – 32 )×5 / 9

華氏溫度 = 攝氏溫度×( 9 / 5 ) + 32

程序實例ch4_20.py:請輸入華氏溫度,這個程序會輸出攝氏溫度。

執行結果

4-7-2 房屋貸款問題

每個人在成長的過程中可能都會經歷買房子,第一次住在屬于自己的房子中是一個美好的經歷,大多數人在這個過程中可能需要向銀行貸款。這時會思考需要貸多少錢?貸款年限是多少?銀行利率是多少?然后可以利用上述已知資料計算每個月還款金額是多少,同時我們會好奇整個貸款結束究竟還了多少貸款本金和利息。在做這個專題分析時,已知的條件是:

貸款金額:使用loan當變量

貸款年限:使用year當變量

年利率:使用rate當變量

然后需要利用上述條件計算下列結果。

每月還款金額:使用monthlyPay當變量

總共還款金額:使用totalPay當變量

處理這個貸款問題的數學公式如下:

在銀行的貸款術語習慣使用年利率,所以碰上這類問題需要將所輸入的利率先除以100,這是轉成百分比,同時要除以12表示是月利率。可以用下列方式計算月利率,用monthrate當變量。

    monthrate = rate / (12*100)     # 第5行

為了不讓求每月還款金額的數學式變得復雜,將分子(第8行)與分母(第9行)分開計算,第10行是計算每月還款金額,第11行是計算總共還款金額。

程序實例ch4_21.py:請輸入貸款金額、貸款年限和年利率,程序會輸出每月還款金額和總共還款金額。

執行結果

4-7-3 正五角形面積

在幾何學中正五角形邊長假設是s,其面積的計算公式如下:

上述計算正五角形面積需要使用數學中的PI,雖然可以使用3.14159代替,不過筆者此處先引導讀者學習使用Python的數學模塊,有關模塊的概念將在第13章說明,此節將先教導讀者使用,可以使用“import math”導入此數學模塊。

程序實例ch4_22.py:請輸入正五角形的邊長s,此程序會計算此正五角形的面積。

執行結果

可以將上述概念擴充應用在正多邊形面積計算,相關概念可以參考習題13。

4-7-4 利用經緯度計算地球各城市間的距離

地球是圓的,我們可以使用經度和緯度來了解地球上每一個點的位置。有了兩個地點的經緯度后,可以使用下列公式計算彼此的距離。

    distance = r×acos(sin(x1)×sin(x2)+cos(x1)×cos(x2)×cos(y1-y2))

上述r是地球的半徑約6371千米,由于Python的三角函數都是弧度(radians)單位,我們使用上述公式時,需使用math.radian( )函數將角度轉成弧度。上述公式西經和北緯是正值,東經和南緯是負值。

經度坐標介于-180°~180°,緯度坐標是-90°~和90°,雖然我們習慣稱經緯度,在用小括號表達時卻是(緯度, 經度),也就是第一個參數放緯度,第二個參數放經度。

最簡單的獲得經緯度的方式是打開Google地圖,其實打開Google地圖后就可以在網址列看到我們目前所在地點的經緯度,選擇地點就可以在網址列看到所選地點的經緯度信息,可參考下方左圖。

由上圖可以知道中國臺北車站的經緯度是(25.0452909, 121.5168704),以上概念可以應用于查詢世界各地的經緯度,上方右圖是中國香港紅磡車站的經緯度(22.2838912, 114.173166),程序為了簡化小數取4位。

程序實例ch4_23.py:中國香港紅磡車站的經緯度信息是(22.2839, 114.1731),中國臺北車站的經緯度是(25.0452, 121.5168),請計算中國臺北車站至中國香港紅磡車站的距離。

執行結果

習題

1. 請重新設計第2章的習題4,將輸出方式改為下列方式。(4-2節)

2. 擴充ch4_10.py,最右邊增加平均分數字段,這個字段的格式化方式是%4.1f,相當于取到小數第1位。(4-2節)

3. 設計前一個程序,輸出到out.txt,最后用記事本顯示執行結果,下列是執行畫面。(4-3節)

下列是驗證out.txt結果。

4. 寫一個程序,要求用戶輸入3位數數字,最后舍去個位數字輸出,例如,輸入是777輸出是770,輸入是879輸出是870。(4-4節)

5. 請重新設計ch4_20.py,改為輸入攝氏溫度,轉成華氏溫度輸出,輸出溫度格式化到小數第1位。(4-4節)

6. 輸入厘米,轉成英寸輸出,輸出格式化到小數第1位。提示:1英寸約是2.54厘米。(4-4節)

7. 輸入英寸,轉成厘米輸出,輸出格式化到小數第1位。提示:1英寸約是2.54厘米。(4-4節)

8. 請重新設計ch2_5.py,將年利率存款年數改為從屏幕輸入,輸出金額舍去小數相當于單位是元。(4-4節)

9. 請重新設計第2章的習題5,將火箭飛行速度改為從屏幕輸入,輸出舍去小數。(4-4節)

10. 請重新設計ch3_24.py,將速度speed改為從屏幕輸入馬赫數,程序會將速度馬赫數轉為千米/小時,然后才開始運算。(4-4節)

11. 請重新設計程序實例ch3_26.py,計算兩個點之間的距離,但是將點的坐標改為從屏幕輸入,一行需可以輸入x和y坐標,輸出到小數第2位。(4-5節)

12. 前一個習題的擴充,平面任意3個點可以產生三角形,請輸入任意3個點的坐標,可以使用下列公式計算此三角形的面積。假設三角形各邊長是dist1、dist2、dist3。(4-5節)

13. 在4-7-3節介紹了正五角形的面積計算公式,可以將該公式擴充為正多邊形面積計算,如下所示。(4-7節)

14. 請擴充ch4_23.py,將程序改為輸入兩個地點的經緯度,本程序可以計算這兩個地點的距離。(4-7節)

15. 假設一架飛機起飛的速度是v,飛機的加速度是a,下列是飛機起飛時所需的跑道長度公式。(4-7節)

請輸入飛機時速(米/秒)和加速速(米/秒),然后列出所需跑道長度(米)。

16. 北京故宮博物院的經緯度信息大約是(39.9196, 116.3669),法國巴黎羅浮宮的經緯度大約是(48.8595, 2.3369),請計算這兩個博物館之間的距離。(4-7節)

主站蜘蛛池模板: 偃师市| 安化县| 方城县| 内黄县| 依兰县| 武夷山市| 澄城县| 大名县| 石首市| 新沂市| 松原市| 余姚市| 崇文区| 拉孜县| 大名县| 灵石县| 淮安市| 望谟县| 驻马店市| 邓州市| 彭山县| 黔江区| 沙坪坝区| 平顶山市| 静宁县| 东明县| 顺义区| 滨州市| 涡阳县| 汉源县| 庐江县| 兴安县| 博白县| 永平县| 嘉祥县| 通渭县| 石景山区| 阿荣旗| 五原县| 出国| 肇庆市|