杭师管科python专业课线上笔记(五):基础python补充练习(自编30例)

注:题目经适当改编,取消输入步骤,适应真题风格,每日一题,持续30天
真题链接:程序设计题txt文件操作题


因为真题选填题部分用的是python2语法,print不需要加括号,因此习惯了print加括号的可以在代码最前面加上这一句:

#!/usr/bin/python3

向改卷老师说明用的是python3,那问题应该就不是很大


day1 函数、for循环

写一个函数,给定一个正整数m(m>11),计算 11+12+13+…+m 的值。

def a(m):
    sum=0
    for i in range(11,m+1):
        sum=sum+i
    return sum

print(a(21))

day2 列表遍历、if语句

已知a=[3,1,12,5,14,8,7,2,5,3,2,6,7,2,3,8,5],编程输出列表里能被2和3整除的数的个数

a=[3,1,12,5,14,8,7,2,5,3,2,6,7,2,3,8,5]
cnt=0
for i in a:
    if i%2==0 and i%3==0:
        cnt+=1
print(cnt)

注意if语句中连接的是and,不是C中的&&

day3 break跳出循环

编程计算同时能整除14与18的最小正整数?

for i in range(1,14*18+1):
    if i%14==0 and i%18==0:
        print(i)
        break

注意不要忽略了range前面的1,否则就会从0开始,输出的是0

day4 两次for循环、set()函数

a=[2,1,5,1,2,3,1,3,5,6,1,8,2,1,7,7],将列表中出现两次的元素排列成一个新列表

a=[2,1,5,1,2,3,1,3,5,6,1,8,2,1,7,7]
b=list(set(a))#存储a中不一样的元素,注意用list()变成列表格式
cnt=0
c=[]
for i in b:
    for j in a:
        if i==j:
            cnt+=1
    if cnt==2:
        c.append(i)
    cnt=0
print(c)

day5 数学表达式

现有一笼子,里面有鸡和兔子若干只,共有头14个,腿38条,鸡和兔子各有多少只

for i in range(1,15):
    if i*2+(14-i)*4==38:
        print(f'鸡有:{i}只,兔有:{14-i}只')

day6 列表排序

已知a=[3,1,12,5,14,8,7,2,5,3,2,6,7,2,3,8,5],编程输出列表里最小的2个奇数(一个空格隔开)

a=[3,1,12,5,14,8,7,2,5,3,2,6,7,2,3,8,5]
a.sort(reverse=False)#False表示升序,True表示降序
flag=2
for i in a:
    if i%2==1 and flag!=0:
        print(i,end=' ')
        flag-=1
    if flag==0:
        break

day7 字典遍历

已知字典a={1:4,2:3,4:1,0:12,14:8,10:3,9:4,5:2,15:2},挑出所有为偶数的值,将其对应的键放入一个列表中输出

a={1:4,2:3,4:1,0:12,14:8,10:3,9:4,5:2,15:2}
keys=[]
for key,value in a.items():
    if value%2==0:
        keys.append(key)
print(keys)

day8 函数、for循环

编写函数求a+aa+aaa++⋯+aa⋯a(n个a)之和。

def an(a,n):
    sum=0#必须放在函数里面、for循环外面
    c=a#存储a,用于与sum相加
    for i in range(1,n+1):
        sum=sum+c
        c+=a*pow(10,i)
    return sum
print(an(1,3))

day9 enumerate 遍历列表同时获取元素及下标

a=[143,174,119,127,117,164,110,128],输出列表里大于平均值的数对应的列表下标(空格隔开)

a=[143,174,119,127,117,164,110,128]
for index,i in enumerate(a):
    if i>=sum(a)/len(a):
        print(index,end=' ')

day10 //、/、%的区别应用、while循环

输出a=234153的位数及其各位数字之和,中间用一个空格隔开。

a=234153
sum=0
cnt=0
while a!=0:
    cnt+=1
    sum=sum+a%10
    a=a//10
print(sum,cnt)

day11 素数、for-else循环

已知a=[3,1,12,5,14,8,7,2,5,3,2,6,7,2,3,8,5],找出里面的素数并求和

for-else的含义:如果能被整除(不是素数),break跳出当前for循环,不执行任何操作;如果不能被整除(是素数),for迭代完所有书都没有break跳出循环,执行else语句,把这个素数添加到列表中

