>>>>>>>>&g_3*x**2-math.exp(x)=0的解">
当前位置:   article > 正文

Python程序设计与算法基础-----书本上机实践题目及答案_3*x**2-math.exp(x)=0的解

3*x**2-math.exp(x)=0的解

@书本为Python程序设计与算法基础教程(第二版)-----江红、余青松   编著

 

第二章、python语言基础

1.编写程序,输入球的半径,计算球的表面积和体积(结果保留两位小数)

  1. #计算圆的表面积和体积:
  2. import math
  3. r = float(input("请输入球的半径:"))
  4. area = 4 * math.pi * r**2
  5. volume = 4/3*math.pi*r**3
  6. print(str.format("球的表面积为:{0:2.2f},体积为:{1:2.2f}",area,volume))
  7. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  8. 请输入球的半径:666
  9. 球的表面积为:5573889.08,体积为:1237403376.70

2.编写程序,声明函数getValue(b,r,n),根据本金b,年利率r和年数n计算最终收益v

  1. money = int(input("请输入本金:"))
  2. rate = float(input("请输入年利率(<1):"))
  3. years = int(input("请输入年数:"))
  4. def getValue(b,r,n):
  5. return b*(1+r)**n
  6. print(str.format("本金利率和为:{0:2.2f}",getValue(money,rate,years)))
  7. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  8. 请输入本金:10000
  9. 请输入年利率(<1):0.6
  10. 请输入年数:6
  11. 本金利率和为:167772.16

3. 编写程序,求解一元二次方程x2-10x+16=0

  1. from math import sqrt
  2. x = (10+sqrt(10*10-4*16))/2
  3. y = (10-sqrt(10*10-4*16))/2
  4. print(str.format("x*x-10*x+16=0的解为:{0:2.2f},{1:2.2f}",x,y))
  5. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  6. x*x-10*x+16=0的解为:8.002.00

4.编写程序,提示输入姓名和出生年份,输出姓名和年龄

  1. import datetime
  2. sName = str(input("请输入您的姓名:"))
  3. birthday = int(input("请输入您的出生年份:"))
  4. age = datetime.date.today().year - birthday
  5. print("您好!{0}。您{1}岁。".format(sName,age))
  6. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  7. 请输入您的姓名:zgh
  8. 请输入您的出生年份:1999
  9. 您好!zgh。您20岁。

第三章、程序流控制

1.编写程序,计算1=2+3+…+100之和

  1. #1.使用for循环(递增):
  2. total = 0
  3. for i in range(101):
  4. total += i
  5. print(total)
  6. #2.使用求和公式:
  7. >>> (1 + 100) * 100 /2
  8. 5050.0
  9. #3.使用累计迭代器itertools.accumulate:
  10. >>> import itertools
  11. >>> list(itertools.accumulate(range(1, 101)))[99]
  12. 5050

2.编写程序,计算10+9+8+…+1之和

  1. #使用累计迭代器itertools.accumulate:
  2. >>> import itertools
  3. >>> list(itertools.accumulate(range(1,11)))[9]
  4. 55

3.编写程序,计算1+3+5+7+…+99之和

  1. #1.使用for循环(递增):
  2. total = 0
  3. for i in range(1,100,2):
  4. total += i
  5. print(total)
  6. #2.使用累计迭代器itertools.accumulate:
  7. >>> import itertools
  8. >>> list(itertools.accumulate(range(1,100,2)))[49]
  9. 2500

4.编写程序,计算2+4+6+8+…+100之和

  1. #使用累计迭代器itertools.accumulate:
  2. >>> import itertools
  3. >>> x = list(itertools.accumulate(range(2,101,2)))
  4. >>> x[len(x)-1]
  5. 2550

5.编写程序,使用不同的实现方法输出2000~3000的所有闰年

  1. #1.
  2. for y in range(2000,3001):
  3. if((y % 4 == 0 and y % 100 != 0) or y % 400 == 0):
  4. print(y,end = ' ')
  5. #2.使用calendar模块的isleap()函数来判断:
  6. from calendar import isleap
  7. for y in range(2000,3001):
  8. if(isleap(y)):print(y,end = " ")
