赞
踩
大家好,小编来为大家解答以下问题,python大作业有哪些题目,python期末大作业项目,现在让我们一起来看看吧!
写在前面:本人python菜鸟一枚,学习python也纯粹是兴趣所使,由于本人身还有其他工作,学习的时间更短,每天两个小时不到,希望自己可以坚持Deepl降重。为什么要写这个课程呢,我是刷的是2021年上半年的课,已经全部刷完,觉得这个课程是真的适合菜鸟,很基础,却带有实战案例,你能很系统的理解python,掌握基础,之后才能选定方向去钻研。个人强烈推荐!! 言归正传哈,我这里只提供当时我做的时候比较费了一些脑细胞(虽然没多少)的题的答案哈。
- def dayup (x):
- dayUP = 1
- for i in range(365):
- if (i % 7) in [0,6]:
- dayUP = dayUP * (1-0.01)
- else:
- dayUP = dayUP * (1 + x)
- return dayUP
- dayfactor = 0.01
- while dayup(dayfactor) < 37.78:
- dayfactor += 0.001
- print("工作日的努力参数是: {:.3f}".format(dayfactor))
这题嘛,其实在课堂上可以直接抄,只是,计算机这种简单粗暴的方法特别喜欢,不用去想其中的规律哈哈哈哈,还有就是被函数的魅力深深吸引,感觉完全可以自由定义函数的功能就觉得很帅。
- import time
- scale = 50
- print("执行开始".center(scale//2,'-'))
- start = time.perf_counter()
- for i in range(scale+1):
- a = '*' * i
- b = '.' * (scale - i)
- c = (i/scale)*100
- dur = time.perf_counter() - start
- print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
- time.sleep(0.1)
- print("\n"+"执行结束".center(scale//2,'-'))
这个进度条也很有意思,需要记住的就是"\r",这个字符的意思就是将你的光标跳回初始位置,这样才可以实现不断刷新的效果,因为进度条就是不断刷新的效果。
#星号三角形 读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求: 第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号。 答:
- B = eval(input())
- for i in range(1,B+1,2):
- print("{0:^{1}}".format(i * "*",B))
凯撒密码: 恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下: 原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C 对于原文字符P,其密文字符C满足如下条件:C=(P+3) mod 26 上述是凯撒密码的加密方法,解密方法反之,即:P=(C-3) mod 26 假设用户可能使用的输入包含大小写字母azAZ、空格和特殊符号,请编写一个程序,对输入字符串进行恺撒密码加密,直接输出结果,其中空格不用进行加密处理。使用input()获得输入。 答:
- zimu = input()
- t = ''
- for i in zimu:
- if 'a'<= i <= 'z':
- t = t + chr(ord('a')+(ord(i)-ord('a')+3) % 26)
- elif 'A' <= i <='Z':
- t = t + chr(ord('A') + (ord(i)-ord('A')+3) % 26)
- else:
- t +=i
- print(t)
为啥t可以直接输出字符串呢,因为t是全局变量,在for循环中和if语句中一直被引用。
题目就不复述了,反正跟上课的是一样的,直接上答案吧
- height,weight = eval(input())
- bmi = weight / pow(height,2)
- print('BMI数值为:{:.2f}'.format(bmi))
- if bmi < 18.5:
- nat,cha = '偏瘦','偏瘦'
- elif 18.5 <= bmi < 24:
- nat,cha = '正常','正常'
- elif 24 <= bmi < 25:
- nat,cha = '正常','偏胖'
- elif 25 <= bmi < 28:
- nat,cha = '偏胖','偏胖'
- elif 28 <= bmi < 30:
- nat,cha = '偏胖','肥胖'
- else:
- nat,cha = '肥胖','肥胖'
- print("BMI指标为:国际'{}',国内'{}'".format(nat,cha))

这题给我的最深的是,多个字符竟然可以用一个等号赋值哈哈哈,原谅我的无知。
这题也是课堂上的,直接上代码吧
- #蒙特卡罗方法计算圆周率
- from random import random,seed
- import time
- seed(123)
- n = eval(input())
- hits = 0
- for i in range(n):
- x,y = random(),random()
- R = pow(x**2 + y**2,0.5)
- if R < 1:
- hits += 1
- Y = 4 * (hits / n)
- print('{:.6f}'.format(Y))
不知道为啥,当时看到这样的计算方法,让我觉得有点优雅哈哈哈哈
题目:编写程序计算如下数列的值:
1-2+3-4…966
其中,所有数字为整数,从1开始递增,奇数为正,偶数为负
- k = 966
- sum1 = 0
- for i in range(k+1):
- if i % 2 == 0:
- sum1 -=i
- else:
- sum1 +=i
- print(sum1)
题目:"水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。
例如:ABC是一个"3位水仙花数",则:A的3次方+B的3次方+C的3次方 = ABC。
请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。
- lists = ''
- for i in range(100,1000):
- sum = 0
- temp = i
- while temp:
- sum = sum + (temp%10)**3
- temp //= 10
- if sum == i:
- lists +='{},'.format(i)
- print(lists[:-1])
list[:-1],切片,表示取到最后一位,但是不包括最后一个字符。
给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”。
- k = 3
- while k:
- user = input()
- password = input()
- if user == 'Kate' and password == '666666':
- k -=1
- print ('登录成功!')
- break
- else :
- k -=1
- if k == 0:
- print ('3次用户名或者密码均有误!退出程序。')
要求如下:
(1) 使用 time 库获得系统当前时间,格式如下:20190411
(2) 绘制对应的七段数码管
(3) 数码管风格不限
请在本机编写代码完成实例,建议有趣的风格请在Python123的绘图专区上传展示。 答:
- import turtle as t
- import time
- def drawGap(): #绘制数码管间隔
- t.penup()
- t.fd(5)
- def drawLine(draw): #绘制单段数码管
- drawGap()
- t.pendown() if draw else t.penup()
- t.fd(40)
- drawGap()
- t.right(90)
- def drawDigit(d): #根据数字绘制七段数码管
- drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
- drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)
- drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)
- drawLine(True) if d in [0,2,6,8] else drawLine(False)
- t.left(90)
- drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)
- drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)
- drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)
- t.left(180)
- t.penup()
- t.fd(20)
- def drawDate(date):
- t.pencolor("red")
- for i in date:
- drawDigit(eval(i))
- def main():
- t.setup(800, 350, 200, 200)
- t.penup()
- t.fd(-300)
- t.pensize(5)
- drawDate(time.strftime('%Y%m%d',time.gmtime()))
- t.done()
- main()

