# ============================================================================== # 通过 D:\文档\电子文档\个人\脚本库\PythonScript\第4章.py + 题号 运行 # 程序名: # 第4章习题 # 目的: # # 修订记录: # 日期 编程者 改动描述 # =================== ============= ===================================== # 2021-07-21 17:28:01 Sola 4-a 计算终值的例题 # 2021-07-21 17:28:24 Sola 4-b 通过获取三个点绘制三角形的例题 # 2021-07-21 21:53:31 Sola 4-c 击键输入 # 2021-07-21 21:53:54 Sola 4-d 点击移动圆形 # 2021-07-21 21:54:11 Sola 4-1 点击生成正方形 # 2021-07-21 21:54:27 Sola 4-2 生成靶标 # 2021-07-21 22:05:13 Sola 4-3 绘制某种面孔。。。 # 2021-07-21 22:08:23 Sola 4-4 ~ 4-5 略 # 2021-07-21 22:08:35 Sola 4-6 通过Entry输入求终值 # 2021-07-22 00:46:54 Sola 4-7 圆的交点 # 2021-07-22 01:16:26 Sola 4-8 绘制线段并显示相关信息 # 2021-07-22 01:29:07 Sola 4-9 绘制矩形并显示相关信息 # 2021-07-22 01:33:57 Sola 4-10 绘制三角形并显示相关信息 # 2021-07-22 01:59:03 Sola 4-11 绘制小房子 # # module start from typing import Sequence from graphics import * def test4_a(): # Introduction print("This program plots the growth of a 10-year investment.") # Get principal and interest rate principal = float(input("Enter the initial principal: ")) apr = float(input("Enter the annualized interest rate: ")) # Create a graphics window with labels on left edge win = GraphWin("Investment Growth Chart", 320, 240) win.setBackground("white") Text(Point(20, 230), ' 0.0K').draw(win) Text(Point(20, 180), ' 2.5K').draw(win) Text(Point(20, 130), ' 5.0K').draw(win) Text(Point(20, 80), ' 7.5K').draw(win) Text(Point(20, 30), '10.0K').draw(win) # Draw bar for initial principal height = principal * 0.02 bar = Rectangle(Point(40, 230), Point(65, 230-height)) bar.setFill("green") bar.setWidth(2) bar.draw(win) # Draw bars for successive years for year in range(1,11): # calculate value for the next year principal = principal * (1 + apr) # draw bar for this value xll = year * 25 + 40 height = principal * 0.02 bar = Rectangle(Point(xll, 230), Point(xll+25, 230-height)) # 创建柱体 bar.setFill("green") # 设置填充色 bar.setWidth(2) # 设置轮廓宽度 bar.draw(win) # 绘制 input("Press to quit") win.close() def test4_b(): win = GraphWin("Draw a Triangle") win.setCoords(0.0, 0.0, 10.0, 10.0) message = Text(Point(5, 0.5), "Click on three points") message.draw(win) # Get and draw three vertices of triangle p1 = win.getMouse() p1.draw(win) p2 = win.getMouse() p2.draw(win) p3 = win.getMouse() p3.draw(win) # Use Polygon object to draw the triangle triangle = Polygon(p1,p2,p3) triangle.setFill("peachpuff") triangle.setOutline("cyan") triangle.draw(win) # Wait for another click to exit message.setText("Click anywhere to quit.") win.getMouse() def test4_c(): win = GraphWin("Click and Type", 400, 400) for i in range(10): pt = win.getMouse() key = win.getKey() label = Text(pt, key) label.draw(win) def test4_d(): win = GraphWin() shape = Circle(Point(50, 50), 20) shape.setOutline("red") shape.setFill("red") shape.draw(win) for i in range(10): p = win.getMouse() c = shape.getCenter() dx = p.getX() - c.getX() dy = p.getY() - c.getY() shape.move(dx,dy) win.close() def test4_1(): win = GraphWin() shape = Rectangle(Point(50, 50), Point(70, 70)) shape.setOutline("red") shape.setFill("red") shape.draw(win) for i in range(10): p = win.getMouse() c = shape.getCenter() dx = p.getX() - c.getX() dy = p.getY() - c.getY() shape.clone().draw(win) shape.move(dx,dy) Text(Point(100, 180), "Click again to quit").draw(win) win.getMouse() win.close() def test4_2(): win = GraphWin() def draw_circle(r, s_fill): shape = Circle(Point(100, 90), r) shape.setFill(s_fill) shape.setOutline("black") shape.clone().draw(win) draw_circle(75, "white") draw_circle(60, "black") draw_circle(45, "blue") draw_circle(30, "red") draw_circle(15, "yellow") Text(Point(100, 180), "Click again to quit").draw(win) win.getMouse() win.close() def test4_3(): win = GraphWin() Text(Point(100, 90), "某种面孔").draw(win) Text(Point(100, 180), "Click again to quit").draw(win) win.getMouse() win.close() def test4_6(): win = GraphWin("Input menu", 400, 130) Text(Point(200, 10), "This program plots the growth of a 10-year investment.").draw(win) Text(Point(200, 30), "Enter the initial principal:").draw(win) Text(Point(200, 70), "Enter the annualized interest rate:").draw(win) apr_entry = Entry(Point(200, 90), 10) apr_entry.draw(win) principal_entry = Entry(Point(200, 50), 10) principal_entry.draw(win) Text(Point(200, 115), "Click again to continue").draw(win) win.getMouse() principal = float(principal_entry.getText()) apr = float(apr_entry.getText()) win = GraphWin("Investment Growth Chart", 320, 240) win.setBackground("white") Text(Point(20, 230), ' 0.0K').draw(win) Text(Point(20, 180), ' 2.5K').draw(win) Text(Point(20, 130), ' 5.0K').draw(win) Text(Point(20, 80), ' 7.5K').draw(win) Text(Point(20, 30), '10.0K').draw(win) # Draw bar for initial principal height = principal * 0.02 bar = Rectangle(Point(40, 230), Point(65, 230-height)) bar.setFill("green") bar.setWidth(2) bar.draw(win) # Draw bars for successive years for year in range(1,11): # calculate value for the next year principal = principal * (1 + apr) # draw bar for this value xll = year * 25 + 40 height = principal * 0.02 bar = Rectangle(Point(xll, 230), Point(xll+25, 230-height)) # 创建柱体 bar.setFill("green") # 设置填充色 bar.setWidth(2) # 设置轮廓宽度 bar.draw(win) # 绘制 win.getMouse() def test4_7(): r = float(input("请输入圆的半径:")) b = float(input("请属于水平线在y轴方向截距:")) win = GraphWin() win.setCoords(-10, -10, 10, 10) Circle(Point(0, 0), r).draw(win) Line(Point(-10, b), Point(10, b)).draw(win) if abs(b) > r: print("没有交点!") else: x = round((r ** 2 - b ** 2) ** 0.5, 1) b = round(b, 1) def printPoint(x, b): p = Point(x, b) p.setFill("red") p.clone().draw(win) Text(Point(x, b + 1), "(" + str(x) + ", " + str(b) + ")").draw(win) printPoint(x, b) printPoint(-x, b) Text(Point(0, -9), "Click again to quit").draw(win) win.getMouse() def test4_8(): win = GraphWin() text = Text(Point(100, 190), "请点击两个位置!") text.draw(win) p1 = win.getMouse() p2 = win.getMouse() l1 = Line(p1, p2) l1.draw(win) p3 = l1.getCenter() p3.setFill("blue") p3.draw if (p2.getX() - p1.getX()) == 0: slope = "inf" else: slope = round((p2.getY() - p1.getY()) / (p2.getX() - p1.getX()), 4) length = round(((p2.getY() - p1.getY()) ** 2 + (p2.getX() - p1.getX()) ** 2) ** 0.5, 4) print("线段的斜率为:", slope) print("线段的长度为:", length) text.setText("Click again to quit") win.getMouse() def test4_9(): win = GraphWin() text = Text(Point(100, 190), "请点击两个位置!") text.draw(win) p1 = win.getMouse() p2 = win.getMouse() l1 = Rectangle(p1, p2) l1.draw(win) cRectangle = round((abs(p2.getY() - p1.getY()) + abs(p2.getX() - p1.getX())) * 2, 4) sRectangle = round(abs(p2.getY() - p1.getY()) * abs(p2.getX() - p1.getX()), 4) print("矩形的周长为:", cRectangle) print("矩形的面积为:", sRectangle) text.setText("Click again to quit") win.getMouse() def test4_10(): win = GraphWin() text = Text(Point(100, 190), "请点击三个位置!") text.draw(win) p1 = win.getMouse() p2 = win.getMouse() p3 = win.getMouse() Polygon(p1, p2, p3).draw(win) a = ((p2.getY() - p1.getY()) ** 2 + (p2.getX() - p1.getX()) ** 2) ** 0.5 b = ((p3.getY() - p2.getY()) ** 2 + (p3.getX() - p2.getX()) ** 2) ** 0.5 c = ((p3.getY() - p1.getY()) ** 2 + (p3.getX() - p1.getX()) ** 2) ** 0.5 cPolygon = round(a + b + c, 4) sPolygon = round((cPolygon / 2 * (cPolygon / 2 - a) * (cPolygon / 2 - b) * (cPolygon / 2 - c)) ** 0.5, 4) print("三角形的周长为:", cPolygon) print("三角形的面积为:", sPolygon) text.setText("Click again to quit") win.getMouse() def test4_11(): win = GraphWin() text = Text(Point(100, 190), "请点击五个位置!") text.draw(win) p1 = win.getMouse() p2 = win.getMouse() p3 = win.getMouse() p4 = win.getMouse() p5 = win.getMouse() d = p2.getX() - p1.getX() Rectangle(p1, p2).draw(win) Polygon(p2, Point(p1.getX(), p2.getY()), p5).draw(win) Rectangle(Point(p3.getX() + d * 0.1, p3.getY()), Point(p3.getX() - d * 0.1, p1.getY())).draw(win) Rectangle(Point(p4.getX() + d * 0.05, p4.getY() + d * 0.05), Point(p4.getX() - d * 0.05, p4.getY() - d * 0.05)).draw(win) text.setText("Click again to quit") win.getMouse() import sys def run(num): eval("test4_" + num + "()") run(sys.argv[1])