'
运行

6.编写程序,计算Sn=1-3+5-7+9-11…

  1. #1.
  2. n = int(input("项数:"))
  3. total = 0
  4. flag = True
  5. for i in range(1,2*n,2):
  6. if(flag):
  7. total += i
  8. flag = False
  9. else:
  10. total -= i
  11. flag = True
  12. print(total)
  13. #2.
  14. n = int(input("项数:"))
  15. total = 0
  16. x = 2
  17. for i in range(1,2*n,2):
  18. total += pow(-1,x)*i
  19. x += 1
  20. print(total)
  21. #>>>>>>>>>>>>>>>>>>>>>>>>>>
  22. 项数:10
  23. -10

7.编写程序,计算Sn=1+1/2+1/3+…

  1. n = int(input("项数:"))
  2. total = 0.0
  3. for i in range(1,n+1):
  4. total += 1/i
  5. print(total)
  6. #>>>>>>>>>>>>>>>>>>>>>>>>>
  7. 项数:10
  8. 2.9289682539682538

8.编写程序,打印九九乘法表。要求输入九九乘法表的各种显示效果(上三角,下三角,矩形块等方式)

  1. #矩形块:
  2. for i in range(1,10):
  3. s = ""
  4. for j in range(1,10):
  5. s += str.format("%d * %d = %02d " %(i, j, i*j))
  6. print(s)
  7. #下三角:
  8. for i in range(1,10):
  9. s = ""
  10. for j in range(1,i+1):
  11. s += str.format("%d * %d = %02d " %(i, j, i*j))
  12. print(s)
  13. #上三角:
  14. for i in range(1,10):
  15. s = ""
  16. for k in range(1,i):
  17. s += " "
  18. for j in range(i,10):
  19. s += str.format("%d * %d = %02d " %(i, j, i*j))
  20. print(s)
'
运行

9.编写程序,输入三角形的三条边,先判断是否可以构成三角形,如果可以,则进一步求三角形的周长和面积,否则报错“无法构成三角形!”

  1. from math import sqrt
  2. a = float(input("请输入三角形的边长a:"))
  3. b = float(input("请输入三角形的边长b:"))
  4. c = float(input("请输入三角形的边长c:"))
  5. if(a < b): a,b = b,a
  6. if(a < c): a,c = c,a
  7. if(b < c): b,c = c,b
  8. if(a < 0 or b < 0 or c < 0 or b+c <= a): print("无法构成三角形!")
  9. else:
  10. h = (a+b+c)/2
  11. area = sqrt(h*(h-a)*(h-b)*(h-c))
  12. print("周长:{0},面积:{1}".format(a+b+c,area))
  13. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  14. 请输入三角形的边长a:4
  15. 请输入三角形的边长b:3
  16. 请输入三角形的边长c:5
  17. 周长:12.0,面积:6.0

10.编写程序,输入x,根据如下公式计算分段函数y的值。请分别用单分支语句,双分支语句结构以及条件运算语句等方法实现

y = (x2-3x)/(x+1) + 2π + sinx (x≥0 )
y = ln(-5x) + 6√(|x|+e4) - (x+1)3 (x<0)

  1. #单分支语句:
  2. import math
  3. x = float(input("请输入x:"))
  4. if(x >= 0):
  5. y = (x*x - 3*x)/(x+1) + 2*math.pi + math.sin(x)
  6. if(x < 0):
  7. y = math.log(-5*x) + 6 * math.sqrt(abs(x) + math.exp(4)) - pow(x+1,3)
  8. print(y)
  9. #双分支语句:
  10. import math
  11. x = float(input("请输入x:"))
  12. if(x >= 0):
  13. y = (x*x - 3*x)/(x+1) + 2*math.pi + math.sin(x)
  14. else:
  15. y = math.log(-5*x) + 6 * math.sqrt(abs(x) + math.exp(4)) - pow(x+1,3)
  16. print(y)
  17. #条件运算语句:
  18. import math
  19. x = float(input("请输入x:"))
  20. y = ((x*x - 3*x)/(x+1) + 2*math.pi + math.sin(x)) if(x >= 0) \
  21. else (math.log(-5*x) + 6 * math.sqrt(abs(x) + math.exp(4)) - pow(x+1,3))
  22. print(y)
  23. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  24. #运行1:
  25. 请输入x:666
  26. 668.2715406628656
  27. #运行2:
  28. 请输入x:-666
  29. 294079794.1744833