a=[3,1,12,5,14,8,7,2,5,3,2,6,7,2,3,8,5]
b=[]
for i in a:
    if i>1:
        for j in range(2,i//2+1):
            if i%j==0:
                break
        else:
            b.append(i)
print(b)
print(sum(b))

或用定义函数的方法

def iszhi(n):
    if n>1:
        for i in range(2,n//2+1):
            if n%i==0:
                return False
        else:
            return True
a=[3,1,12,5,14,8,7,2,5,3,2,6,7,2,3,8,5]
b=[]
for j in a:
    if iszhi(j)==True:
        b.append(j)
print(b)
print(sum(b))

day12 水仙花数、整除

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 例如:153=1×1×1+5×5×5+3×3×3。编写程序,计算并输出所有3位水仙花数。

n=3
for i in range(99,1000):
    a=i//100
    b=i//10-a*10
    c=(i-a*100-b*10)
    if i==pow(a,n)+pow(b,n)+pow(c,n):
        print(i,end=' ')

day13 for循环嵌套

求1!+3!+5!+7!+9!的和,用循环嵌套设计。

sum=0
a=1
for i in range(1,10,2):
    for j in range(1,i+1):
        a*=j
    sum+=a
    a=1
print(sum)

day14 嵌套循环、无重复组合

有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?编程输出所有符合条件的数字

a=[1,2,3,4]
result=[]
for i in a:
    for j in a:
        for k in a:
            if i*100+j*10+k not in result and i!=j and i!=k and j!=k:
                result.append(i*100+j*10+k)
print(result)

day15 斐波那契额

斐波那契数列,从1,1开始,后面每一项等于前面两项之和,求其前18项之和

def fib(n):
    if n<=2:
        return 1
    else:
        return fib(n-1)+fib(n-2)
    
sum=0
for i in range(1,19):
    sum+=fib(i)
print(sum)

day16 素数判断

判断101-200之间有多少个素数,并输出所有素数。

def iszhi(n):
    if n>1:
        for i in range(2,n//2+1):
            if n%i==0:
                return False
        else:
            return True
        
for i in range(101,201):
    if iszhi(i)==True:
        print(i,end=' ')

day17 for循环

统计 1 到 100 中6的倍数之和

sum=0
for i in range(101):
    if i%6==0:
        sum+=i
print(sum)

day18 数据交换

a=[143,174,119,127,117,164,110,128],实现最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

a=[143,174,119,127,117,164,110,128]
mina=min(a)
maxa=max(a)
for i in range(len(a)):
    if a[i]==maxa:
        a[i]=a[0]
        a[0]=maxa
    if a[i]==mina:
        a[i]=a[-1]
        a[-1]=mina
print(a)

day19 构建字典

现有列表a=[2,3,1,3,2,1,3,5,4,2,1,5,2,3,1,4],以列表中的数字为键,出现的次数为值,构建字典并输出。

a=[2,3,1,3,2,1,3,5,4,2,1,5,2,3,1,4]
keya=list(set(a))
cnt=0
result={}
for i in keya:
    for j in a:
        if i==j:
            cnt+=1
    result[i]=cnt
    cnt=0
print(result)

day20 字典遍历

已知字典a={1:4,2:3,4:1,0:12,14:8,10:3,9:4,5:2,15:2},挑出所有为键和值都为偶数的键值对,组成新字典。

a={1:4,2:3,4:1,0:12,14:8,10:3,9:4,5:2,15:2}
result={}
for key,value in a.items():
    if key%2==0 and value%2==0:
        result[key]=value
print(result)

day21 函数、最大公因数

写一个函数,给定任意两个正整数m>1、n>1,m≠n,两者的最大公因数(能同时被这两个数整除的最大的数)。

def a(m,n):
    result=0
    maxmn=0
    if m>n:
        maxmn=m
    else:
        maxmn=n
    for i in range(2,maxmn//2+1):
        if m%i==0 and n%i==0:
            result=i
    return result
print(a(140,200))

day22 三重循环嵌套

有100碗饭和100个人,1个男人吃2碗,2个女人吃3碗,3个小孩吃2碗,问男人女人小孩各多少人?给出有可能性

nan=2
nv=1.5
hai=2/3
for i in range(51):
    for j in range(67):
        for k in range(101):
            if i+j+k==100 and nan*i+nv*j+hai*k==100:
                print(i,j,k)

day23 构建字典

a=[25,30,36,42,46,49,48,38,24,13,8,6],b=[10,12,14,16,18,20,22,24,26,28,30,32],其中a为天数,b为需求数,以b为键a为值,创建字典并输出天数最多时的需求数

a=[25,30,36,42,46,49,48,38,24,13,8,6]
b=[10,12,14,16,18,20,22,24,26,28,30,32]
result={}
for i in range(len(a)):
    result[b[i]]=a[i]
print(result)
maxdaynum=max(list(result.values()))
for key,value in result.items():
    if value==maxdaynum:
        print(key)

day24 排序、降序

找出列表[-3,5,7,9,11,7,-1,-12,14,18]中大于0的数组成一个新列表,并降序输出新列表

a=[-3,5,7,9,11,7,-1,-12,14,18]
b=[]
for i in a:
    if i>0:
        b.append(i)
b.sort(reverse=True)
print(b)

day25 math库、math.sqrt()

在这里插入图片描述

import math
sum=0
for n in range(1,625):
    b=math.sqrt(n)+math.sqrt(n+1)
    c=1/b
    sum=sum+c
    print(sum)
print(f'结果为{sum:.2f}')

图片内的txt文件已打包上传,有需可以评论个邮箱,代码文件放在与file文件夹同级目录下即可

day26 txt文件题1、构建字典、字典遍历

下图是去年某商场四个季度某些商品的销售额,存储在一个文件中(文件目录:file/demo1.txt),分割符为‘\t’,注意最后还有换行符"\n”,第一行为列名,编程求解:
(1)统计每种商品去年的总销售额,以商品名为键,销售额为值输出(9分)
(2)统计季度平均销售额大于1000的商品,列表输出商品名称(6分)

在这里插入图片描述

totalSellDict={}
aveSellOver1000=[]
with open('file/demo1.txt') as f:
    f.readline()#去掉与数据无关的第一行
    lines=f.readlines()#读取剩下有数据的行
    print('-------第一题解答-------')
    for i in range(len(lines)):
        if lines[i].endswith('\n'):
            lines[i]=lines[i][:-1] #将字符串末尾的\n去掉,同时也防止最后一行没有\n的情况
        lines[i]=lines[i].split('\t') #以\t分割  
        totalSellDict[lines[i][0]]=int(lines[i][1])+int(lines[i][2])+int(lines[i][3])+int(lines[i][4])#如果试卷上写不下那么长,可以加个'\'换行写
    print(totalSellDict)
    print('-------第二题解答-------')
    for key,value in totalSellDict.items():
        if value/4>1000:
            aveSellOver1000.append(key)
    print(aveSellOver1000)

day27 txt文件题2、模仿19真题、构建字典、字典操作

下图是一位消费者某一天在一家店铺对于某品牌各种型号的商品的后台记录,存储在一个文件中(文件目录:file/demo2.txt),第一行为列名,其中type列表示型号,atcion列表示行为(0表示浏览,1表示收藏,2表示加购,3表示购买),time列表示时间(经小数化,如15.25表示15:15分),分割符为‘\t’,注意最后还有换行符"\n”,编程求解:
(1)以字典形式输出每种商品的浏览量(4分)
(2)以字典形式输出每种商品的最终结果(数字最大的行为)(5分)
(3)求加购后经过时间最长时间才购买的型号(6分)

感觉自己给自己挖了好大的一个坑…出的挺难、做的好乱,第一题有点价值,后两题可以可以跳过
在这里插入图片描述

liuLanSum={'A':0,'B':0,'C':0,'D':0}
state={'A':0,'B':0,'C':0,'D':0}
startTime={'A':0,'B':0,'C':0,'D':0}
endTime={'A':0,'B':0,'C':0,'D':0}
costTime={'A':0,'B':0,'C':0,'D':0}
with open('file/demo2.txt') as f:
    f.readline()
    lines=f.readlines()
    print('-------第一题解答-------')
    for i in range(len(lines)):
        if lines[i].endswith('\n'):
            lines[i]=lines[i][:-1]
        lines[i]=lines[i].split('\t')
        if int(lines[i][1])==0:
            liuLanSum[lines[i][0]]+=1 
    print(liuLanSum)
    print('-------第二题解答-------')
    for j in range(len(lines)):
        if int(lines[j][1]) > state[lines[j][0]]:
            state[lines[j][0]]=int(lines[j][1])
    print(state)
    print('-------第三题解答-------')
    for k in range(len(lines)):
        if int(lines[k][1])==2:
            startTime[lines[k][0]]=float(lines[k][2])
        if int(lines[k][1])==3:
            endTime[lines[k][0]]=float(lines[k][2])
    for key,value in startTime.items():
        if value==0:
            endTime[key]=0
    for key,value in endTime.items():
        if value==0:
            startTime[key]=0        
    for key,value in costTime.items():
        costTime[key]=endTime[key]-startTime[key]
    for key,value in costTime.items():
        if value==max(list(costTime.values())):
            print(key)
            break

day28 txt文件题3、构建字典、字典操作

下图是去年某四位员工ABC三类商品的销售额,存储在一个文件中(文件目录:file/demo3.txt),分割符为‘\t’,注意最后还有换行符"\n”,第一行为列名,编程求解:
(1)输出每个员工的ABC三类商品的总销售额(8分)
(2)输出对于各个商品在每位员工的平均销售额(7分)

在这里插入图片描述

staffSell={'Lily':0,'Jane':0,'Joy':0,'Angel':0}
aveSell={'A':0,'B':0,'C':0}
with open('file/demo3.txt') as f:
    f.readline()
    lines=f.readlines()
    for i in range(len(lines)):
        if lines[i].endswith('\n'):
            lines[i]=lines[i][:-1]
        lines[i]=lines[i].split('\t')
    print('-------第一题解答-------')
    for j in range(len(lines)):
        staffSell[lines[j][0]]+=int(lines[j][2])
    print(staffSell)
    print('-------第二题解答-------')
    for k in range(len(lines)):
        aveSell[lines[k][1]]+=int(lines[k][2])
    for key,value in aveSell.items():
        aveSell[key]=value/4
    print(aveSell)

day29 txt文件题4、20真题改编、增加分数排名

下图是某班几位同学的综合测评小项成绩(分为德育分、智育分、体育分,满分100分),其中,按照德育分20%、智育分70%、体育分10%的权重进行计算综合测评总成绩。文件存储在一个文件中(文件目录:file/demo4.txt),分割符为‘\t’,注意最后还有换行符"\n”,第一行为列名,编程求解:
(1)计算每位同学的综测总成绩(保留两位小数)(4分)
(2)并计算优秀率(85分以上为优秀,保留三位小数)(5分)
(3)按分数降序输出名次、姓名和分数(6分)

第三题难度有点大,后面补
在这里插入图片描述

excellent=0
scores={}
names=[]
flag=0
sortedNames=[]
with open('file/demo4.txt') as f:
    f.readline()
    lines=f.readlines()
    for i in range(len(lines)):
        if lines[i].endswith('\n'):
            lines[i]=lines[i][:-1]
        lines[i]=lines[i].split('\t')
    print('-------第一题解答-------')
    for j in range(len(lines)):
        Score=0.2*int(lines[j][1])+0.7*int(lines[j][2])+0.1*int(lines[j][3])
        scores[lines[j][0]]=Score
        print(f'{lines[j][0]}的总成绩是:{Score:.2f}')
        if Score>85:
            excellent+=1
    print('-------第二题解答-------')
    print(f'优秀率为:{excellent/len(lines):.3f}')
    print('-------第三题解答-------')
    sortedScores=list(scores.values())
    sortedScores.sort(reverse=True)
    for k in sortedScores:
        for key,value in scores.items():
            if k==value:
                sortedNames.append(key)
    for mingci,name,score in zip(range(1,len(lines)+1),sortedNames,sortedScores):#如果试卷上写不下那么长,可以加个'\'换行写
        print(f'第{mingci}名是{name},分数是{score}')
         

day30 txt文件题5、构建字典、字典操作

下图是在校期间某学校18级参加创新创业训练计划项目的各级立项数量,G表示国家级,S表示省级,X表示校级,存储在一个文件中(文件目录:file/demo5.txt),分割符为‘\t’,注意最后还有换行符"\n”,第一行为列名,编程求解:
(1)求整个18级各级立项分别的总数并输出(6分)
(2)国家级积5分,省级积3分,校级积1分,以班级为键积分为值构建字典输出各班得分,并输出分数最高的班级(9分)

在这里插入图片描述

total={'G':0,'S':0,'X':0}
classPoint={}
with open('file/demo5.txt') as f:
    f.readline()
    lines=f.readlines()
    for i in range(len(lines)):
        if lines[i].endswith('\n'):
            lines[i]=lines[i][:-1]
        lines[i]=lines[i].split('\t')
    print('-------第一题解答-------')
    for j in range(len(lines)):
        total['G']+=int(lines[i][1])
        total['S']+=int(lines[i][2])
        total['X']+=int(lines[i][3])
    print(total)
    print('-------第二题解答-------')
    for k in range(len(lines)):
        classPoint[lines[k][0]]=5*int(lines[k][1])+3*int(lines[k][2])+int(lines[k][3])
    print(classPoint)
    maxPoint=max(list(classPoint.values()))
    for key,value in classPoint.items():
        if value==maxPoint:
            print(key)
  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ryo_Yuki

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

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

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

打赏作者

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

抵扣说明:

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

余额充值