老师上课的所讲,不解释了哈
- import turtle
- def koch(size, n):
- if n == 0:
- (size)
- else:
- for angle in [0,60,-120,60]:
- (angle)
- koch(size/3,n-1)
- def main(level):
- turtle.setup(600,600)
- turtle.penup()
- (-200, 100)
- turtle.pendown()
- turtle.pensize(2)
- koch(600,level)
- turtle.hideturtle()
- try:
- level = eval(input("请输入科赫曲线的阶: "))
- main(level)
- except:
- print("输入错误")

唉,这个是我比较难理解的,递归的使用,得找篇文章深入研究一下。在课堂上,老师说递归是包含特例和链条(具体名字没记清),这样一说,我就好理解多了。
请根据编程模板补充代码,计算任意个输入数字的乘积。
注意,仅需要在标注…的地方补充一行或多行代码。
- def cmul(n,*b):
- s = 1
- s = s*n
- for i in b:
- s *= i
- return s
- print(eval("cmul({})".format(input())))
原来b是作为一个可以迭代的数据进行处理的。
题目:根据编程模板补充代码,计算斐波那契数列的值,具体功能如下:
获取用户输入整数N,其中,N为正整数
计算斐波那契数列的值
如果将斐波那契数列表示为fbi(N),对于整数N,值如下:
fbi(1)和fbi(2)的值是1,当N>2时,fbi(N) = fbi(N-1) + fbi(N-2)
请采用递归方式编写。
- def fbi(n):
- if n <= 2:
- return 1
- else:
- return fbi(n-1) + fbi(n-2)
- n = eval(input())
- print(fbi(n))
又是递归,头大
题目:汉诺塔问题大家都清楚,这里不再赘述。
请补充编程模板中代码,完成如下功能:
有三个圆柱A、B、C,初始时A上有N个圆盘,N由用户输入给出,最终移动到圆柱C上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP是步骤序号,宽度为4个字符,右对齐。
请编写代码,获得输入N后,输出汉诺塔移动的步骤。 都是课堂上所讲的我就不赘述啦
- steps = 0
- def hanoi(src, des, mid, n):
- global steps
- if n == 1:
- steps += 1
- print("[STEP{:>4}] {}->{}".format(steps, src, des))
- else:
- hanoi(src,mid,des,n-1)
- steps += 1
- print("[STEP{:>4}] {}->{}".format(steps,src,des))
- hanoi(mid,des,src,n-1)
- N = eval(input())
- hanoi("A", "C", "B", N)
这里需要注意的是数学思维和计算思维的区别。 数学思维:注重的是总结归纳,形成规律和公式; 计算思维:则不同,我不需要下一步是怎么运行的,只要用代码表达好下一步的做法即可,然后再次调用,就是下一步了。(有误轻喷)
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
获取以逗号分隔的多个数据输入(输入为一行),计算基本统计值(平均值、标准差、中位数)
除中位数外,其他输出保留小数点后两位。
- def getNum(): #获取用户不定长度的输入
- s = input()
- ls = list(eval(s))
- return ls
- def mean(numbers): #计算平均值
- sums = 0
- for i in numbers:
- sums += i
- return sums / len(numbers)
- def dev(numbers, mean): #计算标准差
- sdev = 0.0
- for num in numbers:
- sdev = sdev + (num - mean)**2
- return pow(sdev / (len(numbers)-1), 0.5)
- def median(numbers): #计算中位数
- () #默认是升序,可以使用reverse = True 变成降序
- size = len(numbers)
- if len(numbers) % 2 == 0:
- med = (numbers[(size//2)] + numbers[size//2 - 1])/2
- else:
- med = numbers[size//2]
- return med
- n = getNum() #主体函数
- m = mean(n)
- print("平均值:{:.2f},标准差:{:.2f},中位数:{}".format(m,dev(n,m),median(n)))
-

也是课堂所讲不赘述啦~
- def getText():
- txt = open("", "r",encoding = 'utf-8').read()
- txt = txt.lower()
- for i in '!"#$%&()*+,-./:;<=>?@[\]^_‘{|}~':
- txt = txt.replace(i,' ') #将文本中的其他字符换成空格
- return txt
- hamlet = getText()
- counts = {} #命名一个字典
- words = hamlet.split()
- for i in words:
- counts[i] = (i,0)+1
- ls = list(counts.items()) #获取字典counts的所有键以及对应的值并转化成列表
- (key=lambda x:x[1],reverse = True) #以列表每个元素的第二个为准,进行降序排序
- for i in range(10):
- word,count = ls[i]
- #print('输出排名前10的词语:{0:<10}:{1:>3}'.format(word,count))
- print(word)

呃这个也可以照抄
- s = '''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖
- 杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙
- 金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍
- 鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰
- 阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰
- 乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王
- 忽必烈 慕容复 张三丰 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正
- 李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复
- 逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣
- 洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复
- 黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄
- 张三丰 令狐冲 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫
- 洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈
- 完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱
- 郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲
- 谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉
- 双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏
- 逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄'''
- spe = set(s.split())
- print(len(spe))

描述 读入一个字典类型的字符串,反转其中键值对输出。 即,读入字典key:value模式,输出value:key模式。 输入格式 用户输入的字典格式的字符串,如果输入不正确,提示:输入错误。 输出格式 给定字典d,按照print(d)方式输出 这个有意思,才知道字典可以直接用for循环调用,而且调用的是“键”的的值,相当于range()的数字:
- s = input()
- try:
- e = {}
- d = eval(s)
- for k in d: # k 就是对应字典的“键”
- e[d[k]] = k
- print (e)
- except:
- print('输入错误')
附件是《沉默的羔羊》中文版内容,请读入内容,分词后输出长度大于等于2且出现频率最多的单词。 如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词。
- import jieba
- goattxt = open('沉默的羔羊.txt','r',encoding = 'utf-8')
- silencetxt = (())
- sls = {}
- for k in silencetxt:
- if len(k) < 2:
- continue
- else:
- sls[k] = (k,0) + 1
- maxc = 0
- maxw = ''
- for k in sls:
- if sls[k] > maxc:
- maxc = sls[k]
- maxw = k
- elif sls[k] == maxc and k > maxw:
- maxw = k
- print(maxw)
- goattxt.close()

此处没了sort,却使用了if条件,也是可以达到sort的目的
打印输出附件文件的有效行数,注意:空行不计算为有效行数。
- txt = open('','r',encoding = 'utf-8')
- count=0
- for line in txt:
- line = line.strip('\n')
- if len(line) == 0:
- continue
- count += 1
- print('共{}行'.format(count))
统计附件文件的小写字母a-z的字符分布,即出现a-z字符的数量,并输出结果。 同时请输出文件一共包含的字符数量。 注意输出格式,各元素之间用英文逗号(,)分隔。 答案可能包含a-z共26个字符的分布,如果某个字符没有出现,则不显示,输出顺序a-z顺序。
- txt = open('','r',encoding = 'utf-8').read()
- count = 0
- d = {}
- #给a-z字母创建好字典
- for i in range(26):
- d[chr(ord('a')+i)] = 0
- #遍历文件内的每一个字符,跟生成好的26个字母字典匹配,有就加1
- for line in txt:
- for n in line:
- d[n] = d.get(n,0) + 1
- count += 1
- print('共{}字符'.format(count),end="") #不换行
- for i in range(26):
- if d[chr(ord('a')+i)] != 0:
- print(',{}:{}'.format(chr(ord('a')+i),d[chr(ord('a')+i)]),end='')
统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。
- fo = open('')
- files = fo.readlines()
- s = set(files)
- for i in s:
- files.remove(i)
- t = set(files)
- print('共{}独特行'.format(len(s)-len(t)))
啊,这里我理解错了,这题的意思是输出完全不同的行数,有相同的行的要删除,所以只是用集和只是输出了没有重复的行数,但是重复的行并没有删除,所以遍历集和s,然后在总文件files删除集和s里面的值,然后得到的是重复的行,然后将重复的行进行集和处理,求出有重复行的行集和“t”
附件是一个CSV文件,请将每行按照列逆序排列后输出,不改变各元素格式(如周围空格布局等)。
- fo = open('')
- fo = fo.readlines()
- for line in fo:
- line = line.replace('\n','')
- line = line.split(',')
- ls = line[::-1]
- print(','.join(ls))
附件是一个CSV文件,其中每个数据前后存在空格,请对其进行清洗,要求如下: (1)去掉每个数据前后空格,即数据之间仅用逗号(,)分割; (2)清洗后打印输出。
- datax = open('')
- datatxt = ()
- datatxt = datatxt.replace(' ','')
- print(datatxt)
如有侵权请联系我删除哈。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。