摘要:本文旨在帮助中国药科大学的学生学习必修课《Python与医药大数据处理》,在实验操作题方面给予代码参考。
欢迎各界人士共同讨论Python相关话题,并给予宝贵建议。
目录
PY40301:根据用户输入的带有单位后缀的长度值进行英寸和厘米间的单位互换
PY40302:根据用户输入的医用口罩购买数量计算并输出打折后的销售金额
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("输入有误!请输入数字而非符号!")