11. 编写程序,输入一元二次方程的3个系数a、b、c,求ax2+bx+c=0方程的解

  1. import math
  2. a = float(input("请输入系数a:"))
  3. b = float(input("请输入系数b:"))
  4. c = float(input("请输入系数c:"))
  5. delta = b*b -4*a*c
  6. if(a == 0):
  7. if(b == 0): print("无解")
  8. else: print("有一个实根:",-1*c/b)
  9. elif(delta == 0): print("有两个相等实根:x1 = x2 = ", (-1*b)/(2*a))
  10. elif(delta > 0): print("有两个不等实根:x1 = {0},x2 = {1}".format\
  11. ((-1*b +math.sqrt(delta))/2*a,(-1*b -math.sqrt(delta))/2*a))
  12. elif(delta < 0): print("有两个共轭复根:x1 = {0},x2 = {1}".format\
  13. (complex( (-1*b)/(2*a),math.sqrt(delta*-1)/(2*a)),complex( (-1*b)/(2*a),-1*math.sqrt(delta*-1)/(2*a))))
  14. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  15. #运行一:
  16. 请输入系数a:0
  17. 请输入系数b:0
  18. 请输入系数c:10
  19. 无解
  20. #运行二:
  21. 请输入系数a:0
  22. 请输入系数b:10
  23. 请输入系数c:5
  24. 有一个实根: -0.5
  25. #运行三:
  26. 请输入系数a:1
  27. 请输入系数b:8
  28. 请输入系数c:16
  29. 有两个相等实根:x1 = x2 = -4.0
  30. #运行四:
  31. 请输入系数a:1
  32. 请输入系数b:-5
  33. 请输入系数c:6
  34. 有两个不等实根:x1 = 3.0,x2 = 2.0
  35. #运行五:
  36. 请输入系数a:5
  37. 请输入系数b:2
  38. 请输入系数c:1
  39. 有两个共轭复根:x1 = (-0.2+0.4j),x2 = (-0.2-0.4j)

12.编写程序,输入整数n(n≥0),分别利用for循环和while循环求n!

  1. #1.for循环:
  2. n = int(input("请输入n:"))
  3. if(n == 0): total = 1
  4. if(n > 0):
  5. total = 1
  6. for i in range(n,0,-1):
  7. total *= i
  8. print(total)
  9. #2.while循环:
  10. n = int(input("请输入n:"))
  11. if(n == 0): total = 1
  12. if(n > 0):
  13. total = 1
  14. while(n >= 1):
  15. total *= n
  16. n -= 1
  17. print(total)
  18. #3.使用累计迭代器itertools.accumulate;
  19. >>> import itertools, operator
  20. >>> n = int(input('请输入n:'))
  21. 请输入n:7
  22. >>> x = list(accumulate(range(1, n+1), operator.mul))
  23. >>> x[len(x)-1]
  24. 5040

13.编写程序,产生两个0~100(包含0和100)的随机整数a和b,求这两个整数的最大公约数和最小公倍数

  1. import random
  2. a = random.randint(0,100)
  3. b = random.randint(0,100)
  4. sum = a*b
  5. print(a) #输出原来的a,b
  6. print(b)
  7. if(a < b): a,b = b,a
  8. while(a%b != 0):
  9. a,b = b,a%b
  10. print("最大公约数:{0},最小公倍数:{1}".format(b,sum/b))
'
运行

第四章、常用内置数据类型

