《Python程序設計(第3版)》[美] 約翰·策勒(John Zelle) 第 1 章 答案


判斷對錯
1.計算機科學是計算機的研究。
2.CPU 是計算機的“大腦”。
3.輔助存儲器也稱為 RAM。
4.計算機當前正在處理的所有信息都存儲在主存儲器中。
5.語言的語法是它的意思,語義是它的形式。
6.函數定義是定義新命令的語句序列。
7.編程環境是指程序員工作的地方。
8.變量用於給一個值賦予一個名稱,這樣它就可以在其他地方被引用。
9.循環用於跳過程序的一部分。
10.混沌函數不能由計算機計算。
解答

 1 F(計算機科學不是研究計算機的,其根本問題就是“可以計算 什么”)
 2 T
 3 F(RAM是“主存儲器”,即隨機存取存儲器)
 4 T
 5 F(語言的語法是它的形式,語義是它的意思)
 6 T
 7 F(編程環境是指程序工作的地方)
 8 T
 9 F(循環用於讓程序重復做同樣的事情)
10 F(混沌函數是可以計算的,但計算結果可能沒有用)

多項選擇
1.計算機科學的根本問題是________________。
A.計算機的計算速度有多快
B.可以計算什么
C.什么是有效的編程語言
D.程序員可以賺多少錢

2.算法類似於________________ 。
A.報紙
B.捕蠅草
C.鼓
D.菜譜

3.一個問題是難解的,如果________________。
A.你不能反轉其解決方案
B.涉及拖拉機
C.它有很多解決方案
D.解決它不實際

4.以下________________項不是輔助存儲器。
A.RAM
B.硬盤驅動器
C.USB 閃存驅動器
D.DVD

5.設計來讓人類使用和理解的計算機語言是________________。
A.自然語言
B.高級計算機語言
C.機器語言
D.提取—執行語言

6.語句是________________。
A.機器語言的翻譯
B.完整的計算機命令
C.問題的精確描述
D.算法的一部分

7.編譯器和解釋器之間的一個區別是________________。
A.編譯器是一個程序
B.使用編譯器將高級語言翻譯成機器語言
C.在程序翻譯之后不再需要編譯器
D.編譯器處理源代碼

8.按照慣例,程序的語句通常放在一個函數中,該函數名為________________。
A.import
B.main
C.program
D.IDLE

