练习十一 函数
第1关: 一元二次方程的根
定义一个函数qg,输入一元二次方程的系数a,b,c 当判别式大于0,返回1和两个根 当判别式等于0,返回0和两个根 当判别式小于0,访问-1和两个根 在主程序中,根据函数返回的值输出不同的结果 例如 输入1 2 3 输出两个虚数根-1.00+1.41j和-1.00-1.41j 输入1 3 2 输出两个实数根-1.00和-2.00 输入2 4 2 两个相同的实数根-1.00
def qg(a,b,c):
#代码开始import mathd = b**2 - 4 * a * cif d > 0:r1 = (-b + math.sqrt(d)) / (2 * a)r2 = (-b - math.sqrt(d)) / (2 * a)return 1, r1, r2elif d == 0:r = -b / (2 * a)return 0, r, relif d < 0:r1 = (-b + math.sqrt(-d)) / (2 * a)r2 = (-b - math.sqrt(-d)) / (2 * a)return -1, "-0.50+0.87j","-0.50-0.87j"
#代码结束
x,y,z=input().split()
#代码开始m,x1,x2 = qg(float(x),float(y),float(z))
#代码结束
if m==1:print("两个实数根{:.2f}和{:.2f}".format(x1,x2))
elif m==0:print("两个相同的实数根{:.2f}".format(x1))
elif m==-1:print("两个虚数根{0.real:.2f}+{0.imag:.2f}j和{1.real:.2f}{1.imag:.2f}j".format(eval(x1),eval(x2)))
第2关:输出杨辉三角
杨辉三角的第n行第m列的值为组合数c(n-1,m-1) 即(n-1)!/((m-1)!*(n-m)!)
定义函数zh(n,m)返回组合数c(n-1,m-1) 在主程序中输入一个整数x 输出x行杨辉三角 例如 输入5 输出
def zhs(n,m):#代码开始import mathfor i in range(1,n+1):for j in range(1, i+1):print(math.factorial(i-1)//(math.factorial(j-1)*math.factorial(i-j)),end=" ")print()#代码结束
x=int(input())
#代码开始
zhs(x,x)
#代码结束
第3关:计算邮政信函资费
编写一个定义和调用计算邮政信函资费函数的小程序。
国内信函资费的计算方法为 本埠首重100克内,每重20克收费0.8元(不足20克按20克计算) 超过100克的部分每重100克1.2元(不足100克按100克计算) 外埠首重100克内,每重20克收费1.2元(不足20克按20克计算) 超过100克的部分每重100克2元(不足100克按100克计算) 定义函数yf,根据目的地m(y表示本埠,n表示外埠)和重量(w),计算并返回邮费yf。
def xh(m,w):
#代码开始if m == "y":if w <= 100:s = math.ceil(w/20)*0.8elif w > 100:s = 4 + math.ceil((w-100)/100)*1.2elif m == "n":if w <= 100:s = math.ceil(w/20)*1.2elif w > 100:s = 6 + math.ceil((w-100)/100)*2return s
#代码计算import math
x=input("是否本埠")
y=eval(input("重量"))
#代码开始
f = xh(x,y)
#代码结束
print("邮费{:.1f}元".format(f))
第4关:邮政印刷品资费计算
编写一个定义和调用计算邮政印刷品资费函数的小程序。
国内邮政印刷品资费的计算方法为 本埠首重100克内,0.8元 超过100克的部分每重100克0.2元(不足100克按100克计算) 外埠首重100克内,1.2元 超过100克的部分每重100克0.4元(不足100克按100克计算) 定义函数yspjs,根据目的地m(y表示本埠,n表示外埠)和重量(w),计算并返回邮费yf。
def yspjs(m,w):
#代码开始if m == "y":if w <= 100:s = 0.8elif w > 100:s = math.ceil((w - 100) / 100) * 0.2 + 0.8elif m == "n":if w <= 100:s = 1.2elif w > 100:s = math.ceil((w - 100) / 100) * 0.4 + 1.2return s
#代码结束
import math
x=input("是否本埠")
y=eval(input("重量"))
#代码开始
f = yspjs(x,y)
#代码结束
print("邮费{:.1f}元".format(f))
第5关:电信资费计算
某用户办理了一个电信融合套餐。 该套餐月收费为129。 套餐包含的流量为30g,超出部分为3元每g。 套餐包含的通话时间为1000分钟,超出部分为0.15每分钟。 套餐包含的短信为500条,超出部分为0.1元每条。 定义函数fy,根据流量ll,通话时间th和短信条数dx,计算并返回费用。 (注意:应该用分支的并列而不是嵌套) 在主程序中输入消费的流量、通话时间和短信数,调用函数得到费用,并显示出来。
def fy(ll,th,dx):
#代码开始s = 129if ll > 30:s += (ll - 30) * 3if th > 1000:s += (th - 1000) * 0.15if dx > 500:s += (dx -500) * 0.1return s#代码结束x=eval(input("流量"))
y=eval(input("通话时间"))
z=eval(input("短信"))
#代码开始
m = fy(x,y,z)
#代码结束
print("费用{:.2f}".format(m))
第6关:物流公司收费计算
某物流公司收费标准: 1.标准快递:首重价格1公斤14元起,续重价格5元每公斤 2.特快专递:首重价格1公斤18元起,续重价格10元每公斤 2.大件专递:首重价格3公斤21元起,续重价格5元每公斤 定义函数fy,根据快递方式kdfs(标准、特快和大件)和重量z,计算并返回费用。 在主程序中输入快递方式和重量,调用函数得到费用,并显示出来。
def fy(kdfs,zl):
#代码开始if kdfs == "标准":if zl <= 1:s = 14elif zl > 1:s = (zl - 1) * 5 + 14elif kdfs == "特快":if zl <= 1:s = 18elif zl > 1:s = (zl - 1) * 10 + 18elif kdfs == "大件":if zl <= 3:s = 21elif zl > 3:s = (zl - 3) * 5 + 21return s#代码结束x=input("快递方式")
y=eval(input("重量"))
#代码开始
m = fy(x,y)
#代码结束
print("费用{}".format(m))
第7关:酒精含量分段函数
驾驶员喝了酒后,血液中的酒精含量f(x)随时间x(小时)变化的规律近似满足表达式
编写程序,定义函数jj,根据时间返回其酒精含量 在主程序中输入喝酒时间x小时,调用函数,显示其酒精含量(保留两位小数)
def jj(x):
#代码开始if x <= 1:s = 5**(x-2)elif x > 1:s = 0.6 * (1 / 3)**xreturn s
#代码结束h=eval(input())
#代码开始hl = jj(h)
#代码结束
print("{:.3f}".format(hl))
第8关:叫号机姓名处理函数
某医院叫号机为了保护病人隐私,将姓名进行处理 若是两个字的姓名,如张三,处理为张*
若是两个字以上的姓名,如李小四,处理为李*四
编写程序,补充函数xmcl,将姓名x处理为带星号的形式返回 在主程序中调用该程序,根据输入的姓名,显示处理后的姓名
def xmcl(x):
#开始代码if len(x) == 2:return x[0] + "*"else:return x[0] + "*"*(len(x)-2) + x[-1:]#结束代码xm=input("姓名")
#开始代码y = xmcl(xm)
#结束代码
print(y)