1.编写程序,格式化输出杨辉三角

  1. def generate(numRows):
  2. l1 = [1]
  3. n = 0
  4. while n < numRows:
  5. print(str(l1).center(66))
  6. l1 = [sum(t) for t in zip([0] + l1, l1 + [0])] #利用zip函数算出每一行
  7. n += 1 #如第二行 zip([0,1],[1,0])=[1,1],以此类推
  8. a=int(input("请输入行数"))
  9. generate(a)
'
运行

2.输入直角三角形的两个直角边,求三角形的周长和面积,以及两个锐角的度数。结果保留一位小数

  1. import math
  2. a = float(input("请输入直角三角形的直角边a:"))
  3. b = float(input("请输入直角三角形的直角边b:"))
  4. c = math.sqrt(a*a+b*b)
  5. p = a + b + c
  6. area = 0.5*a*b
  7. print("三角形的周长:{0:1.1f},面积:{1:1.1f}".format(p,area))
  8. sina = a/c
  9. sinb = b/c
  10. a_degree = round(math.asin(sina) * 180 / math.pi,0)
  11. b_degree = round(math.asin(sinb) * 180 / math.pi,0)
  12. print("三角形直角边a的度数:{0},b的度数:{1}".format(a_degree,b_degree))
  13. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  14. 请输入直角三角形的直角边a:3
  15. 请输入直角三角形的直角边b:4
  16. 三角形的周长:12.0,面积:6.0
  17. 三角形直角边a的度数:37.0,b的度数:53.0

3.编程产生0~100(包含0和100)的三个随机数a、b、c,要求至少使用两种不同的方法,将三个数按从小到大的顺序排序

  1. #1.
  2. import random
  3. a = random.randint(0, 100)
  4. b = random.randint(0, 100)
  5. c = random.randint(0, 100)
  6. print(str.format("原始值:{0},{1},{2}", a, b, c))
  7. if(a > b): a,b = b,a
  8. if(a > c): a,c = c,a
  9. if(b > c): b,c = c,b
  10. print(str.format("增序:{0},{1},{2}", a, b, c))
  11. #2.使用内置函数max、min、sum:
  12. import random
  13. a = random.randint(0, 100)
  14. b = random.randint(0, 100)
  15. c = random.randint(0, 100)
  16. print(str.format("原始值:{0},{1},{2}", a, b, c))
  17. maxx = max(a, b, c)
  18. minx = min(a, b, c)
  19. median = sum([a, b, c]) - minx - maxx
  20. print(str.format("增序:{0},{1},{2}", minx, median, maxx))
  21. #3.使用内置函数sorted:
  22. >>> import random
  23. >>> a = random.randint(0,100)
  24. >>> b = random.randint(0,100)
  25. >>> c = random.randint(0,100)
  26. >>> print("init value: {0} , {1} , {2}".format(a,b,c))
  27. init value: 17 , 6 , 59
  28. >>> sorted([a,b,c])
  29. [6, 17, 59]

4.编程计算有固定工资收入的党员每月所缴纳的党费。

工资基数3000元及以下者,交纳工资基数的0.5%
工资基数3000~5000元者,交纳工资基数的1%
工资基数在5000~10000元者,交纳工资基数的1.5%
工资基数超过10000元者,交纳工资基数的2%

  1. salary = float(input("请输入有固定工资收入的党员的月工资:"))
  2. if salary <= 3000: dues = salary*0.005
  3. elif salary <= 5000: dues = salary*0.01
  4. elif salary <= 10000: dues = salary*0.15
  5. else: dues = salary*0.02
  6. print("交纳党费:",dues)
'
运行

5.编程实现袖珍计算器,要求输入两个操作数和一个操作符(+、-、*、/、%),根据操作符输出运算结果。注意/和%运算符的零异常问题

  1. a = float(input("请输入操作数(左):"))
  2. b = float(input("请输入操作数(右):"))
  3. operator = input("请输入操作符(+、-、*、/、%):")
  4. if(b == 0 and (operator == '/' or operator == '%')):
  5. print("分母为零,异常!")
  6. else:
  7. if operator == '+': result = a+b
  8. elif operator == '-': result = a-b
  9. elif operator == '*': result = a*b
  10. elif operator == '/': result = a/b
  11. elif operator == '%': result = a%b
  12. print("{0} {1} {2}= {3}:".format(a,operator,b,result))

