Python-实验2.6.3 函数拓展练习

第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)) 

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

求求三连啦。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值