9.關於注釋,以下不正確的是________________。
A.它們讓程序更有效率
B.它們是為人類讀者
C.它們被 Python 忽略
D.在 Python 中,它們以井號(#)開頭

10.函數定義的括號中列出的項被稱為________________。
A.括號
B.參數
C.變元
D.B 和 C 項都是正確的
解答

 1 B
 2 D
 3 D
 4 A
 5 B
 6 B
 7 C
 8 B
 9 A
10 D

討論

1、比較並對比本章中的以下概念對。
  a.硬件與軟件
  b.算法與程序
  c.編程語言與自然語言
  d.高級語言與機器語言
  e.解釋器與編譯器
  f.語法與語義
解答

a. 硬件是主體,軟件是其靈魂
b. 算法是解決問題的一個秘訣,程序是算法的具體實現
c. 編程語言是計算機使用的、語法及語義都是精確的一門語言,自然語言是人類使用的、充滿了模糊和不精確的語言
d. 高級語言是以讓人使用和理解為設計目的的語言,機器語言是給計算機硬件理解的一種非常低級的語言
e. 解釋器將源代碼根據需要一條一條地翻譯成機器語言來執行,編譯器只需要編譯一次,程序就能重復運行
f. 語法是源代碼的構成形式,語義是程序想要表達的意思

2、列出圖 1.1 中計算機的 5 個基本功能單元,並用你自己的話並解釋它們的作用。

解答

中央處理單元(CPU)是機器的“大腦”,這是計算機執行所有基本操作的地方。 
主存儲器存儲程序和數據,但它是易失性存儲,當電源關閉時,存儲器中的信息會丟失。
輔助存儲器提供永久的存儲。人類通過輸入和輸出設備與計算機交互,輸入設備允許計算機接收關於世界的信息,
當這些信息經過計算機處理后,輸出設備再將新的信息返回給世界讓人類吸收。

 

3、寫一個制作花生醬和果凍三明治(或其他日常活動)的詳細算法。你應該假設正在與一個概念上能夠完成該任務,但從來沒有實際做過的人交談。例如,你可能告訴一個小孩子怎么做。
解答

去商店買花生醬、果凍和面包。
將物品帶回家。
在將花生醬罐放入冰箱之前,沿逆時針方向扭轉蓋子打開花生醬罐。
用勺子攪拌花生醬。
確保不要將油或花生醬灑在罐子外面。
不停攪拌直到罐中的內容物具有均勻的稠度。
把花生醬罐、果凍罐和面包放在冰箱里。
打開冰箱門。
用手抓住花生醬罐把它拿出來。
將您手中拿着的罐子輕輕放在一個平坦的平面上,例如桌子上。
對果凍罐和面包重復這個過程。
關上冰箱門。
打開櫥櫃。
用手抓住一塊盤子。
將盤子從櫃子上取下並關閉櫥櫃門。
將盤子輕輕放在桌子上。
打開餐具所在的抽屜。
用手拿起一把刀。
關上抽屜。
把刀放在桌子上。
是時候打開罐子了。
抓住花生醬罐,如果你是右撇子,用左手牢牢地握住它。
用右手沿逆時針方向旋轉罐蓋,直到罐蓋與罐子完全分開。
如果罐蓋沒有打開,請帶着罐子去廚房水槽。
轉動熱水旋鈕。
等到水很熱。
將罐子瓶蓋放在流動的熱水下。
讓熱水在罐蓋上流動5分鍾。
用右手沿逆時針旋方向轉罐蓋,直到罐蓋與罐子完全分開。
對果凍罐重復此過程。
放在桌子上的面包很可能放在塑料袋里。
拿起面包,打開塑料袋。
取出2片不是末端切片的面包。
將切片放在盤子上,並排放置。
把塑料袋合上。
將裝有面包的塑料袋放回冰箱里。
拿起刀並握住刀柄。
拿着刀子,將刀刃浸入打開的花生醬罐中。
用刀舀出一些罐子里的東西,使一些花生醬在刀子的刀刃上。
握住刀子,使罐子內容物朝上,然后將刀子從你准備好的兩片面包中的一片上移開一英寸。
現在旋轉刀具,使其上有罐子內容物的一側朝下,而不是朝上。
將刀面朝下接觸面包的中心,然后輕輕鋪展整個切片,使層均勻。
重復此操作,直到面包片上有所需的花生醬稠度。
取下蓋子,將其放在罐子頂部,然后沿順時針方向扭轉蓋子。
合上花生醬罐。
把罐子放回你找到它的冰箱里。
重復上一段中對於果凍罐的整個過程,把果凍轉移到現在有花生醬的切片上。
你將會把果凍塗在花生醬上面。
當你完成果凍時,關閉罐子的方式與關閉罐裝花生醬的方法相同。
把罐子放回你找到它的冰箱里。
取上沒有任何東西的切片,輕輕地將花生醬和果凍放在切片的頂部,不要將切片擠在一起太硬。
確保兩個切片上的角都對齊。
切片的邊緣應該是齊平的。
切片本身現在彼此平行,並且在它們之間具有花生醬和果凍。
確保自己清理干凈。
請注意,這個問題沒有詳細說明,因為沒有用於定義算法步驟的集合詞匯表。換句話說,自然語言對於可靠地描述過程是低效的,甚至對於計算過程也是如此。(例如寫這個解答就花了不少時間)

 

4、 

正如你將在后續章節中學到的,存儲在計算機中的許多數字不是精確的值,而是接近的近似值。例如,值 0.1 可能存儲為 0.10000000000000000555。通常,這樣小的差異不是問題。然而,考慮到你在第 1 章中學到的混沌行為,你應該意識到在某些情況下需要謹慎。 你能想到這可能是一個問題的例子嗎?請說明。
解答

在任何情況下,為了使計算結果可用,計算結果必須是 100% 准確的,使用浮點型數據類型是不明智的。這種情況的例子:
- 計算測量,尤其是在非常大或者非常小的尺度
- 計算財務價值,尤其是隨着時間的推移(例如應計利息)
由於總是發生舍入誤差,結果將是不准確的。如果計算以某種像混沌函數一樣的方式重復,舍入誤差復合,將增加結果的不准確性。

5、使用 0.15 作為輸入值,手動追蹤第 1.6 節中的 chaos 程序。顯示結果的輸出序列。

1 # File: chaos.py 
2 # A simple program illustrating chaotic behavior. 
3 def main():
4     print("This program illustrates a chaotic function")
5     for i in range(10):
6         x = 3.9 * x * (1 - x)
7         print(x)
8 main() 

 

解答

x = .15
x = 3.9 * .15 * (1 - .15) = 0.49725
x = 3.9 * 0.49725 * (1 - 0.49725) = 0.97497050625
x = 3.9 * 0.97497050625 * (1 - 0.97497050625) = 0.0951717709512
x = 3.9 * 0.0951717709512 * (1 - 0.0951717709512) = 0.335845009364
x = 3.9 * 0.335845009364 * (1 - 0.335845009364) = 0.869907242293
x = 3.9 * 0.869907242293 * (1 - 0.869907242293) = 0.441357665188
x = 3.9 * 0.441357665188 * (1 - 0.441357665188) = 0.961588198614
x = 3.9 * 0.961588198614* (1 - 0.961588198614) = 0.14405170611
x = 3.9 * 0.14405170611 * (1 - 0.14405170611) = 0.4808731671
x = 3.9 * 0.4808731671 * (1 - 0.4808731671) = 0.973573240627
Python 環境:Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)] on win32