6.输入三角形的3条边a、b、c,判断此3边是否可以构成三角形。若能,进一步判断三角形的性质,即为等边、等腰、直角或其他三角形

  1. a = float(input("请输入三角形的边a:"))
  2. b = float(input("请输入三角形的边b:"))
  3. c = float(input("请输入三角形的边c:"))
  4. if(a > b): a,b = b,a
  5. if(a > c): a,c = c,a
  6. if(b > c): b,c = c,b
  7. result = "三角形"
  8. if(not(a>0 and b>0 and c>0 and a+b>c)):
  9. result = '此三边无法构成三角形'
  10. else:
  11. if a == b == c: result = '等边三角形'
  12. elif(a==b or a==c or b==c): result = '等腰三角形'
  13. elif(a*a+b*b == c*c): result = '直角三角形'
  14. print(result)

7.编程实现鸡兔同笼问题

已知在同一个笼子里共有h只鸡和兔,鸡和兔的总脚数为f,其中h和f由用户输入,求鸡和兔各有多少只?要求使用两种方法:一是求解方程;二是利用循环进行枚举测试

  1. h = int(input("请输入总头数:"))
  2. f = int(input("请输入总脚数:"))
  3. def fun1(h,f):
  4. rabbits = f/2-h
  5. chicken = h-rabbits
  6. if(chicken < 0 or rabbits < 0): return '无解'
  7. return chicken,rabbits
  8. def fun2(h,f):
  9. for i in range(0,h+1):
  10. if(2*i + 4*(h-i) == f):return i,h-i
  11. return '无解'
  12. if(h>0 and f>0 and f % 2 == 0):
  13. if fun1(h,f)=='无解':
  14. print("无解")
  15. else:
  16. print("方法一:鸡:{0},兔:{1}".format(fun1(h,f)[0],fun1(h,f)[1]))
  17. print("方法二:鸡:{0},兔:{1}".format(fun2(h,f)[0],fun2(h,f)[1]))
  18. else:
  19. print('输入的数据无意义')

8.输入任意实数x,计算ex的近似值,直到最后一项的绝对值小于10-6为止

ex = 1 + x + x2/2 + x3/3! + x4/4! + … + xn/n!

  1. x = int(input("请输入任意实数:"))
  2. e = 1
  3. i = 1
  4. t = 1
  5. a = 1
  6. while(a >= 10e-6):
  7. t *= i
  8. a = pow(x,i)/t
  9. e += a
  10. i += 1
  11. print(e)
  12. #>>>>>>>>>>>>>>>>>>>>>>>>
  13. 请输入任意实数:1
  14. 2.7182815255731922

9.输入任意实数a(a>=0),用迭代法求x=√a,要求计算的相对偏差小于10-6

求平方根的公式:Xn+1 = 0.5(Xn + a/Xn)

  1. import math
  2. a = int(input("请输入任意实数a(>=0):"))
  3. x = a / 2
  4. y = (x + a/x) / 2
  5. while(abs(y-x) >= pow(10,-6)):
  6. x = y
  7. y = (x + a/x) / 2
  8. print(y)
  9. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  10. 请输入任意实数a(>=0):2
  11. 1.414213562373095

10.即有一个数,用3除余2,用5除余3,用7除余2,请问0~1000中这样的数有哪些?

我国古代有位大将,名叫韩信。他每次集合部队,只要求部下先后按1-3,1-5,1-7报数,然后再报告一下各队每次报数的余数,他就知道到了多少人。他的这种巧妙算法被人们称作“鬼谷算”,也叫“隔墙算”,或称为“韩信点兵”,外国人还称它为“中国余数定理”。

  1. for i in range(0,1001):
  2. if((i % 3 == 2 )and (i % 5 == 3) and (i % 7 == 2)): print(i, end=" ")
  3. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  4. 23 128 233 338 443 548 653 758 863 968

11.一球从100米的高度自由下落,每次落地后反弹回原高度的一半,再落下。求小球在第10次落地时共经过多少米?第10次反弹多高

