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

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

目录

PY60301:输出列表元素的统计结果

PY60302:按要求输出列表

PY60303:找出字符串中第一个只出现一次的字符

PY60304:按要求输出英文文本中的最长单词和最短单词

PY60305:实现列表的排序和删除

PY60306:按要求统计学生的课程成绩

PY60307:按要求输出新药年份及其上市数量

PY60308:实现字典的反转输出


PY60301:输出列表元素的统计结果

要求:从键盘输入一个包含若干整数的列表,在屏幕上实现下列输出:

(1)输出列表中的最大值和最小值;

(2)输出列表元素的平均值,结果保留3位小数;

(3)输出列表元素中绝对值最大的数;

(4)将列表元素降序排列后输出

ls=eval(input("请输入一个包含若干整数的列表:"))
print("最大值是:",max(ls))
print("最小值是:",min(ls))
print("平均值是:{:.4}".format(sum(ls)/len(ls)))
print("绝对值最大的数为:",max(ls,key=abs))
print("降序后的新列表为",sorted(ls,reverse=True))

PY60302:按要求输出列表

要求:从键盘输入一个包含若干自然数的列表,在屏幕上实现下列输出:

(1)把列表中的所有自然数转换为字符串,然后输出包含这些字符串的列表;

(2)输出一个元素为原列表中每个自然数的位数的列表

ls=eval(input("请输入一个包含若干自然数的列表:"))
print(list(map(str,ls)))
print(list(map(len,list(map(str,ls)))))

或者选择

ls=eval(input("请输入一个包含若干自然数的列表:"))
print([str(each) for each in ls])
print([len(str(each)) for each in ls])

PY60303:找出字符串中第一个只出现一次的字符

要求:从键盘输入一个只包含小写字母的字符串,在屏幕上输出第一个只出现一次的字符,如果没有,则在屏幕上输出“No”

s=input("请输入一个字符串(只包含小写字母):")
cnt=[0]*26
for c in s:
    for i in range(97,123):
        if ord(c)==i:
            cnt[i-97]+=1
for j in cnt:
    if cnt[j]==1:
        print(chr(j+97))
        break
else:
    print("No")

PY60304:按要求输出英文文本中的最长单词和最短单词

要求:从键盘输入英文文本,其中只包含单词和空格,在屏幕上输出第一个最长单词和第一个最短单词

s=input("请输入一个句子:")
words=s.split()
length=[len(each) for each in words]
print("第一个最长的单词是:"+words[length.index(max(length))])
print("第一个最短的单词是:"+words[length.index(min(length))])

PY60305:实现列表的排序和删除

要求:生成一个包含20个0~100随机整数的列表,降序排列列表中索引号为偶数的元素,索引号为奇数的元素不变,输出排序后的列表,然后删除排序后列表中的所有奇数

import random
x=[]
for i in range(20):
    x+=[random.randint(0,100)]
print("生成列表如下:")
print(x)
x[::2]=sorted(x[::2],reverse=True)
print("排序后,列表如下:")
print(x)
for j in x[::-1]:
    if j%2==1:
        x.remove(j)
print("删除奇数后,列表如下:")
print(x)

 或者选择

import random
x=[]
x=[random.randint(0,100) for i in range(20)]
print("生成列表如下:")
print(x)
x[::2]=sorted(x[::2],reverse=True)
print("排序后,列表如下:")
print(x)
x=list(filter(lambda a:a%2==0,x))
print("删除奇数后,列表如下:")
print(x)

PY60306:按要求统计学生的课程成绩

要求:从键盘连续输入课程名称及成绩,课程名称和成绩用空格分隔,每门成绩一行,遇空行按Enter键结束录入。本题要求输入结束后在屏幕上输出得分最高的课程名称及成绩,得分最低的课程名称及成绩,以及平均分(保留2位小数)

data=input("请输入课程名及对应的成绩:")
s=0
ls=[]
while data:
    lis=data.split()
    ls+=[lis]
    data=input("请输入课程名及对应的成绩:")
ls1=[eval(x[1]) for x in ls]
for i in ls1:
    s+=i
maxc=max(ls,key=lambda x:x[1])[0]
maxs=max(ls,key=lambda x:x[1])[1]
minc=min(ls,key=lambda x:x[1])[0]
mins=min(ls,key=lambda x:x[1])[1]
print("最高分课程是{}{},最低分课程是{}{},平均分是{:.2f}".format(maxc,maxs,minc,mins,s/len(ls)))

PY60307:按要求输出新药年份及其上市数量

要求:根据Cortellis Drug Discovery Intelligence截至2020年11月18日的检索结果,近20年上市的新药的统计信息用字字符串保存如下:
"2020年,87\n2019年,96\n2018年,99\n2017年,99\n2016年,76\n2015年,87\n2014年,100\n2013年,86\n2012年,63\n2011年,66\n2010年,59\n2009年,81\n2008年,63\n2007年,74\n2006年,81\n2005年,79\n2004年,59"

根据每年上市新药数量从大到小的顺序进行排序,并按照每行一个年份的格式在屏幕上输出年份及其上市新药的数量

s="2020年,87\n2019年,96\n2018年,99\n2017年,99\n2016年,76\n2015年,87\n2014年,100\n2013年,86\n2012年,63\n2011年,66\n2010年,59\n2009年,81\n2008年,63\n2007年,74\n2006年,81\n2005年,79\n2004年,59"
ls=s.split("\n")
print("数据初步切分为如下列表:")
print(ls)
print()

lsls=[x.split(",") for x in ls]
print("数据二次处理为如下列表:")
print(lsls)
print()

lsls.sort(key=lambda x:int(x[1]),reverse=True)
print("最终排序结果为:")
print("\n".join([":".join(i) for i in lsls]))

PY60308:实现字典的反转输出

要求:从键盘输入一个字典类型的字符串,反转其中的键值并在屏幕上输出,即输入key:value模式,输出value:key模式。如果输入的字典格式字符串不正确,则提示“输入错误”

s=input("请输入字典格式字符串:")
try:
    d=eval(s)
    v=list(d.values())
    k=list(d.keys())
    new_d=dict(zip(v,k))
    print(new_d)
except:
    print("输入错误")
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

姜半夏.1024

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

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

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

打赏作者

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

抵扣说明:

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

余额充值