程序设计思想与方法答案_陆朝俊
- 格式:docx
- 大小:17.56 KB
- 文档页数:8
程序设计思想与方法课后习题答案陆朝俊1、page76_Q12from math import *r = input("请输入半径长:")V = 4 / 3 * pi * r **3S = 4 * pi * r ** 2print "Volume is ",Vprint "Superficial area is ",S2、page121_Q12x=input("请输入体重/kg:")y=float(input("请输入身高/m:"))l= x / ( y * y )if l < 19:print "您的BMI指数为%.2f" %(l)+",属于"+"轻体重"elif l < 25:print "您的BMI指数为%.2f" %(l)+",属于"+"健康体重"elif l < 28:print "您的BMI指数为%.2f" %(l)+",属于"+"超重"else:print "您的BMI指数为%.2f" %(l)+",属于"+"肥胖"z=raw_input("请输入任意键结束程序")3、page163_Q15def delta(a,b):delta =float( a - b )return deltadef slope(p1, p2, n):delta_x = delta (p1[0], p2[0])delta_y = delta (p1[1], p2[1])if delta_x != 0:k = delta_y / delta_xif n:print "通过两点的直线斜率为%0.2f" %(k)else:k = float("inf")if n:print "通过两点的直线斜率不存在"return k# n用来决定是否执行print语句def intercept(p1, p2, n):delta_x = delta (p1[0], p2[0])delta_y = delta (p1[1], p2[1])k = slope(p1, p2, n)if delta_x != 0:b = p2[1] - k * p2[0]print "通过两点的直线在y轴上的截距为%0.2f" %(b) else:b = float("inf")if n:print "通过两点的直线在y轴上的截距不存在"return bdef input_coor(i):x = input("请输入第%0.1d个点的x坐标:"%(i))y = input("请输入第%0.1d个点的y坐标:"%(i))return (x, y)p1 = input_coor(1)p2 = input_coor(2)slope(p1, p2, 0)intercept(p1, p2, 1)4、page122_Q22pi = 1.0delta = 1.0i = 2x = 1.0while delta >= 0.00001:y = ( - 1.0 )**( i + 1 )/( 2 * i - 1 )i = i + 1pi = pi + ydelta = max(y - x , x - y)x = y#print i,deltaprint 4 * pix = input()5、page201_Q11# -*- coding: cp936 -*-global Cglobal skyglobal gdglobal awayfrom Tkinter import *from math import sin,cos,pi,logfrom time import sleepfrom random import randintdef main():global Cglobal skyglobal gdglobal awayroot = Tk()C = Canvas(root, height = 400, width = 600, bg = "white" )C.pack()gd = C.create_polygon((0,266), (0,400), (600,400), (600,266),fill = "grey", outline = "")sky = C.create_polygon((0,266), (0,0), (600,0), (600,266),fill = "skyblue", outline = "")road= C.create_polygon((250,270),(350,270),(500,400),(100,400),fill ="SlateGray", outline ="SlateGray")side_1= C.create_line((250,270),(100,400),fill = "Bisque",width = 10)side_2= C.create_line((350,270),(500,400),fill = "Bisque",width = 10)away = C.create_polygon((249,266),(351,266),(351,276),(249,276),fill = "skyblue",outline = "skyblue")p1 =(540, 330)# = input("tree location")#3/4处p2 =(80, 330)# = input("snowman location")#1/4处p3 = (100, 100)#太阳tree(p1)#树完成!!!snowman(p2)#少眼睛和鼻子sun(p3)x = input("关闭程序")def snow(p,x):a = p[0]b = p[1]p1 =(a + x, b)p2 =(a + x / 2, b - 1.732 / 2 * x)p3 =(a - x / 2, b - 1.732 / 2 * x)p4 =(a - x, b)p5 =(a - x / 2, b + 1.732 / 2 * x)p6 =(a + x / 2, b + 1.732 / 2 * x)line_14 = C.create_line(p1, p4, fill = "snow")line_25 = C.create_line(p2, p5, fill = "snow")line_36 = C.create_line(p3, p6, fill = "snow")list = [line_14,line_25,line_36]return listdef star(p,i):global Clist = ["red","Gold","PaleTurquoise","pink","orange","Snow"]a = p[0]b = p[1]p1 = (a, b - 11)p2 = (a - 6, b + 9)p3 = (a + 8, b - 3)p4 = (a - 8, b - 3)p5 = (a + 6, b + 9)C.create_polygon(p1,p2,p3,p4,p5,fill = list[i - 1], outline = "" )def sun(p):#太阳的曲线方程:y = 0.00125 * x ^ 2 + 162.5 - 0.75 * x,微分方程: dy/dx = 0.01 * x - 2global Cglobal skyglobal gdglobal awayu = 0#用于记录第几次天亮#v = input("请输入一个数字,可以控制程序运行的速度哦~愈大愈快,建议值为3:") while True:list_x = []for i in range(50):list_x.append(randint(0,600))#用于雪花的x坐标list_y = []for i in range(50):list_y.append(randint(0,600))#用于雪花的y坐标t = 0a = p [0]b = p [1]p1 = [a - 15, b - 15]p2 = [a + 15, b + 15]#sun = C.create_oval(p1, p2, fill = "orange", outline = "")x = aif u >= 1:a = x - 130C.itemconfig(sky,fill = "skyblue")C.itemconfig(gd,fill = "gray")C.itemconfig(away,fill = "skyblue",outline = "skyblue")C.update()sleep(0.5)while x < 650:t = t + 0.005 * pix = a + 1#dx = 1y = 0.00125 * x * x + 162.5 - 0.75 * xa = xb = y#新太阳的x,ylist = []for i in range(12):n = 2 * pi / 12 * ic = a + cos (n + t) * 20d = b + sin (n + t) * 20e = a + cos (n - 0.2 + t) * 40f = b + sin (n - 0.2 + t) * 40m = C.create_line((c, d), (e, f), fill = "red")list.append(m)C.update()sun = C.create_oval([a - 15,b - 15], [a + 15, b + 15], fill = "orange", outline = "")#print a,bC.update()for i in range(len(list)):C.delete(list[i])C.delete(sun)sleep(0.04)t = 0#起始处(-30,186.125)a = -30x = aC.itemconfig(sky,fill = "midnightblue")C.itemconfig(gd,fill = "DarkGray")C.itemconfig(away,fill = "midnightblue",outline = "midnightblue")C.update()sleep(0.5)while x < 650:t = t + 1x = a + 1#dx = 1y = 0.00125 * x * x + 162.5 - 0.75 * xa = xb = y#新月亮的x,ymoon_1 = C.create_oval([a - 17,b - 17], [a + 17, b + 17], fill = "ghostwhite", outline = "")moon_2 = C.create_oval([a - 30, b - 25], [a + 7, b + 12], fill = "midnightblue", outline = "")list = []for i in range(50):snowlo = ((list_x[i] + t)%600, (list_y[i] + 1.5 * t)%400)list.append(snow(snowlo,3))C.update()sleep(0.03)C.delete(moon_1)C.delete(moon_2)for i in range(50):for j in range(3):C.delete(list[i][j])C.update()u = u + 1def tree(p1):#树根的大小不对,再调整p2 = (p1[0] - 25, p1[1] - 25)p3 = (p1[0] - 25, p1[1] - 50)p4 = (p1[0] - 40, p1[1] - 50)p5 = (p1[0] - 40, p1[1] - 25)p6 = (p1[0] - 65, p1[1] )global Cpa = p1pb = p6i = 1while p1[1] - pb[1] <= 50 :#树根高if pa[0] - pb[0] <= 20:pa = (pa[0], pa[1]-1)pb = (pb[0], pb[1]-1)C.create_line(pa, pb, width = 1, fill = "brown")else :pa = (pa[0] - 25 * 0.5 ** i, pa[1]-1)pb = (pb[0] + 25 * 0.5 ** i, pb[1]-1)C.create_line(pa, pb, width = 1, fill = "brown")i = i + 1#root_right_bottom = C.create_line(p1, p2, p3, smooth = 1, width = 4)#root_top = C.create_line(p3, p4, width = 4)#root_left_bottom = C.create_line(p6, p5, p4, smooth = 1, width = 4)#root_right_bottom = C.create_line(p1, p2, smooth = 1, width = 4)#root_top = C.create_line(p2, p3, p4, p5, width = 4)#root_left_bottom = C.create_line(p5, p6, smooth = 1, width = 4)#树根轮廓线p = ( (p1[0] + p6[0]) / 2, (p1[1] + p6[1]) / 2 )pn = (p1[0] + 40, p1[1] - 50)#每层树叶右下角的坐标#改为40,50leaf = []i = 1while pn[0] - p[0] >= 20:#最上层树叶宽度限制dx = pn[0] - p[0]pm = (p[0] - 1 * dx, pn[1] )pl = (p[0], pn[1] - dx )leaf.append(C.create_polygon(pn, pm, pl, width = 1, fill = 'ForestGreen', outline = "YellowGreen"))pn = (pn[0] - 12, pn[1] - 24)px = (pn[0] - 12 - 1.4 ** i, pn[1] + 20)py = (pm[0] + 12 + 2 ** i, pm[1]-4)if i <= 3:star(px,i)star(py,i + 3)else:star(px,i - 3)star(py,i)i = i + 1star(pl,6)def snowman(p1):#p1,身体正中global Ca = body_x = 40#input("body_x")b = body_y = 37#input("body_y")c = head = 25#input("head")#输入雪人的身体宽和高d = theta = 25.0 * pi /180.0e = wide = 4#input("width")#围巾和帽子的宽度#l = leg = input("leg")p2 = (p1[0] + a, p1[1] + b)#身体所在框右下点p3 = (p1[0] - a, p1[1] - b)#身体所在框左上点p4 = (p1[0], p1[1] - c + e - b )#头部中间,做成圆脸p5 = (p1[0] + b * cos(d), p1[1] - b * sin(d) )#它的左手p6 = (p1[0] - b * cos(d), p1[1] - b * sin(d) )#它的右手p7 = (p5[0] + 3, p5[1] + 5)#手臂的宽度由此而来,3/5p8 = (p6[0] - 3, p6[1] + 5)p9 = (p5[0] + 20, p5[1] - 12)#p10= (p6[0] - 20, p6[1] - 12)p11= (p7[0] + 20, p7[1] - 12)#p12= (p8[0] - 20, p8[1] - 12)p13= (p9[0] - 5, p9[1] - 8 )#p14= (p10[0] + 5, p10[1] - 8 )p15= (p9[0] + 5, p9[1] - 3 )p16= (p10[0] - 5, p10[1] - 3 )p17= (p11[0] + 5, p11[1] + 8)# #3,5p18= (p12[0] - 5, p12[1] + 8)p19= (p9[0] + 5 * 1.5, p9[1] - 3 * 0.5)#p20= (p10[0] - 5 * 1.5, p10[1] - 3 * 0.5)p21= (p11[0]+ 5 * 2.5, p11[1]- 3 * 2.5)#p22= (p12[0]- 5 * 2.5, p12[1]- 3 * 2.5)p23= (p4[0] - c, p4[1] - c )p24= (p4[0] + c, p4[1] + c )p25= (p4[0] - 0.167 * c, p4[1] + 0.33 * c )p26= (p4[0] + 0.667 * c, p4[1] + 0.33 * c )p28= (p4[0] + 0.6 * c, p4[1] - 0.5 * c)p27= (p28[0]- c, p28[1])arm1 = C.create_polygon(p5, p7, p11, p9,fill = "brown", smooth = 1)hand1_1= C.create_polygon(p13, p19, p15, p9, fill = "snow", outline = "grey", smooth = 1) hand1_2= C.create_polygon(p15, p21, p17, p11, p9, fill = "snow",outline = "grey", smooth = 1)#arm2 = C.create_polygon(p6, p8, p12, p10,fill = "brown", smooth = 1)hand2_1= C.create_polygon(p14, p20, p16, p10, fill = "snow", outline = "grey", smooth = 1) hand2_2= C.create_polygon(p16, p22, p18, p12, p10, fill = "snow",outline = "grey", smooth = 1)body = C.create_oval(p3, p2, fill = "snow", outline = "" ,width = 10)arm2 = C.create_polygon(p6, p8, p12, p10,fill = "brown", smooth = 1) #让左手臂在身体图层的上面,展现一种立体感head = C.create_oval(p23, p24,fill = "snow", outline = "grey")eyes_1 = C.create_oval((p27[0] - 5, p27[1] - 4), (p27[0] + 5, p27[1] + 4), fill = "Maroon")eyes_2 = C.create_oval((p28[0] - 5, p28[1] - 4), (p28[0] + 5, p28[1] + 4), fill = "Maroon")nose = C.create_polygon(p4, p25, p26, fill = "orange", outline = "", )C.move(nose, 0, -5)main()。