规律:
第一次下落时的高度:100
第二次下落时的高度(第一次反弹的高度):50
第三次下落时的高度(第二次反弹的高度):25

  1. n = 10
  2. h_down = 100
  3. h_up = 0
  4. sum = 0
  5. for i in range(1,n+1):
  6. sum += h_down+h_up
  7. h_down = h_up = h_down/2
  8. print("小球在第十次落地时共经过:{0}米,第十次反弹高度:{1}米".format(sum,h_up))
  9. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  10. 小球在第十次落地时共经过:299.609375米,第十次反弹高度:0.09765625

12.猴子第一天摘下若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃了前一天剩下的桃子的一半多一个。到第八天发现只剩一个桃子了。请问猴子第一天共摘了多少个桃子?

这是一个递推问题。某天所剩桃子数x。后一天所剩桃子数y = x - (x/2+1) = x/2-1。则x = 2(y+1)

  1. result = 1
  2. for i in range(8,0,-1):
  3. print("第{0}天桃子数:{1}".format(i,result))
  4. result = 2*(result+1)
'
运行

13.计算Sn = 1+11+111+…+111…111(最后一项是n个1)。n是一个随机产生的1~10(包括1和10)中的正整数

  1. import random
  2. n = random.randint(1,10)
  3. x = 1
  4. s = 0
  5. for i in range(1,n+1):
  6. s += x
  7. x = 10*x+1
  8. print("n = {0},sn = {1}".format(n,s))
'
运行

第五章、序列数据类型

1.统计所输入字符串中单词的个数,单词之间用空格分隔

  1. s = input("请输入字符串:")
  2. num = 0
  3. for i in s:
  4. if((i >= 'a' and i <= 'z') or (i >= 'A' and i <= 'Z')):
  5. num += 1
  6. print("其中的单词总数:",num)
'
运行

2.编写程序,删除一个list里面重复元素

  1. #利用set集合不重复的性质:
  2. lis = [1,2,2,3,3,3,4,5,6,6,6]
  3. s = set(l)
  4. lis = list(s)
  5. print(lis)
  6. #既可以去除重复项,又可以保证原来的顺序:
  7. def unique(items):
  8. items_existed = set()
  9. for item in items:
  10. if item not in items_existed:
  11. yield item
  12. items_existed.add(item)
  13. if __name__ == '__main__':
  14. a = [1, 8, 5, 1, 9, 2, 1, 10]
  15. a1 = unique(a)
  16. print(list(a1))

3.编写程序,将列表[9,7,8,3,2,1,5,6]中的偶数变成它的平方,奇数保持不变

  1. lis = [9,7,8,3,2,1,5,6]
  2. for i,value in enumerate(lis):
  3. if(value % 2 == 0):lis[i] = value**2
  4. print(lis)

4.编写程序,输入字符串,将其每个字符的ASCII码形成列表并输出

  1. s = input("请输入一个字符串:")
  2. l = list()
  3. for i in s:
  4. l.append(ord(i))
  5. print(l)
  6. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  7. 请输入一个字符串:zgh666
  8. [122, 103, 104, 54, 54, 54]

第八章、函数和函数试编程

1.定义计算并返回第n阶调和数(1+1/2+1/3+…+1/n)的函数,输出前n个调和数

  1. def harmonic(n):
  2. total = 0.0
  3. for i in range(1, n+1):
  4. total += 1.0/i
  5. return total
  6. n = int(input("n:"))
  7. print("输出前n个调和数的值:")
  8. for i in range(1, n+1):
  9. print(harmonic(i))
'
运行

2.编写程序,定义一个求阶乘的函数fact(n),并编写测试代码,要求输入整数n(n>=0)。请分别使用递归和非递归方式实现

  1. #1.递归
  2. ef fact(n):
  3. if n == 0 :
  4. return 1
  5. return n*fact(n-1)
  6. n = int(input("请输入整数n(n>=0):"))
  7. print(str(n)+" ! = " + str(fact(n)))
  8. #2.非递归:
  9. def fact(n):
  10. t = 1
  11. for i in range(1,n+1):
  12. t *= i
  13. return t
  14. n = int(input("请输入整数n(n>=0):"))
  15. print(str(n)+" ! = " + str(fact(n)))

