Python函数课堂练习

学号:
姓名:

练习1:
已知分段函数表示如下,请定义一个python函数myfun1,写一段代码,多次从键盘输入x,调用myfun1输出分段函数求得的结果。
在这里插入图片描述

def myfun1(x):
    if x<1:
        return x
    elif x<10:
        return 2*x-1 
    else:
        return 3*x-11 
while True:
    xInput = input("请输入一个数值作为输入参数测试函数:(q(Q)退出程序)") 
    if xInput=='q' or xInput=='Q':
        break 
    try:
        x = float(xInput)
    except:
        print("next所输入的不是数值或者q/Q。请重新输入:")
        continue
    
    y = myfun1(x)
    print(f"您输入的x是{x},分段函数结果为:{y}!")

print("测试结束!")        
请输入一个数值作为输入参数测试函数:(q(Q)退出程序)0
您输入的x是0.0,分段函数结果为:0.0!
请输入一个数值作为输入参数测试函数:(q(Q)退出程序)-2
您输入的x是-2.0,分段函数结果为:-2.0!
请输入一个数值作为输入参数测试函数:(q(Q)退出程序)5
您输入的x是5.0,分段函数结果为:9.0!
请输入一个数值作为输入参数测试函数:(q(Q)退出程序)12
您输入的x是12.0,分段函数结果为:25.0!
请输入一个数值作为输入参数测试函数:(q(Q)退出程序)q
测试结束!

练习2:

定义一个python函数myfun2求解一元二次方程的 a x 2 + b x + c = 0 ax^2 + bx + c = 0 ax2+bx+c=0,从键盘输入a,b,c,然后调用myfun2求解出方程 x 2 − 5 x + 6 = 0 x^2-5x+6=0 x25x+6=0的根。


根据中学知识,一元二次方程的实数解分以下几种情况:
Δ = b 2 − 4 a c \Delta = b^2-4ac Δ=b24ac

  1. $\Delta < 0 $ 无实数解

  2. $\Delta = 0 $ 两个相同的实数解

    x 1 = x 2 = − b 2 a x_1 = x_2 = \frac{-b}{2a} x1=x2=2ab

  3. $\Delta > 0 $ 两个不同的实数解:

    1) x 1 = − b + Δ 2 a x_1 = \frac{-b+\sqrt{\Delta}}{2a} x1=2ab+Δ
    2) x 2 = − b − Δ 2 a x_2 = \frac{-b-\sqrt{\Delta}}{2a} x2=2abΔ


之前编写的程序段:

#输入参数a,b,c
a = float(input("请输入a:"))
b = float(input("请输入b:"))
c = float(input("请输入c:"))   

#计算delta
delta = b*b - 4*a*c
print("delta判别式为:",delta)

# 根据delta判断方程实数解的情况
if delta <0:
    print("此方程无实数解。")
elif delta == 0:
    x = -b/(2*a)
    print("此方程有两个相同的实数根,其值为:%f" %x)
else:
    x1 = (-b+delta**0.5)/(2*a)
    x2 = (-b-delta**0.5)/(2*a)
    print("此方程有两个不同的实数根")
    print("x1=",x1)
    print("x2=",x2)
def myfun2(a,b,c):
    #计算delta
    delta = b*b - 4*a*c
    print("delta判别式为:",delta)

    # 根据delta判断方程实数解的情况
    if delta <0:
        print("此方程无实数解。")
    elif delta == 0:
        x = -b/(2*a)
        print("此方程有两个相同的实数根,其值为:%f" %x)
    else:
        x1 = (-b+delta**0.5)/(2*a)
        x2 = (-b-delta**0.5)/(2*a)
        print("此方程有两个不同的实数根")
        print("x1=",x1)
        print("x2=",x2)
myfun2(1,-5,6)
delta判别式为: 1
此方程有两个不同的实数根
x1= 3.0
x2= 2.0


练习3:
编写函数f(n),实现输入n的值,求出n的阶乘。然后调用此函数计算1! +2!+3!+……8!的结果,输出到屏幕上。

  • for循环方式
def f(n):
    fact = 1
    for i in range(n+1):
        if i == 0:
            fact = 1   
        else:
            fact *= i 
    return fact
f(3)
6
s = 0
for i in range(1,9):
    s += f(i)
print(f"1!+2!+...+8!={s}")
1!+2!+...+8!=46233
  • while循环方式
def f2(n):
    fact = 1 
    i = 1 
    while i<=n:
        fact *= i 
        i+= 1
    return fact
f2(3)
6
s = 0
i = 0
while i <=8:
    s += f2(i)
    i += 1
print(f"1!+2!+...+8!={s}")
1!+2!+...+8!=46234

练习4:
1)请设计一个函数func1,其输入参数为正整数n,计算0到n(包含n)之间所有能被3整除的数之和。
2)写一段脚本,接受键盘输入n,调用func1。假设键盘输入100,将计算结果以结构化形式输出如下例所示:0到100之间能被3整除的所有数之和为1683。

def func1(n):
    s = 0
    for i in range(n+1):
        if i%3 == 0:
            s += i 
    return s 
while True:
    try:
        n = int(input("请输入一个正整数n:"))
    except:
        print("您输入的不是整数,请重新输入")
        continue 
    
    if n>0:
        break 
    else:
        print("您输入的不是正整数,请重新输入")
        
print(f"0到{n}之间能被3整除的所有数之和为{func1(n)}")

请输入一个正整数n:-2
您输入的不是正整数,请重新输入
请输入一个正整数n:a
您输入的不是整数,请重新输入
请输入一个正整数n:100
0到100之间能被3整除的所有数之和为1683

练习5:
写函数,判断用户传入的对象(列表)长度是否大于5,如果大于5,那么仅保留前五个长度的内容并返回。不大于5返回本身。
例如:
传入1:[34,23,52,352,666,3523,5] 返回1:[34,23,52,352,666]
传入2:[34,23,52] 返回2:[34,23,52]

def cutList(inList):
    if len(inList)>5:
        return inList[0:5]
    else:
        return inList
cutList([34,23,52,352,666,3523,5])
[34, 23, 52, 352, 666]
cutList([34,23,52])
[34, 23, 52]

练习6:
输⼊梯形的上底,下底和⾼,其中上底为必须输入参数,下底和高分别默认值为10,设计函数,计算梯形⾯积。
并写段代码调用该函数,1)根据输入的上底、下底和高,输出梯形面积。2) 只输入上底、下底,输出梯形面积。

def calcArea(a,b=10,h=10):
    """
    输入参数:
        a: 上底 
        b:  下底,默认为10 
        h: 高, 默认为10 
    输出参数:
        s:  面积 
    """
    s = (a + b)*h/2
    return s 
calcArea(10,20,20)
300.0
calcArea(10,20)
150.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值