本節書摘來自華章計算機《從問題到程式:用python學程式設計和計算》一書中的第2章,練習,作者 裘宗燕,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
1. 複習下面概念:表達式,語句,指派,控制結構,函數,提示符,值,求值,文法錯誤,單詞,整數,浮點數,運算符,一進制運算符,二進制運算符,優先級,結合順序,字面量,文法錯誤,續行,續行符,尾數,指數,精度,溢出,數值計算,誤差,近似計算,對象,類型,整型,浮點型,類型名,數值類型,内置類型(标準類型),類型轉換,強制類型轉換,内置函數(标準函數),程式包,函數調用,實際參數(實參),傳回值,程式包,導入,字元串,下标,下标越界,字元串長度,拼接,切片,變量,辨別符,關鍵字,指派語句,指派,指派符,程式設計,順序計算,腳本,檔案,擴充名py,輸出函數,問題和執行個體,提示串,程式崩潰,注釋,關系表達式,邏輯表達式,條件語句(分支語句,if語句),組合語句中的段,段的頭部,段的體,結構的遞歸性,直線型程式,執行路徑,分支程式,重複計算,循環語句(循環結構),疊代器,循環頭部,循環體,疊代,牛頓疊代法,break語句,continue語句,三種計算流程模式,值抽象,函數抽象,函數定義,形式參數(形參),函數傳回值,函數調用,實際參數(實參,實參表達式),擴充指派符,條件表達式,
2. 假定首先做下面的指派:
length = 2.5
width = 4
something = "."
length * 4
(length + 2) * width
something * 5
something int(width 2)
3. 請用雙引号形式寫出下面的字元串:
a) '"i'm fine", he said.'
b) """"is this
the book
of you?", she asked."""
4. 請分别寫出對應于下面三個句子的python字元串字面量,包括所有引号:
5. 首先自己分析下面邏輯表達式的值,再用python系統檢驗:
true and not true
false or not false and false or not true or not false
3 > 2 and 5 <= 4 or 4 > 3 and 7 < 9
6. 在下面表達式的計算過程中,哪些地方将發生類型轉換,各是從什麼類型轉換到什麼類型,表達式計算的結果是什麼?
a) 3 * (2 + 4.5) - 12 + 44
b) 3 int(sqrt(34)) - sin(6) 5 + 3.56
c) cos(2.5 + 4) - 6 * 27 + 1526 - 2.4
7. 下面字元序列中哪些不是合法的變量名:
-abc __aa for pp.288 to be
ibm/pc ms-c #micro m%ust tihs
while r24_s25 __a__b a"bc _345
8. 用python系統的一個友善的地方就是很容易做試驗。請設計一些試驗,确認正文中的一個說法:計算中涉及的整數越大,計算進行得越慢。
9. 請通過試驗,設法确定python能表示的最小和最大的正浮點數。其中最小的浮點數要求給出準确的結果,最大浮點數給出10位十進制有效數字的結果。
10. 選擇問答題:
a. 128 b. 64 c. 256 d. 512
a. 2 b. 8 c. 2.0 d. 8.0
a. final b. global c. int d. print
a. and b. while c. int d. math
a. return b. continue c. import d. break
a. not(x == y) b. x > y and x < y
c. x > y or x < y d. x >= y or x <= y
a. x = y = z = 1 b. x = (y = z + 1)
c. x, y = y, x d. x += y
a. 等于運算符右邊應該寫 0.0。 b. print不能輸出邏輯結果。
c. 浮點數計算有誤差。 d. python系統的實作有問題。
11. 設s的值是字元串"1234567890",請寫出下面字元串切片的值( )。
a. s[:30:2] b. s[:-1:-2] c. s[-4:] d. s[-1:1:-3]
12. 請借助于各種字元串操作,用最簡潔的方式構造出一個字元串,使得用print輸出它将得到一個8×8個格子的棋盤(沒有黑白填充的國際象棋棋盤)。
13. 數學知識告訴我們,對于充分大的正整數n,一定有。請利用python找出使這個不等式成立的最小正整數。
1. 用python計算下面各個表達式的值:

