《Python程序设计实验教程——以医药数据处理为例》第四章综合应用题

本文提供了六个Python编程练习,涉及长度单位转换、口罩销售折扣计算、字符类型统计、药品库存分析、最大公约数与最小公倍数计算以及猜数游戏,涵盖了基础输入输出、条件判断、异常处理等知识点,适用于医药专业学生学习和实践。
摘要由CSDN通过智能技术生成

摘要:本文旨在帮助中国药科大学的学生学习必修课《Python与医药大数据处理》,在实验操作题方面给予代码参考。
欢迎各界人士共同讨论Python相关话题,并给予宝贵建议。

目录

PY40301:根据用户输入的带有单位后缀的长度值进行英寸和厘米间的单位互换

PY40302:根据用户输入的医用口罩购买数量计算并输出打折后的销售金额

PY40303:统计不同类字符出现的次数

PY40304:统计在售药品的信息

PY40305:实现最大公约数计算

PY40306:实现猜数游戏


PY40301:根据用户输入的带有单位后缀的长度值进行英寸和厘米间的单位互换

要求:若输入的长度值以"in"结束,则将英寸长度转换为厘米长度输出;若当输入的长度值以"cm"结束,则将厘米长度转换为英寸长度输出;如果输出的长度不是以"in""cm"结束的,则输出“输入格式错误”

Length=input("请输入带有单位后缀的长度值:")
if Length[-2:] in ['in']:
    CM=eval(Length[0:-2])*2.54
    print("转换后的长度为{:.2f}厘米".format(CM))
elif Length[-2:] in ['cm']:
    IN=eval(Length[0:-2])/2.54
    print("转换后的长度为{:.2f}英寸".format(IN))
else:
    print("输入格式错误")

PY40302:根据用户输入的医用口罩购买数量计算并输出打折后的销售金额

要求:某医药用品销售平台出售整箱医用口罩,每箱定价150元,1箱不打折,2箱(含)到3箱(含)打九折,4箱(含)到9箱(含)打八折,10箱(含)以上打七折,用户通过键盘输入购买数量,屏幕上输出原价和折后价

n=eval(input("请输入购买医用口罩总箱数:"))
price=150*n
if n==1:
    discount=price
elif 2<=n<=3:
    discount=price*0.9
elif 4<=n<=9:
    discount=price*0.8
else:
    discount=price*0.7
print("原价为:{:.2f}元".format(price))
print("折后价为:{:.2f} 元".format(discount))

PY40303:统计不同类字符出现的次数

要求:用户从键盘输入一行字符,编写程序,统计并输出其中各类字符(中文字符、英文字符、数字、空格、其他字符)出现的次数

str=input("请输入一行字符:")
chi=alp=num=spa=oth=0
for c in str:
    if chr(0x4e00)<=c<=chr(0x9fa5):
        chi+=1
    elif 65<=ord(c)<=90 or 97<=ord(c)<=122:
        alp+=1
    elif '0'<=c<='9':
        num+=1
    elif c==" ":
        spa+=1
    else:
        oth+=1
print("您输入了{}个中文字符,{}个英文字符,{}个数字,{}个空格,{}个其他字符"\
      .format(chi,alp,num,spa,oth))

PY40304:统计在售药品的信息

要求:从键盘输入一组在售药品的名称、数量、售价等信息,信息间采用空格分隔,每种药品一行,输入完所有药品,在提示信息后按Enter键结束录入。计算并输出这组药品的平均售价(保留2位小数)和其中库存不足20的药品数量

data=input("请输入一组药品的名称、数量、售价:")
totalNum=lackNum=priceSum=0
while data:
    total,lack,price=data.split()
    totalNum+=1
    priceSum+=float(price)
    if int(lack)<20:
        lackNum+=1
    data=input("请输入一组药品的名称、数量、售价:")
print("药品的平均售价是{:.2f}库存不足20的药品数有{}种".format(priceSum/totalNum,lackNum))

