程序设计思想与方法答案_陆朝俊
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计思想与方法课后习题答案
陆朝俊
1、page76_Q12
from math import *
r = input("请输入半径长:")
V = 4 / 3 * pi * r **3
S = 4 * pi * r ** 2
print "Volume is ",V
print "Superficial area is ",S
2、page121_Q12
x=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_Q15
def delta(a,b):
delta =float( a - b )
return delta
def 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_x
if 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 b
def 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_Q22
pi = 1.0
delta = 1.0
i = 2
x = 1.0
while delta >= 0.00001:
y = ( - 1.0 )**( i + 1 )/( 2 * i - 1 )
i = i + 1
pi = pi + y
delta = max(y - x , x - y)
x = y
#print i,delta
print 4 * pi
x = input()
5、page201_Q11
# -*- coding: cp936 -*-
global C
global sky
global gd
global away
from Tkinter import *
from math import sin,cos,pi,log
from time import sleep
from random import randint
def main():
global C
global sky
global gd
global away
root = 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 list
def star(p,i):
global C
list = ["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 - 2
global C
global sky
global gd
global away
u = 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 = 0
a = 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 = a
if u >= 1:
a = x - 130
C.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 * pi
x = a + 1#dx = 1
y = 0.00125 * x * x + 162.5 - 0.75 * x
a = x
b = y#新太阳的x,y
list = []
for i in range(12):
n = 2 * pi / 12 * i
c = a + cos (n + t) * 20
d = b + sin (n + t) * 20
e = a + cos (n - 0.2 + t) * 40
f = b + sin (n - 0.2 + t) * 40
m = 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,b
C.update()
for i in range(len(list)):
C.delete(list[i])
C.delete(sun)
sleep(0.04)
t = 0#起始处(-30,186.125)
a = -30
x = a
C.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 + 1
x = a + 1#dx = 1
y = 0.00125 * x * x + 162.5 - 0.75 * x
a = x
b = y#新月亮的x,y
moon_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 + 1
def 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 C
pa = p1
pb = p6
i = 1
while 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,50
leaf = []
i = 1
while 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 + 1
star(pl,6)
def snowman(p1):#p1,身体正中
global C
a = body_x = 40#input("body_x")
b = body_y = 37#input("body_y")
c = hea
d = 25#input("head")#输入雪人的身体宽和高
d = theta = 25.0 * pi /180.0
e = 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/5
p8 = (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,5
p18= (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()。