2. 利用python計算:
3. 利用python的math包檢驗一些三角恒等式。采用具體的數值檢驗,計算等式兩邊的值和它們的差。可以在代碼裡寫好具體數值,也可以通過人輸入。可以考慮下面寫法,以便執行時看到具體情況:
a = ... # 計算恒等式左邊的值
b = ... # 計算恒等式右邊的值
print(a, b, a - b)
4. 鐵的比重為7.86,金的比重為19.3。請寫一個程式,給它圓球的半徑,它計算并輸出具有該半徑的鐵球和金球的重量。
5. 試驗正文中求二次方程根的程式,求幾個二次方程的根。
6. 基于正文中求二次方程根的程式寫一個程式,它能用于驗證初等代數給出的二次方程求根公式是正确的,求根程式給出的結果誤差不大。
7. 寫一個簡單程式,它執行時輸出一些有名的英文句子或詩。或輸出李白的“望廬山瀑布”和另外幾首你喜愛的唐詩宋詞。(請注意,字元串引号必須是英文引号。)
8. 如果四邊形四個邊的長度分别為a、b、c、d,一對對角之和為2α,則其面積為:
9. 修改已知四邊長求四邊形面積的函數,增加對各種參數錯誤情況的檢查和處理(如傳回值0),用各種執行個體資料檢查你的函數能否檢查出所有可能出現的錯誤情況。總結一下你定義的函數有哪些不足之處,應從中吸取哪些教訓?
10. 請定義下面函數:
11. 請定義函數distance(x1, y1, x2, y2),它計算坐标分别為x1、y1和x2、y2的兩個平面點之間的距離。
12. 定義函數:double tmax(double, double, double),它傳回三個參數中最大的一個。寫一個主函數試驗各種參數情況。
13. 檢視有關公式,寫求解并輸出一進制三次方程的根的函數。
14. 分析本章正文中給出的求二次方程根的函數,看它缺乏對哪些特殊情況的處理。補充這些處理,在需要時輸出适當的資訊,使之成為一個更完整的函數。請用各種特殊情況和一般情況測試你完成的函數。
15. 請寫程式輸出不大于n的所有不能被7整除但能被3整除的自然數。考慮用兩種不同的方法完成這一工作。
16. 請寫一個程式,從a開始到b按步長d逐一檢查math包中sqrt的計算結果,看看其傳回值sqrt(x)的平方與x的差。輸出一個表格顯示有關資訊。先考慮固定的a、b和d,而後考慮由輸入得到這幾個基本參數。
17. 寫一個程式,從a開始到b按步長d比較math包的求平方根函數和課堂給出的求平方根程式,在一行裡輸出這兩個函數值和它們之差的絕對值,并在最後輸出誤差的平均值。請以比較清晰的方式輸出。先考慮固定的a、b和d,而後考慮由輸入得到這幾個基本參數。
18. 請寫一個程式,其功能是在一行裡輸出0到90°之間(包括兩端點)每隔5°的角度值以及其正弦、餘弦函數值。
19. 在中國,評價汽車的油耗用每100公裡耗油升數作為名額,在英美采用的名額是每加侖行駛的英裡數(mpg)。請定義兩個函數mpg_to_lit100和lit100_to_mpg,它們分别完成兩個方向的資料轉換。
20. 法律規定每周5個工作日,每天工作時間為8小時。此外,工作日逾時工作工資為正常工資的150%;休息日工資為正常工資的200%。請查出你所在地的最低小時工資額,并定義一個函數,計算從業人員的一周工資。
21. 1)不用函數,直接寫一個主程式計算并輸出直徑為100mm和150mm的金、銀、銅、鐵、錫球的重量(以kg為機關輸出)。
22. 請查銀行1年定期存款的利率和5年定期存款的利率。假定現在存入100元錢,存款到期後立即将利息與本金一起再存入。請寫程式計算按每次存1年和按照每次存5年,共存50年後兩種存款方式的得款總額。對兩種情況每隔5年輸出一次當時的總金額。
23. 寫一個函數,它以兩個電阻的值作為參數,求出并聯的電阻值。
24. 費馬大定理說對于,不存在實數a,b,c使得。請定義一個函數check_fermat(a, b, c, n),當上述等式成立時它輸出fermat is wrong,否則輸出i can not find that fermat is wrong。再寫一段驅動函數,它反複輸出提示符,讀入資料後調用上面函數,檢查費馬大定理是否正确。
25. 參考第2題的(d)項,定義一個函數,對任何書籍單價及其重量(及郵費),以及打折率和本數,計算出總價。
26. 請定義一個函數count(s, c),它檢查字元串s中單個字元c(用隻包含一個字元的字元串表示)出現的次數,傳回這個次數。
27. 1939年美國作家ernest vincent wright寫了一本超過5萬個詞的小說gadsby,其中沒用一次字母e(注意,e是英文中使用最多的字母)。請定義函數has_no(s, c),它檢查字元串s裡是否不出現字元c,如果沒有就傳回true,否則傳回false。
28. 一個單詞是字元串裡連續的一段非空白字元。請定義函數has(s, w),它檢查字元串s裡是否出現單詞w,如果出現就傳回true,否則傳回false。注意,這裡你可能需要用到字元串長度、字元串切片的操作。隻能使用本章介紹的幾個字元串操作。
29. 英文句子裡用空格分隔不同的英文單詞。請寫一個程式,它輸入一個句子,按從左到右的順序确定該句子裡的一個個單詞,分别輸出,一行輸出一個單詞。寫程式時隻能使用本章介紹的字元串操作。
30. 請編寫一個程式,要求使用者輸入一個大寫英文字母,程式根據輸入字元在字母表裡的順序位置n輸出一個高度為n的金字塔圖形,使最下一列的中間字母是使用者輸入的字母。例如,使用者輸入e時,程式将産生如下輸出:
31. 在計算機上試驗本章正文中的一些程式。觀察程式運作的情況。對它們做一些你自己想到的修改或擴充,運作它們,設法了解和解釋程式的行為。