PY40305:实现最大公约数计算

(1)简单实现求两数的最大公约数和最小公倍数

要求:从键盘接收用户输入的两个正整数,编写程序,计算并输出这两个正整数的最大公约数和最小公倍数

m,n=eval(input("请输入两个正整数,用,隔开:"))
a,b=m,n
while a%b:
    a,b=b,a%b
print("{}、{}的最大公约数为:{},最小公倍数为:{}".format(m,n,b,int(m*n/b)))

或者选择

m,n=eval(input("请输入两个正整数,用,隔开:"))
a,b=m,n
while b:
    a,b=b,a%b
print("{}、{}的最大公约数为:{},最小公倍数为:{}".format(m,n,a,int(m*n/a)))

(2)在题(1)基本功能实现的基础上做包含异常处理的程序改进

要求:对题(1)实现的程序功能进行升级,使程序运行时能够不断获得用户输入的两个数字,计算并输出它们的最大公约数和最小公倍数。如果某次输出的数值非正整数,则要求用户重新输入;如果发生其他任何错误,则触发异常,要求用户重新输入;如果输入"0,0",则结束程序

while True:
    try:
        m,n=eval(input("请输入两个正整数,用,隔开:"))
        if m==0 and n==0:
            break
        if (abs(m)!=m or int(m)!=m)and(abs(n)!=n or int(n)!=n):
            print("输入值非法,请重新输入两个正整数!")
        else:
            x,y=m,n
            while y:
                x,y=y,x%y
            print("{}、{}的最大公约数为:{},最小公倍数为:{}".format(m,n,x,int(m*n/x)))
    except:
        print("运行有误,请重新输入!")

PY40306:实现猜数游戏

(1)简单实现0~100的猜数游戏

要求:在程序中预设一个0~100的整数,让用户通过键盘输入所猜的数,如果该数大于预设的数,则显示“您猜的数太大了!”;如果该数小于预设的数,则显示“您猜的数太小了!”,如此循环,直至猜中该数,显示“恭喜您,N次努力后,猜中了!这个数字是X”结束程序,其中N是用户输入数字的次数,X是预设数字。如果猜数超过6次仍然没有猜中,则显示“很遗憾,您已用完猜数机会!”结束程序

import random 
random.seed(100)
answer=random.randint(0,100)
n=0
while True:
    if n==6:
        print("很遗憾,您已用完猜数机会!")
        break    
    guess=eval(input("猜数范围在0~100:"))    
    n+=1
    if guess>answer:
        print("您猜的数太大了!")
    elif guess<answer:
        print("您猜的数太小了!")
    else:
        print("恭喜您,{}次努力后猜中了!这个数字是{}".format(n,answer))
        break

 (2)在题(1)基本功能实现的基础上做包含异常处理的程序改进

要求:在题(1)中,当用户输入的不是整数(如非数字字符)是,程序会终止执行并退出,升级该程序,使得当用户输入非数字字符时,给出“输入有误!”的提示并让用户重新输入;当用户输入浮点数是,给出“输入内容必须为整数!”的提示并让用户重新输入

import random
random.seed(100)
answer=random.randint(0,100)
n=0
while True:
    try:
        if n==6: 
            print("很遗憾,您已用完猜数机会!")
            break
        guess=eval(input("猜数范围在0~100(整数):"))
        n+=1
        if guess<0 or guess>100:
            print("请输入一个0~100之间的整数!")
        else:
            if int(guess)!=guess:
                print("输入内容必须为整数!")
            else:
                if guess>answer:
                    print("您猜的数太大了!")
                elif guess<answer:
                    print("您猜的数太小了!")
                else:
                    print("恭喜您,{}次努力后猜中了!这个数字是{}".format(n,answer))
                    break
    except NameError:
        print("输入有误!请输入数字而非字母!")
    except SyntaxError:
        print("输入有误!请输入数字而非符号!")

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜半夏.1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值