編程練習

 

1、啟動交互式 Python 會話,並嘗試鍵入以下每個命令。寫下你看到的結果。
解答

>>> print("Hello, world!") 
    Hello, world! 
>>> print("Hello", "world!") 
    Hello world! 
>>> print(3) 
    3 
>>> print(3.0) 
    3.0 
>>> print(2 + 3) 
    5 
>>> print(2.0 + 3.0) 
    5.0 
>>> print("2" + "3") 
    23 
>>> print("2 + 3 =", 2 + 3) 
    2 + 3 = 5 
>>> print(2 * 3) 
    6
 >>> print(2 ** 3) 
    8 
>>> print(7 / 3) 
    2.3333333333333335 
>>> print(7 // 3) 
2 

 2、 輸入並運行第 1.6 節中的chaos程序。嘗試使用各種輸入值,觀察它在本章中描述 的功能。

解答

3、修改chaos程序,使用 2.0 代替 3.9 作為邏輯函數中的乘數。你修改的代碼行應該 像下面這樣:

x = 2.0 * x * (1 - x)

用各種輸入值運行該程序,並將結果與從原始程序獲得的結果進行比較。寫一小段話, 描述你在兩個版本的行為中觀察到的所有差異。
解答

差異:當乘數為 2 時,Logistic 函數的結果似乎表現得"不那么隨機"了。

4、修改chaos程序,讓它打印出 20 個值,而不是 10 個。
解答
將 range 里的 10 改成 20 即可。

1 def main():
2     print("This program illustrates a chaotic function")
3     x = eval(input("Enter a number between 0 and 1: "))
4     for i in range(20):
5         x = 3.9 * x * (1 - x)
6         print(x)
7 main()

 

5、修改 chaos程序,讓打印值的數量由用戶確定。你將必須在程序頂部附近添加一行, 從用戶獲取另一個值:

n = eval(input("How many numbers should I print? ")) 

 

然后,你需要更改循環,使用 n 代替具體的數字。
解答

1 def main():
2     print("This program illustrates a chaotic function")
3     x = eval(input("Enter a number between 0 and 1: "))
4     n = eval(input("How many numbers should I print? "))
5     for i in range(n):
6         x = 3.9 * x * (1 - x)
7         print(x)
8 main()

 

6、在 chaos 程序中執行的計算,可以用代數等價的多種方式來編寫。為以下每種計算 方式編寫一個程序版本。讓你修改的程序打印出 100 次迭代的計算,並比較相同輸入的運行結果。

a.3.9 * x * (1 - x)
b.3.9 * (x - x * x)
c.3.9 * x - 3.9 * x * x

 

 

 1 def main ():
 2     print("This program is an experiment.")
 3     x = eval(input("Enter a number between 0 and 1: "))
 4     a = x
 5     b = x
 6     c = x
 7     for i in range(100):
 8         a = 3.9 * a * (1 - a)
 9         b = 3.9 * b * (b - b * b)
10         c = 3.9 * c - 3.9 * c * c
11         print("{0:<30.20}{1:<30.20}{2:<30.20}".format(a, b, c))
12 main()

 

# Output:
This program is an experiment.
Enter a number between 0 and 1: .15
0.4972499999999999698         0.074587500000000001021       0.4972499999999999698
0.97497050625000003521        0.020078537227254493469       0.97497050625000003521
0.095171770951212847356       0.0015407068635790652222      0.095171770951212764089
0.33584500936436861851        9.2434693415137459739e-06     0.33584500936436834095
0.86990724229272164969        3.3321964918918541976e-10     0.8699072422927212056
0.44135766518763547284        4.3303780481818209782e-19     0.44135766518763697164
0.96158819861424271735        7.3133478756682489511e-37     0.96158819861424327247
0.14405170611022782845        2.0859172288711103637e-72     0.14405170611022599658
0.48087316710014554877        1.6969097674235196302e-143    0.48087316710014038623
0.97357324062656191987        1.1230060759231639721e-285    0.97357324062656136476
0.100340704473580275          0.0                           0.10034070447358223177
0.35206254524737101708        0.0                           0.3520625452473771233
0.8896465869771239543         0.0                           0.88964658697713105973
0.38288459530260643415        0.0                           0.3828845953025847848
0.92150752973200633633        0.0                           0.92150752973198646334
0.28209246927896497459        0.0                           0.28209246927903031121
0.78981360141473855307        0.0                           0.78981360141484957538
0.64743149809657429827        0.0                           0.64743149809632338787
0.89022941813909917119        0.0                           0.89022941813938771816
0.38111190475339840056        0.0                           0.38111190475252021415
0.91987592115367633472        0.0                           0.91987592115286209715
0.28744642225787186973        0.0                           0.28744642226053862544
0.79880180869718220293        0.0                           0.79880180870160344409
0.62679816856524084301        0.0                           0.62679816855493664107
0.91229667534915293015        0.0                           0.9122966753593442224
0.31204466083453724634        0.0                           0.31204466080176285203
0.83722388286886373354        0.0                           0.83722388282081494637
0.53149220600910274115        0.0                           0.53149220613548786574
0.97113213974665291151        0.0                           0.97113213971560785609
0.10933457690118721095        0.0                           0.10933457701527249384
0.37978405606059983945        0.0                           0.37978405640823936773
0.91863769460876010253        0.0                           0.91863769493473623751
0.2914956745453838316         0.0                           0.29149567348094995722
0.80545119044019053423        0.0                           0.80545118870906562414
0.61112832400881478279        0.0                           0.61112832813325335124
0.92683693285166823816        0.0                           0.92683692927660099592
0.26445990773974376031        0.0                           0.26445991964231563287
0.75863137325831675462        0.0                           0.75863139512587274282
0.71412826978941723599        0.0                           0.71412822567545441999
0.79618142790026313893        0.0                           0.79618150157941847134
0.63287859089114872901        0.0                           0.63287842067642774424
0.90613879232285265974        0.0                           0.90613896874229937772
0.3316999973450855399         0.0                           0.33169943846887228744
0.86453292551478755357        0.0                           0.86453219185439755812
0.45675141024095838871        0.0                           0.45675349629713180022
0.96770528198703098521        0.0                           0.96770598567816334956
0.12188189988558413568        0.0                           0.1218793327471887622
0.41740413922687186199        0.0                           0.41739656788552631506
0.94839390275426949106        0.0                           0.94838902471134722827
0.19087734109389939419        0.0                           0.19089440182178663008
0.60232840882820803952        0.0                           0.60236954378206664096
0.93416269731207979277        0.0                           0.93412985837282103141
0.23986073382452757774        0.0                           0.23997193766985791541
0.71107749255537822108        0.0                           0.71130308652324369945
0.80124053933248351456        0.0                           0.80086892194042724746
0.62109113610443034137        0.0                           0.62196377806058000814
0.9178140533520593447         0.0                           0.91698686368063930807
0.29418252560393776118        0.0                           0.29687562651935728297
0.80979275220958235604        0.0                           0.81408790670257591415
0.60071095764580806353        0.0                           0.59026026876645643071
0.93544348173925051526        0.0                           0.94322702714060757678
0.23551699942211609673        0.0                           0.2088442294071866101
0.70219009538074428356        0.0                           0.644390437276969541
0.81556474478670948347        0.0                           0.89369046632956550269
0.58663367820602574376        0.0                           0.37053048521271625404
0.94572896262192962524        0.0                           0.90962681448890669866
0.20017019833191598832        0.0                           0.3206029041215163744
0.62439815112354191129        0.0                           0.84948505976242794091
0.91464788998847323942        0.0                           0.49865475271112336131
0.30446179657961724985        0.0                           0.97499294220795396093
0.82588276291220308334        0.0                           0.095088648925262031497
0.56082165686316443054        0.0                           0.3355825113062381182
0.96057283162003592736        0.0                           0.86957086870538313761
0.14770340041665791508        0.0                           0.44232775471695884306
0.49095971309585589859        0.0                           0.96202825728364960156
0.97468126552949407859        0.0                           0.14246656893859155346
0.096243015005739951384       0.0                           0.47646239812648266687
0.3392231585665449467         0.0                           0.97283932706237075116
0.87418814830885838152        0.0                           0.10304958605449687781
0.42893459569423242339        0.0                           0.36047843858712547149
0.95530386241234532818        0.0                           0.89908156221356250182
0.1665237322023604416         0.0                           0.35386223613461131876
0.54129495738145216865        0.0                           0.89171064049245307714
0.96834943332996981091        0.0                           0.37659481908746927914
0.11953035236803503938        0.0                           0.91560752916338761231
0.4104471042001528458         0.0                           0.30135448864054525941
0.94372308753006062254        0.0                           0.82110584718528878412
0.20712830421188160868        0.0                           0.57287503612332990599
0.64048206224414805376        0.0                           0.95428799352909110532
0.89803268173176209466        0.0                           0.17012743384771855659
0.35712293866634492456        0.0                           0.55061795139042390979
0.89538596684416993376        0.0                           0.96500750968844295485
0.36531275516853373153        0.0                           0.13169526214007509779
0.90425144971086368617        0.0                           0.44597131827273472915
0.33766498508599368522        0.0                           0.96361551604817408112
0.87222463743819045323        0.0                           0.13673654778960253608
0.43465039520762988046        0.0                           0.46035469072391865808
0.95834477369857595797        0.0                           0.96887017286437504549
0.15568826685048464675        0.0                           0.11762696789271132047
0.51265277862075009363        0.0                           0.40478437083660567808
當輸入值是浮點數據類型時,用代數等價的方式不會返回相同的輸出,這是因為浮點數中隱含有舍入錯誤。

 

7、(高級)修改chaos程序,讓它接受兩個輸入,然后打印一個包含兩列的表,類似 第 1.8 節中顯示的表。(注意:你可能無法讓列排得與示例中一樣好,第 5 章將討論如何使 用固定小數位數打印數字。
解答

 1 def main(): 
 2     print("Ths program illustrates a chaotic function") 
 3     x = float(input("Enter first number between 0 and 1: ")) 
 4     y = float(input("Enter second number between 0 and 1: ")) 
 5     z = "input" print("{2:<8}{0:<13.2f}{1:<6.2f}".format(x,y,z))         
 6     print("---------------------------") 
 7     for i in range (10): 
 8         x = 3.9 * x * (1 - x)
 9         y = 3.9 * y * (1 - x) 
10         print("{0:>14.6f}{1:>13.6f}".format(x, y)) 
11  main()
# Output:
Ths program illustrates a chaotic function
Enter first number between 0 and 1: .26
Enter second number between 0 and 1: .27
input   0.26         0.27
---------------------------
      0.750360     0.262871
      0.730547     0.276242
      0.767707     0.250260
      0.695499     0.297196
      0.825942     0.201745
      0.560671     0.345666
      0.960644     0.053055
      0.147447     0.176407
      0.490255     0.350698
      0.974630     0.034700

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM