Python程序设计 函数(三)

练习十一 函数

第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 math
    d = b**2 - 4 * a * c
    if d > 0:
        r1 = (-b + math.sqrt(d)) / (2 * a)
        r2 = (-b - math.sqrt(d)) / (2 * a)
        return 1, r1, r2
    elif d == 0:
        r = -b / (2 * a)
        return 0, r, r
    elif 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 math
    for 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.8
        elif w > 100:
            s = 4 + math.ceil((w-100)/100)*1.2
    elif m == "n":
        if w <= 100:
            s = math.ceil(w/20)*1.2
        elif w > 100:
            s = 6 + math.ceil((w-100)/100)*2
    return 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.8
        elif w > 100:
            s = math.ceil((w - 100) / 100) * 0.2 + 0.8
    elif m == "n":
        if w <= 100:
            s = 1.2
        elif w > 100:
            s = math.ceil((w - 100) / 100) * 0.4 + 1.2
    return 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 = 129
    if ll > 30:
        s += (ll - 30) * 3
    if th > 1000:
        s += (th - 1000) * 0.15
    if dx > 500:
        s += (dx -500) * 0.1
    return 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 = 14
        elif zl > 1:
            s = (zl - 1) * 5 + 14
    elif kdfs == "特快":
        if zl <= 1:
            s = 18
        elif zl > 1:
            s = (zl - 1) * 10 + 18
    elif kdfs == "大件":
        if zl <= 3:
            s = 21
        elif zl > 3:
            s = (zl - 3) * 5 + 21
    return 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)**x
    return 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)
  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值