当前位置:   article > 正文

Python-实验2.6.3 函数拓展练习_返回由方程根构成的列表,若方程有无数解

返回由方程根构成的列表,若方程有无数解

第1关:练习使用参数

要求对于输入的a,b,c三个数,编写函数roots(a,b,c),求方程 ax2+bx+c=0 的解,返回由方程根构成的列表,若方程有无数解,返回['inf']

  1. # coding:utf-8
  2. from math import sqrt
  3. a = float(input()); b = float(input()); c = float(input())
  4. #请在此添加代码,求方程 ax^2+bx+c = 0的解,返回由方程根构成的列表,若方程有无数解,返回['inf']
  5. #********** Begin *********#
  6. x=[]
  7. def roots(a,b,c):
  8. if b**2-4*a*c>0:
  9. x.append((-b+sqrt(b**2-4*a*c))/(2*a))
  10. x.append((-b-sqrt(b**2-4*a*c))/(2*a))
  11. return(x)
  12. elif b**2-4*a*c==0:
  13. x.append((-b+sqrt(b**2-4*a*c))/(2*a))
  14. return(x)
  15. else:
  16. return(['inf'])
  17. #********** End **********#
  18. print (roots(a,b,c))

第2关:具有多个返回值的函数

根据第三关方程求根的例子,我们现在假设一元二次方程 ax2+bx+c=0 的二次项系数 a 不等于 0,此时方程必有两个根。再次编写函数roots(a,b,c)返回该方程的两个根。

  1. # coding:utf-8
  2. from math import sqrt
  3. a=float(input()); b=float(input()); c=float(input())
  4. #请在此添加代码,在a不等于0的情况下编写函数求解方程的两个根并将根返回
  5. #********** Begin *********#
  6. def roots(a,b,c):
  7. x1=(-b+sqrt(b**2-4*a*c))/(2*a)
  8. x2=(-b-sqrt(b**2-4*a*c))/(2*a)
  9. return(x1,x2)
  10. #********** End **********#
  11. if a != 0:
  12. print (roots(a,b,c))

第3关:在函数中修改全局变量

给定全局变量counter,初始值设为 0 ,补全函数access,使得其每被调用一次,counter的值就增加 1 。

  1. # coding:utf-8
  2. counter = 0
  3. def access():
  4. #请在此添加代码,实现counter的调用,每次调用counter的值加1
  5. #********** Begin *********#
  6. global counter
  7. counter+=1
  8. #********** End **********#
  9. for i in range(5):
  10. access()
  11. print (counter)

第4关:Lambda 表达式

完成函数diff(f),它返回函数f的导数。

本任务中,Δx 的值取 0.001 ,存放于变量 delX中。

  1. # coding:utf-8
  2. from math import sin, cos
  3. delX = 0.001
  4. x = float(input())
  5. def diff(x):
  6. #请在此添加代码,求出函数f的导数
  7. #********** Begin *********#
  8. return(cos(x))
  9. #********** End *********#
  10. print("{:.2f}".format(diff(x)))

第5关:使用默认参数

本关的编程任务是定义函数solve(),在方程有解的前提下,求解并返回方程的2个根。请补全文件中的代码。

  1. import math
  2. #请在此添加代码,定义solve函数,求一元二次方程的的两个根
  3. #********** Begin *********#
  4. def solve(a,b,c=-4):
  5. if b*b-4*a*c>=0:
  6. d=math.sqrt(b**2-4*a*c)
  7. x1=(-b+d)/2/a
  8. x2=(-b-d)/2/a
  9. return(x1,x2)
  10. #********** End *********#
  11. a=eval(input())
  12. b=eval(input())
  13. c=eval(input())
  14. x1, x2 = solve(a, b) #默认第三个参数为-4
  15. print('x1=%f, x2=%f' % (x1, x2))

第6关:使用可变长参数

编写函数 sum_of_paras(*arg),假设限定输入参数类型均为整数,它返回参数列表 arg 中所有数的和。

本关要求学习者直接填入代码,然后运行程序并根据程序输出的结果判断填入的代码是否正确。

  1. # coding:utf-8
  2. import random
  3. from functools import reduce
  4. n = input() # useless
  5. n = random.randint(5,10)
  6. L = []
  7. for i in range(n):
  8. L.append(random.randint(1,n))
  9. def sum_of_paras(*arg):
  10. #请在此添加代码,返回参数列表 arg 中所有数的和
  11. #********** Begin *********#
  12. return sum(arg)
  13. #********** End *********#
  14. strcall = "sum_of_paras(";
  15. strcall += reduce(lambda x, y: x+","+y, [str(s) for s in L])
  16. strcall +=")"
  17. if eval(strcall) == sum(L):
  18. print("Y")
  19. else:
  20. print("N")

第7关:使用递归

斐波那契数列的是这样一个数列:0、1、1、2、3、5、8、13、21、34....,即第一项 f(1) = 0,第二项 f(2) = 1.....,第 n 项为 f(n) = f(n-1) + f(n-2)。 定义一个函数fib()求斐波那契数列第 n 项的值并返回。

  1. n=int(input())
  2. #请在此添加代码,返回斐波拉契数量第n项的值
  3. #********** Begin *********#
  4. def fib(n):
  5. a=0
  6. b=1
  7. if n==1:
  8. return a
  9. else:
  10. for i in range(n-1):
  11. c=a+b
  12. a=b
  13. b=c
  14. return a
  15. #********** End *********#
  16. print(fib(n))

重点考察对函数思想的理解,包括系统封装性和模块化思维的掌握。。

求求三连啦。。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号