《Python程式設計(第3版)》[美] 約翰·策勒(John Zelle) 第 4 章 答案
判斷對錯
1、利用 grAphiCs.py 可以在 Python 的 shell 視窗中繪製圖形。
2、傳統上,圖形視窗的左上角座標為(0,0)。
3、圖形螢幕上的單個點稱為畫素。
4、建立類的新例項的函式稱為取值方法。
5、例項變數用於在物件記憶體儲資料。
6、語句 myShApe.move(10,20) 將 myShApe 移動到點(10,20)。
7、如果兩個變數引用同一個物件,就產生了別名。
8、提供 Copy 方法是用於生成圖形物件的副本。
9、圖形視窗的標題總是“GrAphiCs WinDow”。
10、grAphiCs 庫中,用於獲取滑鼠點選的方法是 reADMouse。
解答
1 F(是在 GrAphWin() 函式建立的視窗中繪製圖形)2 T(p.55 “(傳統上,圖形程式設計師將點定位在視窗的左上角。”) 3 T(p.55 “圖形視窗實際上是一些小點的集合,這些小點稱為“畫素”(“影象元素”的縮寫)”) 4 F(p.57 “要建立一個類的新例項,我們使用一個特殊操作,稱為“建構函式”,p.58 “這些方法有時被稱為“取值方法”,因為它們允許我們從物件的例項變數訪問資訊。” p.76 “取值方法返回有關物件的例項變數的資訊。”) 5 T(p.57 “這些值作為“例項變數”儲存在物件內。”) 6 F(p.58 “。所有圖形物件都有 move 方法。下面是規格說明:move(Dx,Dy):讓物件在 x 方向上移動 Dx 單位,在 y 方向上移動 Dy 單位。”)7 T(p.59 “……兩個變數引用同一個物件稱為“別名”……”,p.76 “兩個變數引用同一物件的情況稱為別名。”) 8 F(p.59 “grAphiCs 庫提供了更好的解決方案,所有圖形物件都支援複製物件的 Clone 方法。”) 9 F(p.61 “……GrAphWin 建構函式允許一個可選引數指定視窗的標題。”) 10 F(p.67 “如果在 GrAphWin 上呼叫 getMouse,程式將暫停,並等待使用者在圖形視窗中某處單擊滑鼠。”,p.71 “getMouse() 暫停等待使用者在視窗中單擊滑鼠,並用 Point 物件返回滑鼠單擊的位置。”)
多項選擇
1、返回物件的例項變數的值的方法稱為____。
A. 設值方法
B. 函式
C. 構造方法
D. 取值方法
2、改變物件狀態的方法稱為____。
A. 狀態方法
B. 設值方法
C. 構造方法
D. 變更方法
3、____圖形類最適合繪製一個正方形。
A. Square
B. Polygon
C. Line
D. Rectangle
4、____命令會將 win 的座標設定變為左下角是(0,0),右上角是(10,10)。
A. win.setCoords(Point(0,0), Point(10,10))
B. win.setCoords((0,0), (10,10))
C. win.setCoords(0, 0, 10, 10)
D. win.setCoords(Point(10,10), Point(0,0))
5、表示式____將建立從(2,3)到(4,5)的線段。
A. Line(2, 3, 4, 5)
B. Line((2,3), (4,5))
C. Line(2, 4, 3, 5)
D. Line(Point(2,3), Point(4,5))
6、命令____可以將圖形物件 shApe 繪製到圖形視窗 win 中。
A. win.draw(shape)
B. win.show(shape)
C. shape.draw()
D. shape.draw(win)
7、表示式____計算點 p1 和 p2 之間的水平距離。
A. abs(p1-p2)
B. p2.getX() - p1.getX()
C. abs(p1.getY() - p2.getY())
D. abs(p1.getX() - p2.getX())
8、物件____可以用來在圖形視窗中獲取文字輸入。
A. Text
B. Entry
C. Input
D. Keyboard
9、圍繞視覺元素和使用者動作組織的使用者介面被稱為____。
A. GUI
B. Application
C. windower
D. API
10、Color_rgb(0,255,255) 是____。
A. 黃色
B. 青色
C. 品紅色
D. 橙色
解答
1 D 2 B 3 D 4 C 5 D 6 D 7 D 8 B 9 A 10 B
討論
- 選擇一個有趣的現實世界物件的例子,通過列出它的資料(屬性,它“知道什麼”)及方法(行為,它可以“做什麼”),將它描述為一個程式設計物件。
解答
冰箱
資料:容積
方法:開門()、放入()、關門()
要往冰箱裡放入大象:
冰箱.開門()
冰箱.放入(大象)
冰箱.關門()
2、用你自己的話描述 graphics 模組的下列操作產生的每個物件,儘可能精確。務必描述各種物件的大小、位置和外觀等。如果需要,可以畫草圖。
1 a. Point(130,130) 2 3 b. c = Circle(Point(30,40),25) 4 c.setFill("blue") 5 c.setOutline("red") 6 7 c. r = Rectangle(Point(20,20), Point(40,40)) 8 r.setFill(color_rgb(0,255,150)) 9 r.setWidth(3) 10 11 d. l = Line(Point(100,100), Point(100,200)) 12 l.setOutline("red4") 13 l.setArrow("first") 14 15 e. Oval(Point(50,50), Point(60,100)) 16 17 f. shape = Polygon(Point(5,5), Point(10,10), Point(5,10), Point(10,5)) 18 shape.setFill("orange") 19 20 g. t = Text(Point(100,100), "Hello World!") 21 t.setFace("courier") 22 t.setSize(16) 23 t.setStyle("italic")
解答
a. 一個座標為 (130,130) 的點 b. 一個圓心為 (30,40)、半徑為 25 畫素的紅色輪廓的藍色圓圈 c. 一個邊長為 20 畫素、中心點為 (30,30)、有 3 畫素寬的黑色輪廓的藍綠色正方形 d. 一條底部位於點 (100,200)、長度為 100 畫素的暗紅色線,其;上端有一個向上指的箭頭 e. 一個寬度為 10、高度為 50、中心為 (55,75) 的未填充的 “豎立的” 橢圓形 f. 一個以點 (7.5,7.5) 為中心、黑色輪廓的橙色沙漏 g. 一個以 (100,100) 為中心、以 16 點式斜體字形顯示的 “Hello World!” 文字
3、描述以下互動式圖形程式執行時會發生什麼:
1 from graphics import * 2 3 def main(): 4 win = GraphWin() 5 shape = Circle(Point(50,50), 20) 6 shape.setOutline("red") 7 shape.setFill("red") 8 shape.draw(win) 9 for i in range(10): 10 p = win.getMouse() 11 c = shape.getCenter() 12 dx = p.getX() - c.getX() 13 dy = p.getY() - c.getY() 14 shape.move(dx,dy) 15 win.close() 16 main()
解答
程式在預設圖形視窗中繪製一個圓心在 (50,50)、半徑為 20 畫素的紅色圓圈,然後等待使用者單擊滑鼠 10 次。每次使用者點選時,圓圈都會移動到點選的點(以其為圓心)。點選 10 次後,視窗消失。
程式設計練習
1、修改上一個討論問題的程式,做到:
a.使它繪製正方形而不是圓。
b.每次連續點選在螢幕上繪製一個額外的方塊(而不是移動已有的方塊)。
解答
1 from graphics import * 2 3 def main(): 4 win = GraphWin() 5 shape = Rectangle(Point(30,30), Point(70,70)) 6 shape.setOutline("red") 7 shape.setFill("red") 8 shape.draw(win) 9 for _ in range(10): 10 p = win.getMouse() 11 c = shape.getCenter() 12 dx = p.getX() - c.getX() 13 dy = p.getY() - c.getY() 14 shape = shape.clone() 15 shape.move(dx,dy) 16 shape.draw(win) 17 win.close() 18 19 main()
2、箭靶的中心圓為黃色,圍繞著紅色、藍色、黑色和白色的同心環。每個環具有相同
的寬度,與黃色圓的半徑相同。編寫一個繪製這種箭靶的程式。(提示:稍後繪製的物件將
出現在先前繪製的物件的上面。)
解答
1 from graphics import * 2 3 def main(): 4 win = GraphWin("Archery Target", 360, 360) 5 win.setCoords(-6, -6, 6, 6) 6 win.setBackground("gray") 7 center = Point(0,0) 8 9 c1 = Circle(center, 5) 10 c1.setFill("white") 11 c1.draw(win) 12 13 c2 = Circle(center, 4) 14 c2.setFill("black") 15 c2.draw(win) 16 17 c3 = Circle(center, 3) 18 c3.setFill("blue") 19 c3.draw(win) 20 21 c4 = Circle(center, 2) 22 c4.setFill("red") 23 c4.draw(win) 24 25 c5 = Circle(center, 1) 26 c5.setFill("yellow") 27 c5.draw(win) 28 29 win.getMouse() 30 win.close() 31 32 main()
- 編寫一個繪製某種面孔的程式。
解答
參考連結
1 # Author: Cody Leistikow (10/4/02) 2 3 from graphics import * 4 5 def main(): 6 win=GraphWin('Face',400,420) 7 win.setBackground("white") 8 neck = Polygon(Point(177,352),Point(176,371),Point(162,398),Point(170,400),Point(185,391),Point(231,373),Point(260,368),Point(287,357),Point(312,333),Point(235,311)) 9 neck.setFill(color_rgb(239,222,215)) 10 head = Polygon(Point(136,228),Point(107,260),Point(110,279),Point(129,302),Point(140,321),Point(175,350),Point(193,348),Point(234,312),Point(238,296),Point(255,291),Point(272,266),Point(271,240),Point(264,226),Point(253,224),Point(239,239),Point(243,193)) 11 head.setFill(color_rgb(239,222,215)) 12 headdark1 = Polygon(Point(184,212),Point(190,217),Point(194,261),Point(173,286),Point(198,284),Point(204,310),Point(203,321),Point(200,333),Point(192,346),Point(202,352),Point(206,351),Point(206,372),Point(225,339),Point(218,377),Point(236,371),Point(252,344),Point(258,342),Point(257,369),Point(286,358),Point(294,339),Point(300,343),Point(312,334),Point(295,319),Point(282,313),Point(276,292),Point(258,289),Point(242,296),Point(236,291),Point(240,284),Point(242,278),Point(247,278),Point(249,268),Point(240,265),Point(242,258),Point(234,261),Point(258,185)) 13 headdark1.setFill(color_rgb(226,179,154)) 14 headdark2 = Polygon(Point(133,231),Point(123,241),Point(112,273),Point(117,275),Point(148,227)) 15 headdark2.setFill(color_rgb(226,179,154)) 16 headdark3 = Polygon(Point(177,218),Point(161,279),Point(168,221)) 17 headdark3.setFill(color_rgb(226,179,154)) 18 neckline1 = Line(Point(182,365),Point(185,390)) 19 neckline2 = Line(Point(199,385),Point(219,350)) 20 neckline3 = Line(Point(219,350),Point(230,324)) 21 neckline4 = Line(Point(225,374),Point(235,340)) 22 neckline5 = Line(Point(282,313),Point(288,334)) 23 throat = Polygon(Point(189,366),Point(192,381),Point(186,373)) 24 throat.setFill(color_rgb(117,110,105)) 25 headline1 = Line(Point(193,349),Point(212,334)) 26 headline2 = Line(Point(212,334),Point(234,312)) 27 headline3 = Line(Point(234,312),Point(241,294)) 28 headline4 = Line(Point(135,279),Point(140,292)) 29 headline5 = Line(Point(149,279),Point(154,289)) 30 innerear = Polygon(Point(263,249),Point(262,240),Point(257,234),Point(241,259),Point(242,267),Point(248,269),Point(249,277),Point(242,279),Point(241,283),Point(260,271),Point(263,265),Point(253,260),Point(254,251)) 31 innerear.setFill(color_rgb(201,153,145)) 32 earline1 = Line(Point(247,249),Point(258,249)) 33 earline2 = Line(Point(248,268),Point(255,264)) 34 earline3 = Line(Point(241,261),Point(255,261)) 35 earline4 = Line(Point(255,261),Point(257,272)) 36 earline5 = Line(Point(257,272),Point(265,264)) 37 chin = Polygon(Point(161,326),Point(176,327),Point(179,330),Point(165,330)) 38 chin.setFill(color_rgb(215,178,182)) 39 mouthline1 = Line(Point(154,320),Point(158,322)) 40 mouthline2 = Line(Point(158,322),Point(171,318)) 41 mouthline3 = Line(Point(171,318),Point(179,318)) 42 noseline1 = Line(Point(146,303),Point(146,311)) 43 noseline2 = Line(Point(146,311),Point(141,319)) 44 noseline3 = Line(Point(141,319),Point(156,312)) 45 lefteye = Polygon(Point(120,282),Point(140,293),Point(128,293)) 46 lefteye.setFill(color_rgb(255,255,255)) 47 righteye = Polygon(Point(163,286),Point(166,289),Point(197,277),Point(199,264)) 48 righteye.setFill(color_rgb(255,255,255)) 49 leftiris = Polygon(Point(128,287),Point(131,291),Point(137,290)) 50 leftiris.setFill(color_rgb(100,150,131)) 51 rightiris = Polygon(Point(168,282),Point(172,284),Point(179,275)) 52 rightiris.setFill(color_rgb(100,150,131)) 53 lefteyebrow = Polygon(Point(111,272),Point(140,290),Point(140,292),Point(111,276)) 54 lefteyebrow.setFill(color_rgb(247,218,116)) 55 righteyebrow = Polygon(Point(156,288),Point(209,251),Point(212,258),Point(157,288)) 56 righteyebrow.setFill(color_rgb(247,218,116)) 57 hairbg = Polygon(Point(49,110),Point(74,155),Point(89,103),Point(117,43),Point(127,96),Point(144,65),Point(198,21),Point(180,70),Point(230,32),Point(276,13),Point(241,77),Point(335,34),Point(310,74),Point(323,71),Point(331,65),Point(332,68),Point(363,45),Point(340,136),Point(356,125),Point(350,144),Point(381,124),Point(337,222),Point(309,240),Point(359,249),Point(294,276),Point(334,286),Point(275,297),Point(258,287),Point(272,264),Point(268,233),Point(264,225),Point(252,225),Point(239,238),Point(226,230),Point(228,219),Point(197,260),Point(210,221),Point(210,205),Point(175,217),Point(166,248),Point(142,294),Point(162,221),Point(136,230),Point(106,261),Point(110,277),Point(114,289),Point(116,317),Point(93,288),Point(94,278),Point(75,318),Point(76,274),Point(62,273),Point(69,247),Point(18,253),Point(67,215),Point(53,191)) 58 hairbg.setFill(color_rgb(247,218,116)) 59 hairdark1 = Polygon(Point(50,114),Point(74,156),Point(71,177)) 60 hairdark1.setFill(color_rgb(235,161,56)) 61 hairdark2 = Polygon(Point(47,243),Point(93,225),Point(89,239)) 62 hairdark2.setFill(color_rgb(235,161,56)) 63 hairdark3 = Polygon(Point(128,214),Point(94,256),Point(75,317),Point(99,270)) 64 hairdark3.setFill(color_rgb(235,161,56)) 65 hairdark4 = Polygon(Point(105,266),Point(116,313),Point(114,283)) 66 hairdark4.setFill(color_rgb(235,161,56)) 67 hairdark5 = Polygon(Point(119,45),Point(107,106),Point(112,170),Point(124,203),Point(129,200),Point(130,164),Point(121,139),Point(125,91),Point(117,43)) 68 hairdark5.setFill(color_rgb(235,161,56)) 69 hairdark6 = Polygon(Point(173,126),Point(145,193),Point(157,201),Point(157,216),Point(169,204),Point(186,176),Point(201,161),Point(213,122),Point(223,79),Point(234,55),Point(204,109),Point(160,186),Point(155,187),Point(179,117)) 70 hairdark6.setFill(color_rgb(235,161,56)) 71 hairdark7 = Polygon(Point(176,217),Point(253,115),Point(225,194),Point(212,192),Point(203,207)) 72 hairdark7.setFill(color_rgb(235,161,56)) 73 hairdark8 = Polygon(Point(222,86),Point(272,19),Point(240,77)) 74 hairdark8.setFill(color_rgb(235,161,56)) 75 hairdark9 = Polygon(Point(217,111),Point(284,65),Point(209,138)) 76 hairdark9.setFill(color_rgb(235,161,56)) 77 hairdark10 = Polygon(Point(217,192),Point(219,230),Point(230,216),Point(224,193)) 78 hairdark10.setFill(color_rgb(235,161,56)) 79 hairdark11 = Polygon(Point(216,109),Point(252,84),Point(283,66),Point(208,141)) 80 hairdark11.setFill(color_rgb(235,161,56)) 81 hairdark12 = Polygon(Point(238,161),Point(274,140),Point(228,185)) 82 hairdark12.setFill(color_rgb(235,161,56)) 83 hairdark13 = Polygon(Point(248,144),Point(298,73),Point(335,33),Point(307,77),Point(303,97)) 84 hairdark13.setFill(color_rgb(235,161,56)) 85 hairdark14 = Polygon(Point(249,205),Point(300,142),Point(331,67),Point(321,152)) 86 hairdark14.setFill(color_rgb(235,161,56)) 87 hairdark15 = Polygon(Point(321,152),Point(324,137),Point(357,65),Point(340,135)) 88 hairdark15.setFill(color_rgb(235,161,56)) 89 hairdark16 = Polygon(Point(142,138),Point(160,77),Point(180,48),Point(166,87),Point(166,114)) 90 hairdark16.setFill(color_rgb(235,161,56)) 91 hairdark17 = Polygon(Point(226,198),Point(252,183),Point(242,203),Point(246,216),Point(301,184),Point(282,219),Point(331,174),Point(349,144),Point(322,210),Point(358,174),Point(338,221),Point(308,240),Point(294,239),Point(283,256),Point(357,250),Point(276,282),Point(331,286),Point(276,296),Point(258,287),Point(273,265),Point(270,239),Point(265,224),Point(254,224),Point(240,238),Point(227,231),Point(228,220),Point(227,207)) 92 hairdark17.setFill(color_rgb(235,161,56)) 93 hairline1 = Line(Point(72,176),Point(84,206)) 94 hairline2 = Line(Point(68,215),Point(84,206)) 95 hairline3 = Line(Point(84,206),Point(109,208)) 96 hairline4 = Line(Point(70,246),Point(86,246)) 97 hairline5 = Line(Point(98,214),Point(77,276)) 98 hairline6 = Line(Point(98,214),Point(146,194)) 99 hairline7 = Line(Point(128,196),Point(133,147)) 100 hairline8 = Line(Point(133,147),Point(207,72)) 101 hairline9 = Line(Point(207,72),Point(235,53)) 102 hairline10 = Line(Point(137,230),Point(158,215)) 103 hairline11 = Line(Point(127,95),Point(141,140)) 104 hairline12 = Line(Point(180,70),Point(174,104)) 105 hairline13 = Line(Point(22,252),Point(94,225)) 106 hairline14 = Line(Point(202,160),Point(254,113)) 107 hairline15 = Line(Point(173,125),Point(210,79)) 108 hairline16 = Line(Point(175,217),Point(171,205)) 109 hairline17 = Line(Point(171,205),Point(165,208)) 110 hairline18 = Line(Point(305,96),Point(332,64)) 111 hairline19 = Line(Point(275,139),Point(315,94)) 112 hairline20 = Line(Point(98,112),Point(91,174)) 113 hairline21 = Line(Point(91,174),Point(99,208)) 114 hairline22 = Line(Point(128,214),Point(156,201)) 115 hairline23 = Line(Point(132,113),Point(163,50)) 116 hairline24 = Line(Point(185,92),Point(240,32)) 117 hairline25 = Line(Point(271,245),Point(295,233)) 118 hairline26 = Line(Point(295,233),Point(322,209)) 119 hairline27 = Line(Point(227,190),Point(286,139)) 120 hairline28 = Line(Point(302,183),Point(326,164)) 121 122 neck.draw(win) 123 head.draw(win) 124 headdark1.draw(win) 125 headdark2.draw(win) 126 headdark3.draw(win) 127 headline1.draw(win) 128 headline2.draw(win) 129 headline3.draw(win) 130 headline4.draw(win) 131 headline5.draw(win) 132 neckline1.draw(win) 133 neckline2.draw(win) 134 neckline3.draw(win) 135 neckline4.draw(win) 136 neckline5.draw(win) 137 throat.draw(win) 138 innerear.draw(win) 139 earline1.draw(win) 140 earline2.draw(win) 141 earline3.draw(win) 142 earline4.draw(win) 143 earline5.draw(win) 144 chin.draw(win) 145 mouthline1.draw(win) 146 mouthline2.draw(win) 147 mouthline3.draw(win) 148 noseline1.draw(win) 149 noseline2.draw(win) 150 noseline3.draw(win) 151 lefteye.draw(win) 152 righteye.draw(win) 153 leftiris.draw(win) 154 rightiris.draw(win) 155 lefteyebrow.draw(win) 156 righteyebrow.draw(win) 157 hairbg.draw(win) 158 hairdark1.draw(win) 159 hairdark2.draw(win) 160 hairdark3.draw(win) 161 hairdark4.draw(win) 162 hairdark5.draw(win) 163 hairdark6.draw(win) 164 hairdark7.draw(win) 165 hairdark8.draw(win) 166 hairdark9.draw(win) 167 hairdark10.draw(win) 168 hairdark11.draw(win) 169 hairdark12.draw(win) 170 hairdark13.draw(win) 171 hairdark14.draw(win) 172 hairdark15.draw(win) 173 hairdark16.draw(win) 174 hairdark17.draw(win) 175 hairline1.draw(win) 176 hairline2.draw(win) 177 hairline3.draw(win) 178 hairline4.draw(win) 179 hairline5.draw(win) 180 hairline6.draw(win) 181 hairline7.draw(win) 182 hairline8.draw(win) 183 hairline9.draw(win) 184 hairline10.draw(win) 185 hairline11.draw(win) 186 hairline12.draw(win) 187 hairline13.draw(win) 188 hairline14.draw(win) 189 hairline15.draw(win) 190 hairline16.draw(win) 191 hairline17.draw(win) 192 hairline18.draw(win) 193 hairline19.draw(win) 194 hairline20.draw(win) 195 hairline21.draw(win) 196 hairline22.draw(win) 197 hairline23.draw(win) 198 hairline24.draw(win) 199 hairline25.draw(win) 200 hairline26.draw(win) 201 hairline27.draw(win) 202 hairline28.draw(win) 203 win.getMouse() 204 205 main()
4、編寫一個用聖誕樹和雪人繪製冬季場景的程式。
解答
參考連結
1 # By: Megan Neuendorf 2 3 from graphics import * 4 5 def main(): 6 win=GraphWin("Winter Scene",500,500) 7 win.setCoords(0,0,200,200) 8 win.setBackground("blue") 9 10 # Body of the snowman 11 c1 = Circle(Point(50,40),40) 12 c1.draw(win) 13 c1.setFill("white") 14 c1.setOutline("white") 15 16 c2 = Circle(Point(50,100),30) 17 c2.draw(win) 18 c2.setFill("white") 19 c2.setOutline("white") 20 21 c3 = Circle(Point(50,145),20) 22 c3.draw(win) 23 c3.setFill("white") 24 c3.setOutline("white") 25 26 # Top Hat of Snowman 27 r1 = Rectangle(Point(30,160),Point(70,165)) 28 r1.draw(win) 29 r1.setFill("black") 30 31 r2 = Rectangle(Point(40,165),Point(60,185)) 32 r2.draw(win) 33 r2.setFill("black") 34 35 # Eyes of the Snowman 36 e1 = Circle(Point(42.5,150),2.5) 37 e1.draw(win) 38 e1.setFill("black") 39 40 e2 = Circle(Point(57.5,150),2.5) 41 e2.draw(win) 42 e2.setFill("black") 43 44 # Nose of the Snowman 45 n = Polygon(Point(50,142.5),Point(50,137.5),Point(57.5,140)) 46 n.draw(win) 47 n.setOutline("orange") 48 n.setFill("orange") 49 50 # Mouth of the Snowman 51 m1 = Circle(Point(40,135),1) 52 m1.draw(win) 53 m1.setFill("black") 54 55 m2 = Circle(Point(45,130),1) 56 m2.draw(win) 57 m2.setFill("black") 58 59 m3 = Circle(Point(50,127.5),1) 60 m3.draw(win) 61 m3.setFill("black") 62 63 m4 = Circle(Point(55,130),1) 64 m4.draw(win) 65 m4.setFill("black") 66 67 m5 = Circle(Point(60,135),1) 68 m5.draw(win) 69 m5.setFill("black") 70 71 # Buttons on the Snowman 72 b1 = Circle(Point(50,115),3) 73 b1.draw(win) 74 b1.setFill("black") 75 76 b2 = Circle(Point(50,105),3) 77 b2.draw(win) 78 b2.setFill("black") 79 80 b3 = Circle(Point(50,95),3) 81 b3.draw(win) 82 b3.setFill("black") 83 84 # Christmas Tree 85 rect1 = Rectangle(Point(140,0),Point(160,25)) 86 rect1.draw(win) 87 rect1.setOutline("brown") 88 rect1.setFill("brown") 89 90 t1 = Polygon(Point(100,25),Point(200,25),Point(150,65)) 91 t1.draw(win) 92 t1.setOutline("forest green") 93 t1.setFill("forest green") 94 95 t2 = Polygon(Point(110,60),Point(190,60),Point(150,100)) 96 t2.draw(win) 97 t2.setOutline("forest green") 98 t2.setFill("forest green") 99 100 t3 = Polygon(Point(120,90),Point(180,90),Point(150,120)) 101 t3.draw(win) 102 t3.setOutline("forest green") 103 t3.setFill("forest green") 104 105 t4 = Polygon(Point(130,115),Point(170,115),Point(150,135)) 106 t4.draw(win) 107 t4.setOutline("forest green") 108 t4.setFill("forest green") 109 110 t5 = Polygon(Point(135,132.5),Point(165,132.5),Point(150,155)) 111 t5.draw(win) 112 t5.setOutline("forest green") 113 t5.setFill("forest green") 114 115 # Star on the Christmas Tree 116 n = Polygon(Point(150,152.5),Point(147.5,160),Point(140,162.5),Point(147.5,165),Point(150,172.5),Point(152.5,165),Point(160,162.5),Point(152.5,160)) 117 n.draw(win) 118 n.setOutline("gold") 119 n.setFill("gold") 120 121 # Circular Ornaments on Christmas Tree 122 o1 = Circle(Point(150,142.5),2.5) 123 o1.draw(win) 124 o1.setOutline("red") 125 o1.setFill("gold") 126 127 o2 = Circle(Point(135,115),2.5) 128 o2.draw(win) 129 o2.setOutline("red") 130 o2.setFill("gold") 131 132 o3 = Circle(Point(165,115),2.5) 133 o3.draw(win) 134 o3.setOutline("red") 135 o3.setFill("gold") 136 137 o4 = Circle(Point(150,95),2.5) 138 o4.draw(win) 139 o4.setOutline("red") 140 o4.setFill("gold") 141 142 o5 = Circle(Point(135,75),2.5) 143 o5.draw(win) 144 o5.setOutline("red") 145 o5.setFill("gold") 146 147 o6 = Circle(Point(165,75),2.5) 148 o6.draw(win) 149 o6.setOutline("red") 150 o6.setFill("gold") 151 152 o7 = Circle(Point(115,60),2.5) 153 o7.draw(win) 154 o7.setOutline("red") 155 o7.setFill("gold") 156 157 o8 = Circle(Point(185,60),2.5) 158 o8.draw(win) 159 o8.setOutline("red") 160 o8.setFill("gold") 161 162 o9 = Circle(Point(150,30),2.5) 163 o9.draw(win) 164 o9.setOutline("red") 165 o9.setFill("gold") 166 167 # Diamond Ornaments on Christmas Tree 168 d1 = Polygon(Point(140,135),Point(142.5,132.5),Point(140,130),Point(137.5,132.5)) 169 d1.draw(win) 170 d1.setOutline("gold") 171 d1.setFill("red") 172 173 d2 = Polygon(Point(160,135),Point(162.5,132.5),Point(160,130),Point(157.5,132.5)) 174 d2.draw(win) 175 d2.setOutline("gold") 176 d2.setFill("red") 177 178 d3 = Polygon(Point(150,122.5),Point(152.5,120),Point(150,117.5),Point(147.5,120)) 179 d3.draw(win) 180 d3.setOutline("gold") 181 d3.setFill("red") 182 183 d4 = Polygon(Point(125,92.5),Point(127.5,90),Point(125,87.5),Point(122.5,90)) 184 d4.draw(win) 185 d4.setOutline("gold") 186 d4.setFill("red") 187 188 d5 = Polygon(Point(175,92.5),Point(177.5,90),Point(175,87.5),Point(172.5,90)) 189 d5.draw(win) 190 d5.setOutline("gold") 191 d5.setFill("red") 192 193 d6 = Polygon(Point(150,67.5),Point(152.5,65),Point(150,62.5),Point(147.5,65)) 194 d6.draw(win) 195 d6.setOutline("gold") 196 d6.setFill("red") 197 198 d7 = Polygon(Point(130,47.5),Point(132.5,45),Point(130,42.5),Point(127.5,45)) 199 d7.draw(win) 200 d7.setOutline("gold") 201 d7.setFill("red") 202 203 d8 = Polygon(Point(170,47.5),Point(172.5,45),Point(170,42.5),Point(167.5,45)) 204 d8.draw(win) 205 d8.setOutline("gold") 206 d8.setFill("red") 207 208 d9 = Polygon(Point(105,27.5),Point(107.5,25),Point(105,22.5),Point(102.5,25)) 209 d9.draw(win) 210 d9.setOutline("gold") 211 d9.setFill("red") 212 213 d10 = Polygon(Point(195,27.5),Point(197.5,25),Point(195,22.5),Point(192.5,25)) 214 d10.draw(win) 215 d10.setOutline("gold") 216 d10.setFill("red") 217 218 win.getMouse() 219 win.close() 220 221 main()
5、編寫一個程式,在螢幕上繪製5 個骰子,是一把順子(1,2,3,4,5 或2,3,4,5,6)。
解答
1 from graphics import * 2 3 def main(): 4 win = GraphWin("Dice", width=800, height=400) 5 win.setCoords(-10, -5, 10, 5) 6 7 d1 = Rectangle(Point(-9, -1), Point(-7, 1)) 8 d1.draw(win) 9 c = Circle(Point(-8, 0), 0.3) 10 c.setFill("red") 11 c.setOutline("white") 12 c.draw(win) 13 14 d2 = d1.clone() 15 d2.move(4, 0) 16 d2.draw(win) 17 c = Circle(Point(-4.3, 0.3), 0.25) 18 c.setFill("blue") 19 c.setOutline("white") 20 c.draw(win) 21 c = c.clone() 22 c.move(0.6, -0.6) 23 c.draw(win) 24 25 d3 = d2.clone() 26 d3.move(4, 0) 27 d3.draw(win) 28 29 c = Circle(Point(-0.5, 0.5), 0.25) 30 c.setFill("blue") 31 c.setOutline("white") 32 c.draw(win) 33 c = c.clone() 34 c.move(0.5, -0.5) 35 c.draw(win) 36 c = c.clone() 37 c.move(0.5, -0.5) 38 c.draw(win) 39 40 d4 = d3.clone() 41 d4.move(4, 0) 42 d4.draw(win) 43 c = Circle(Point(3.6, 0.4), 0.25) 44 c.setFill("red") 45 c.setOutline("white") 46 c.draw(win) 47 c = c.clone() 48 c.move(0.8, 0) 49 c.draw(win) 50 c = c.clone() 51 c.move(0, -0.8) 52 c.draw(win) 53 c = c.clone() 54 c.move(-0.8, 0) 55 c.draw(win) 56 57 d5 = d4.clone() 58 d5.move(4, 0) 59 d5.draw(win) 60 c = Circle(Point(7.5, 0.5), 0.25) 61 c.setFill("blue") 62 c.setOutline("white") 63 c.draw(win) 64 c = c.clone() 65 c.move(1, 0) 66 c.draw(win) 67 c = c.clone() 68 c.move(0, -1) 69 c.draw(win) 70 c = c.clone() 71 c.move(-1, 0) 72 c.draw(win) 73 c = c.clone() 74 c.move(0.5, 0.5) 75 c.draw(win) 76 77 win.getMouse() 78 win.close() 79 80 main()
1 from graphics import * 2 3 def main(): 4 win = GraphWin("Dice", width=800, height=400) 5 win.setCoords(-10, -5, 10, 5) 6 7 d2 = Rectangle(Point(-9, -1), Point(-7, 1)) 8 d2.draw(win) 9 c = Circle(Point(-8.3, 0.3), 0.25) 10 c.setFill("blue") 11 c.setOutline(color_rgb(240, 240, 240)) 12 c.draw(win) 13 c = c.clone() 14 c.move(0.6, -0.6) 15 c.draw(win) 16 17 d3 = d2.clone() 18 d3.move(4, 0) 19 d3.draw(win) 20 c = Circle(Point(-4.5, 0.5), 0.25) 21 c.setFill("blue") 22 c.setOutline(color_rgb(240, 240, 240)) 23 c.draw(win) 24 c = c.clone() 25 c.move(0.5, -0.5) 26 c.draw(win) 27 c = c.clone() 28 c.move(0.5, -0.5) 29 c.draw(win) 30 31 d4 = d3.clone() 32 d4.move(4, 0) 33 d4.draw(win) 34 c = Circle(Point(-0.4, 0.4), 0.25) 35 c.setFill("red") 36 c.setOutline(color_rgb(240, 240, 240)) 37 c.draw(win) 38 c = c.clone() 39 c.move(0.8, 0) 40 c.draw(win) 41 c = c.clone() 42 c.move(0, -0.8) 43 c.draw(win) 44 c = c.clone() 45 c.move(-0.8, 0) 46 c.draw(win) 47 48 d5 = d4.clone() 49 d5.move(4, 0) 50 d5.draw(win) 51 c = Circle(Point(3.5, 0.5), 0.25) 52 c.setFill("blue") 53 c.setOutline(color_rgb(240, 240, 240)) 54 c.draw(win) 55 c = c.clone() 56 c.move(1, 0) 57 c.draw(win) 58 c = c.clone() 59 c.move(0, -1) 60 c.draw(win) 61 c = c.clone() 62 c.move(-1, 0) 63 c.draw(win) 64 c = c.clone() 65 c.move(0.5, 0.5) 66 c.draw(win) 67 68 d6 = d5.clone() 69 d6.move(4, 0) 70 d6.draw(win) 71 c = Circle(Point(7.6, 0.6), 0.25) 72 c.setFill("blue") 73 c.setOutline(color_rgb(240, 240, 240)) 74 c.draw(win) 75 c = c.clone() 76 c.move(0.8, 0) 77 c.draw(win) 78 c = c.clone() 79 c.move(0, -0.6) 80 c.draw(win) 81 c = c.clone() 82 c.move(-0.8, 0) 83 c.draw(win) 84 c = c.clone() 85 c.move(0, -0.6) 86 c.draw(win) 87 c = c.clone() 88 c.move(0.8, 0) 89 c.draw(win) 90 91 win.getMouse() 92 win.close() 93 94 main()
6、修改圖形終值程式,讓輸入(本金和APR)也用Entry 物件以圖形方式完成。
解答
參考連結
1 from graphics import * 2 3 def main(): 4 win = GraphWin("Investment Growth Chart", 640, 480) 5 win.setBackground("white") 6 # Set coordinates for easy display of prompts. 7 win.setCoords(0,0,10,10) 8 9 # Display prompts 10 t1 = Text(Point(5,8), "Plotting a 10 year investment") 11 t1.setSize(14) 12 t1.draw(win) 13 14 t2 = Text(Point(5,7.5), "Enter the information below and then click anywhere") 15 t2.setSize(14) 16 t2.draw(win) 17 18 t3 = Text(Point(2,6), "Initial Principal:") 19 t3.setSize(14) 20 t3.draw(win) 21 22 prinBox = Entry(Point(4.5,6), 6) 23 prinBox.draw(win) 24 prinBox.setText("2000") 25 26 t4 = Text(Point(2,4), "Annual Interest Rate:") 27 t4.setSize(14) 28 t4.draw(win) 29 30 aprBox = Entry(Point(4.5,4), 6) 31 aprBox.setText("0.05") 32 aprBox.draw(win) 33 34 # wait for mouse click and get values 35 win.getMouse() 36 principal = float(prinBox.getText()) 37 apr = float(aprBox.getText()) 38 39 # Erase the prompts 40 t1.undraw() 41 t2.undraw() 42 t3.undraw() 43 t4.undraw() 44 prinBox.undraw() 45 aprBox.undraw() 46 47 48 # Set Window coords for drawing the graph. 49 win.setCoords(-1.75,-200, 11.5, 10400) 50 51 # Create a graphics window with labels on left edge 52 Text(Point(-1, 0), ' 0.0K').draw(win) 53 Text(Point(-1, 2500), ' 2.5K').draw(win) 54 Text(Point(-1, 5000), ' 5.0K').draw(win) 55 Text(Point(-1, 7500), ' 7.5k').draw(win) 56 Text(Point(-1, 10000), '10.0K').draw(win) 57 58 # Draw bar for initial principal 59 bar = Rectangle(Point(0, 0), Point(1, principal)) 60 bar.setFill("green") 61 bar.setWidth(2) 62 bar.draw(win) 63 64 # Draw a bar for each subsequent year 65 for year in range(1, 11): 66 principal = principal * (1 + apr) 67 bar = Rectangle(Point(year, 0), Point(year+1, principal)) 68 bar.setFill("green") 69 bar.setWidth(2) 70 bar.draw(win) 71 72 win.getMouse() 73 win.close() 74 75 main()
7、圓的交點。
編寫一個計算圓與水平線的交點的程式,並以文字和圖形方式顯示資訊。
輸入:圓的半徑和線的y 截距。
輸出:在座標為從(−10,−10)到(10,10)的視窗中,以(0, 0)為中心,以給定半徑繪製
的圓。
用給定的y 軸擷取一根水平線穿過視窗。
以紅色繪製兩個交點。
打印出交叉點的x 值。
公式:
解答
1 from graphics import * 2 import math 3 4 def main(): 5 radius = float(input("Please enter the radius of the circle: ")) 6 yinter = float(input("Please enter the y-intercept of the line: ")) 7 8 win = GraphWin("Circle Intersection") 9 win.setCoords(-10, -10, 10, 10) 10 11 Circle(Point(0, 0), radius).draw(win) 12 Line(Point(-10, yinter), Point(10, yinter)).draw(win) 13 14 x = math.sqrt(radius * radius - yinter * yinter) 15 print("X values of intersection", -x, x) 16 17 p1 = Circle(Point(x, yinter), 0.25) 18 p1.setOutline("red") 19 p1.setFill("red") 20 p1.draw(win) 21 22 p2 = p1.clone() 23 p2.move(-2 * x, 0) 24 p2.draw(win) 25 26 win.getMouse() 27 win.close() 28 29 main() 30 31 # Output: 32 # Please enter the radius of the circle: 5 33 # Please enter the y-intercept of the line: 3 34 # X values of intersection -4.0 4.0
8、線段資訊。
該程式允許使用者繪製線段,然後顯示關於線段的一些圖形和文字資訊。
輸入:兩次滑鼠點選線段的終點。
輸出:以青色繪製線段的中點。
繪製線段。
列印線的長度和斜率。
公式:
解答
1 from graphics import * 2 import math 3 4 def main(): 5 win = GraphWin("Triangle", 400, 400) 6 win.setCoords(-5, -5, 5, 5) 7 8 draw_coord(win) # 這個函式定義見文章末尾 9 10 pt1 = win.getMouse() 11 pt1.draw(win) 12 pt2 = win.getMouse() 13 pt2.draw(win) 14 line = Line(pt1, pt2) 15 line.draw(win) 16 mark = Circle(line.getCenter(),0.075) 17 mark.setFill("cyan") 18 mark.draw(win) 19 20 dx = pt2.getX() - pt1.getX() 21 dy = pt2.getY() - pt1.getY() 22 slope = dy / dx 23 length = math.sqrt(dx * dx + dy * dy) 24 25 message = Text(Point(0, -4), "Point1:({}, {})\nPoint2:({}, {})\n長度:{}\n斜率:{}".format(pt1.getX(), pt1.getY(), pt2.getX(), pt2.getY(), length, slope)) 26 message.setSize(8) 27 message.setTextColor(color_rgb(144, 144, 144)) 28 message.draw(win) 29 30 win.getMouse() 31 win.close() 32 33 main()
9、矩形資訊。
此程式顯示有關使用者繪製的矩形的資訊。
輸入:兩次滑鼠點選作為矩形的對角。
輸出:繪製矩形。
列印矩形的周長和麵積。
公式:面積=(長度)(寬度)
周長= 2(長度+寬度)
解答
1 from graphics import * 2 3 def main(): 4 win = GraphWin("Rectangle", 400, 400) 5 win.setCoords(-5, -5, 5, 5) 6 7 draw_coord(win) 8 9 pt1 = win.getMouse() 10 pt2 = win.getMouse() 11 rect = Rectangle(pt1, pt2) 12 rect.draw(win) 13 14 height = abs(pt2.getY() - pt1.getY()) 15 length = abs(pt2.getX() - pt1.getX()) 16 17 area = height * length 18 perimeter = 2 * (height + length) 19 20 message = Text(Point(0, -4), "Poin