学号:
姓名:
练习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 x2−5x+6=0的根。
根据中学知识,一元二次方程的实数解分以下几种情况:
Δ
=
b
2
−
4
a
c
\Delta = b^2-4ac
Δ=b2−4ac
-
$\Delta < 0 $ 无实数解
-
$\Delta = 0 $ 两个相同的实数解
x 1 = x 2 = − b 2 a x_1 = x_2 = \frac{-b}{2a} x1=x2=2a−b
-
$\Delta > 0 $ 两个不同的实数解:
1) x 1 = − b + Δ 2 a x_1 = \frac{-b+\sqrt{\Delta}}{2a} x1=2a−b+Δ
2) x 2 = − b − Δ 2 a x_2 = \frac{-b-\sqrt{\Delta}}{2a} x2=2a−b−Δ
之前编写的程序段:
#输入参数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