3.编写程序,定义一个求Fibonacci数列的函数fib(n),并编写测试代码,输出前20项(每项宽度5个字符位置,右对齐),每行输出10个。请分别使用递归和非递归方式实现

  1. #1.递归:
  2. def fib(n):
  3. if (n == 1 or n == 2):
  4. return 1
  5. return fib(n-1)+fib(n-2)
  6. for i in range(1,21):
  7. print(str(fib(i)).rjust(5,' '),end = ' ')
  8. if i %10 == 0:
  9. print()
  10. #2.非递归:
  11. def fib(n):
  12. if (n == 1 or n == 2):
  13. return 1
  14. n1 = n2 = 1
  15. for i in range(3,n+1):
  16. n3 = n1+n2
  17. n1 = n2
  18. n2 = n3
  19. return n3
  20. for i in range(1,21):
  21. print(str(fib(i)).rjust(5,' '),end = ' ')
  22. if i %10 == 0:
  23. print()
  24. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  25. 1 1 2 3 5 8 13 21 34 55
  26. 89 144 233 377 610 987 1597 2584 4181 6765

4.编写程序,利用可变参数定义一个求任意个数数值的最小值的函数min_n(a,b,*c),并编写测试代码。例如对于“print(min_n(8, 2))”以及“print(min_n(16, 1, 7, 4, 15))”的测试代码

  1. def min_n(a,b,*c):
  2. min_number = a if(a < b) else b
  3. for n in c:
  4. if n < min_number:
  5. min_number = n
  6. return min_number
  7. print(min_n(8, 2))
  8. print(min_n(16, 1, 7, 4, 15))
  9. #>>>>>>>>>>>>>>>>>>>>>>>>
  10. 2
  11. 1
'
运行

5.编写程序,利用元组作为函数的返回值,求序列类型中的最大值、最小值和元素个数,并编写测试代码,假设测试代码数据分别为s1=[9, 7, 8, 3, 2, 1, 55, 6]、s2=[“apple”, “pear”, “melon”, “kiwi”]和s3="TheQuickBrownFox"
 

  1. def func(n):
  2. return (max(n),min(n),len(n))
  3. s1=[9, 7, 8, 3, 2, 1, 55, 6]
  4. s2=["apple", "pear", "melon", "kiwi"]
  5. s3="TheQuickBrownFox"
  6. for i in (s1,s2,s3):
  7. print("list = ", i)
  8. t = func(i)
  9. print("最大值 = {0},最小值 = {1},元素个数 = {2}".format(t[0], t[1], t[2]))
  10. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  11. list = [9, 7, 8, 3, 2, 1, 55, 6]
  12. 最大值 = 55,最小值 = 1,元素个数 = 8
  13. list = ['apple', 'pear', 'melon', 'kiwi']
  14. 最大值 = pear,最小值 = apple,元素个数 = 4
  15. list = TheQuickBrownFox
  16. 最大值 = x,最小值 = B,元素个数 = 16

第九章、

1.编写程序,创建类MyMath,计算圆的周长和面积以及球的表面积和体积,并编写测试代码,结果均保留两位小数

  1. import math
  2. class MyMath:
  3. def __init__(self, r):
  4. self.r = r
  5. def perimeter_round(self):
  6. return 2 * math.pi * self.r
  7. def area_round(self):
  8. return math.pi * self.r * self.r
  9. def area_ball(self):
  10. return 4 * math.pi * self.r ** 2
  11. def volume_ball(self):
  12. return 4 / 3 * math.pi *self.r ** 3
  13. if __name__ == '__main__':
  14. n = float(input("请输入半径:"))
  15. m = MyMath(n)
  16. print("圆的周长 = {0:.2f}\n圆的面积 = {1:.2f}\n球的表面积 = {2:.2f}\n球的体积 = {3:.2f}".\
  17. format(m.perimeter_round(), m.area_round(), m.area_ball(), m.volume_ball()))
  18. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  19. 请输入半径:5
  20. 圆的周长 = 31.42
  21. 圆的面积 = 78.54
  22. 球的表面积 = 62.83
  23. 球的体积 = 523.60

