Python-实验2.6.3 函数拓展练习
第1关:练习使用参数要求对于输入的a,b,c三个数,编写函数roots(a,b,c),求方程 ax2+bx+c=0 的解,返回由方程根构成的列表,若方程有无数解,返回['inf']。# coding:utf-8from math import sqrta = float(input()); b = float(input()); c = float(input())#请在此添加代码,求方程 ax^
第1关:练习使用参数
要求对于输入的a
,b
,c
三个数,编写函数roots(a,b,c)
,求方程 ax2+bx+c=0
的解,返回由方程根构成的列表,若方程有无数解,返回['inf']
。
# coding:utf-8
from math import sqrt
a = float(input()); b = float(input()); c = float(input())
#请在此添加代码,求方程 ax^2+bx+c = 0的解,返回由方程根构成的列表,若方程有无数解,返回['inf']
#********** Begin *********#
x=[]
def roots(a,b,c):
if b**2-4*a*c>0:
x.append((-b+sqrt(b**2-4*a*c))/(2*a))
x.append((-b-sqrt(b**2-4*a*c))/(2*a))
return(x)
elif b**2-4*a*c==0:
x.append((-b+sqrt(b**2-4*a*c))/(2*a))
return(x)
else:
return(['inf'])
#********** End **********#
print (roots(a,b,c))
第2关:具有多个返回值的函数
根据第三关方程求根的例子,我们现在假设一元二次方程 ax2+bx+c=0 的二次项系数 a 不等于 0,此时方程必有两个根。再次编写函数roots(a,b,c)
返回该方程的两个根。
# coding:utf-8
from math import sqrt
a=float(input()); b=float(input()); c=float(input())
#请在此添加代码,在a不等于0的情况下编写函数求解方程的两个根并将根返回
#********** Begin *********#
def roots(a,b,c):
x1=(-b+sqrt(b**2-4*a*c))/(2*a)
x2=(-b-sqrt(b**2-4*a*c))/(2*a)
return(x1,x2)
#********** End **********#
if a != 0:
print (roots(a,b,c))
第3关:在函数中修改全局变量
给定全局变量counter
,初始值设为 0 ,补全函数access
,使得其每被调用一次,counter
的值就增加 1 。
# coding:utf-8
counter = 0
def access():
#请在此添加代码,实现counter的调用,每次调用counter的值加1
#********** Begin *********#
global counter
counter+=1
#********** End **********#
for i in range(5):
access()
print (counter)
第4关:Lambda 表达式
完成函数diff(f)
,它返回函数f
的导数。
本任务中,Δx
的值取 0.001 ,存放于变量 delX
中。
# coding:utf-8
from math import sin, cos
delX = 0.001
x = float(input())
def diff(x):
#请在此添加代码,求出函数f的导数
#********** Begin *********#
return(cos(x))
#********** End *********#
print("{:.2f}".format(diff(x)))
第5关:使用默认参数
本关的编程任务是定义函数solve(),在方程有解的前提下,求解并返回方程的2个根。请补全文件中的代码。
import math
#请在此添加代码,定义solve函数,求一元二次方程的的两个根
#********** Begin *********#
def solve(a,b,c=-4):
if b*b-4*a*c>=0:
d=math.sqrt(b**2-4*a*c)
x1=(-b+d)/2/a
x2=(-b-d)/2/a
return(x1,x2)
#********** End *********#
a=eval(input())
b=eval(input())
c=eval(input())
x1, x2 = solve(a, b) #默认第三个参数为-4
print('x1=%f, x2=%f' % (x1, x2))
第6关:使用可变长参数
编写函数 sum_of_paras(*arg)
,假设限定输入参数类型均为整数,它返回参数列表 arg
中所有数的和。
本关要求学习者直接填入代码,然后运行程序并根据程序输出的结果判断填入的代码是否正确。
# coding:utf-8
import random
from functools import reduce
n = input() # useless
n = random.randint(5,10)
L = []
for i in range(n):
L.append(random.randint(1,n))
def sum_of_paras(*arg):
#请在此添加代码,返回参数列表 arg 中所有数的和
#********** Begin *********#
return sum(arg)
#********** End *********#
strcall = "sum_of_paras(";
strcall += reduce(lambda x, y: x+","+y, [str(s) for s in L])
strcall +=")"
if eval(strcall) == sum(L):
print("Y")
else:
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 项的值并返回。
n=int(input())
#请在此添加代码,返回斐波拉契数量第n项的值
#********** Begin *********#
def fib(n):
a=0
b=1
if n==1:
return a
else:
for i in range(n-1):
c=a+b
a=b
b=c
return a
#********** End *********#
print(fib(n))
重点考察对函数思想的理解,包括系统封装性和模块化思维的掌握。。
求求三连啦。。
更多推荐
所有评论(0)