2.编写程序,创建类Temperature,其包含成员变量degree(表示温度)以及实例方法ToFahrenheit(将摄氏温度转换为华氏温度)和ToCelsius(将华氏温度转换为摄氏温度),并编写测试代码

  1. class Temperature:
  2. def __init__(self, degree):
  3. self.degree = degree
  4. def toFahrenheit(self):
  5. return self.degree*9/5 + 32
  6. def toCelsius(self):
  7. return (self.degree -32) * 5/9
  8. if __name__ == '__main__':
  9. n1 = float(input("请输入摄氏温度:"))
  10. t1 = Temperature(n1)
  11. print("摄氏温度 = {0:.2f}, 华氏温度 = {1:.2f}".format(n1, t1.toFahrenheit()))
  12. n2 = float(input("请输入华氏温度:"))
  13. t2 = Temperature(n2)
  14. print("摄氏温度 = {0:.2f}, 华氏温度 = {1:.2f}".format(t2.toCelsius(), n2))
  15. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  16. 请输入摄氏温度:30
  17. 摄氏温度 = 30.00, 华氏温度 = 86.00
  18. 请输入华氏温度:70
  19. 摄氏温度 = 21.11, 华氏温度 = 70.00

第十章、

1.编写程序,创建一个实现+、-、*、/和**(幂)运算的模块MyMath.py,并编写测试代码

  1. #先创建一个模块代码MyMath.py
  2. def add(x,y):
  3. return x+y
  4. def sub(x,y):
  5. return x-y
  6. def mul(x,y):
  7. return x*y
  8. def div(x,y):
  9. if y == 0: return "除数不能为零!"
  10. return x/y
  11. def power(x,y):
  12. return x**y
'
运行

测试代码:

  1. >>> import MyMath
  2. >>> dir(MyMath)
  3. ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'div', 'mul', 'power', 'sub']
  4. >>> MyMath.add(10,12)
  5. 22
  6. >>> MyMath.div(5,4)
  7. 1.25
  8. >>> MyMath.mul(9,9)
  9. 81
  10. >>> MyMath.sub(6,1)
  11. 5
  12. >>> MyMath.power(2,10)
  13. 1024

2.编写程序,创建一个求圆的面积和球体体积的模块AreaVolume.py,并编写只有独立运行时才执行的测试代码,要求输入半径,输出结果保留两位小数

  1. #先创建一个模块代码AreaVolume.py:
  2. import math
  3. def area(r):
  4. return math.pi * r * r
  5. def volume(r):
  6. return 4/3 * math.pi * r**3
  7. #测试代码:
  8. import AreaVolume
  9. if __name__ == '__main__':
  10. r = float(input("请输入半径:"))
  11. print("圆的面积:{0:.2f},球的体积:{1:.2f}".\
  12. format(AreaVolume.area(r), AreaVolume.volume(r)))
  13. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  14. 请输入半径:5.1
  15. 圆的面积:81.71,球的体积:555.65

3.编写程序,创建输出命令行参数个数以及各参数内容的模块SysArgvs.py,并编写测试代码

  1. #先创建一个模块代码SysArgvs.py
  2. import sys
  3. print("参数个数:", len(sys.argv))
  4. for i,x in enumerate(sys.argv):
  5. print("argv[{0}] = {1}".format(i, x))
'
运行

测试(cmd):

  1. D:\zgh\desktop>python SysArgvs.py
  2. 参数个数: 1
  3. argv[0] = SysArgvs.py
  4. D:\zgh\desktop>python SysArgvs.py a b c
  5. 参数个数: 4
  6. argv[0] = SysArgvs.py
  7. argv[1] = a
  8. argv[2] = b
  9. argv[3] = c

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/833650
推荐阅读
相关标签
  

闽ICP备14008679号