初学python,代码很烂,仅供参考
作业一:
海龟绘图
任选主题绘制一幅作品,在图上的合适位置给出图名、学生姓名和学号(注:不是仅列出姓名和学号)。
提交代码和运行效果截图或录屏视频(jpg, png, mp4, gif等)
可读性好,看代码能够理解绘图过程和效果
采用基于帧的动画上限10分(不考虑海龟自身动画),否则上限为9分。
禁止学术不端行为。
代码:
# coding=utf-8
import turtle
import turtle as t
import math
t.hideturtle()
t.speed(100)
t.pencolor("black")
def gotu(x, y):
t.penup()
t.goto(x, y)
t.pendown()
#学号名字
gotu(-100,-300)
t.write("U2021419xx",font=("微软雅黑",14,"normal"))
#篮球
t.penup()
t.home()
t.pendown()
gotu(-210,-230)
t.pensize(1)
t.pencolor("black")
t.fillcolor("orange")
t.begin_fill()
t.circle(80, 360)
t.end_fill()
gotu(-153,-207)
t.left(135)
t.forward(160)
gotu(-267,-207)
t.right(90)
t.forward(160)
t.penup()
t.home()
t.pendown()
gotu(-130,-150)
t.circle(80,-90)
t.penup()
t.home()
t.pendown()
gotu(-290,-150)
from turtle import*
for i in range(100):
right(1)
forward(1.2)
#头部形状
t.penup()
t.home()
t.pendown()
gotu(0,-200)
t.fillcolor("yellow")
t.begin_fill()
t.circle(200, 360)
t.end_fill()
#画眼睛
gotu(-30,0)
t.fillcolor("white")
t.begin_fill()
t.circle(50, 360)
t.end_fill()
gotu(70,0)
t.fillcolor("white")
t.begin_fill()
t.circle(50, 360)
t.end_fill()
gotu(0,50)
t.fillcolor("black")
t.begin_fill()
t.circle(8, 360)
t.end_fill()
gotu(90,50)
t.fillcolor("black")
t.begin_fill()
t.circle(8, 360)
t.end_fill()
#腮红
gotu(-120,-70)
t.fillcolor("red")
t.begin_fill()
t.circle(40, 360)
t.end_fill()
gotu(150,-70)
t.fillcolor("red")
t.begin_fill()
t.circle(40, 360)
t.end_fill()
#定义一个椭圆函数
def ellipse(x, y, theta, l, size=1, color='black'):
t.penup()
t.goto(x, y)
t.setheading(theta + 270)
t.pensize(size)
t.fillcolor(color)
t.pendown()
t.begin_fill()
a = 0.3
for i in range(120):
if 0 <= i < 30 or 60 <= i < 90:
a += l
t.lt(3)
t.fd(a-2)
else:
a -= l
t.lt(3)
t.fd(a)
t.penup()
t.end_fill()
#中分头
ellipse(-250,0,40,0.5,size = 3 ,color = "grey")
ellipse(280,55,140,0.5,size = 3 ,color = "grey")
#嘴巴
t.penup()
t.home()
t.pendown()
ellipse(-45,-48,-13,0.2,size = 3 ,color = "orange")
t.penup()
t.home()
t.pendown()
gotu(20,-50)
t.circle(200, -18)
t.penup()
t.home()
t.pendown()
gotu(20,-50)
t.circle(200, 18)
#背带裤
t.penup()
t.home()
t.pendown()
gotu(-145,-120)
t.fillcolor("black")
t.begin_fill()
t.forward(300)
t.right(60)
t.forward(150)
t.right(120)
t.forward(450)
t.right(120)
t.forward(150)
t.right(60)
t.end_fill()
t.forward(30)
t.pensize(8)
t.pencolor("white")
t.right(90)
t.forward(130)
t.penup()
t.home()
t.pendown()
gotu(125,-120)
t.right(90)
t.forward(130)
t.exitonclick()
作业二:
使用Python的海龟库完成小学数学题试卷的出题工作,要求:
(1)上半部分为题目,下半部分为答案。
(2)试题中,计算结果显示为方框。答案中,在方框中出现结果。题目和答案的顺序对应。
(3)题目每行3题,共5行。答案数量相同。
(4)题目随机生成。(建议使用random库中的sample, choice函数)
(5)不得有重复的题目(即两道题目的运算符相同、运算符左/右的操作数分别相同,结果也相同的题目)。
(6)题目分为加减乘除四类,运算过程和结果均为两位以内的整数(0到99)。
(7)完成上述代码功能(提交py代码),同时完成较为简单的软件设计文档(提交pdf即可),文档包括设计思路、关键代码解释、效果图等。
# coding=utf-8
import turtle as t
import random
t.setup(600,800)
t.hideturtle()
t.speed(100)
def gotu(x, y):
t.penup()
t.home()
t.goto(x, y)
t.pendown()
l=[]
gotu(-250,360)
t.write("试题", font=("微软雅黑", 14, "normal"))
gotu(-250,-50)
t.write("答案", font=("微软雅黑", 14, "normal"))
gotu(-250,350)
t.forward(500)
gotu(-250,-60)
t.forward(500)
for i in range(1,100):
l.append(i)
j=["*","/"]
k=["+","-"]
z=-250
x=300
gotu(z,x)
def get_express():
while 1 :
a = random.choice(l)
b = random.choice(l)
sign = random.choice(k)
if sign == '+':
ans = a + b
if sign == '-':
ans = a - b
if 0<ans<100:
t.write(a, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(25)
t.pendown()
t.write(sign, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(15)
t.pendown()
t.write(b, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(22)
t.pendown()
t.write("=", font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(18)
t.pendown()
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.penup()
t.forward(400)
t.pendown()
t.left(90)
t.penup()
t.forward(-65)
t.pendown()
t.write(a, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(25)
t.pendown()
t.write(sign, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(15)
t.pendown()
t.write(b, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(22)
t.pendown()
t.write("=", font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(16)
t.pendown()
t.write(ans, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(-2)
t.pendown()
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
break
else:
continue
def mul_div():
ans = random.choice(l)
sign = random.choice(j)
q = []
for i in range(1,ans):
if (ans%i)==0:
q.append(i)
a=random.choice(q)
b=ans/a
b=int(b)
if sign=="*":
t.write(a, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(25)
t.pendown()
t.write(sign, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(15)
t.pendown()
t.write(b, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(22)
t.pendown()
t.write("=", font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(18)
t.pendown()
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.penup()
t.forward(400)
t.pendown()
t.left(90)
t.penup()
t.forward(-65)
t.pendown()
t.write(a, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(25)
t.pendown()
t.write(sign, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(15)
t.pendown()
t.write(b, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(22)
t.pendown()
t.write("=", font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(16)
t.write(ans, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(-2)
t.pendown()
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
if sign=="/":
t.write(ans, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(25)
t.pendown()
t.write(sign, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(15)
t.pendown()
t.write(a, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(22)
t.pendown()
t.write("=", font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(18)
t.pendown()
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.penup()
t.forward(400)
t.pendown()
t.left(90)
t.penup()
t.forward(-65)
t.pendown()
t.write(ans, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(25)
t.pendown()
t.write(sign, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(15)
t.pendown()
t.write(a, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(22)
t.pendown()
t.write("=", font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(16)
t.write(b, font=("微软雅黑", 14, "normal"))
t.penup()
t.forward(-2)
t.pendown()
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
t.left(90)
t.forward(22)
def raa():
fns=random.randint(1,2)
if fns==1:
get_express()
if fns==2:
mul_div()
for r in range(5):
dis = -250
for i in range(3):
raa()
dis = dis + 180
gotu(dis, x)
x=x-50
gotu(z, x)
t.hideturtle()
t.exitonclick()
作业三:
代码行数统计
请完成代码行数统计软件,要求:
(1)读入某个指定路径的py文件(可以在程序中写为具体的文件路径,建议为你已经完成的某次作业的源代码文件)
(2)分析该源文件的总代码行数,纯注释的行数、空白行数、有效代码行(非空白、非纯注释)数、有效代码行的平均长度。
(3)分析该源文件中最大缩进层级、包含的if、for、while、try等语句的数量。
(4)分析该源文件中定义的函数定义,计算平均每个函数的平均代码行数。
(5)分析该源文件的定义的变量名,列出所有变量名,并计算变量名的平均长度。
(6)以上结果在终端上输出或写入某文本文件。
(7)完成上述代码功能(如果不能全部完成、那么可以仅完成一部分),同时完成软件设计文档(最终提交pdf即可),文档包括设计思路、关键代码解释、效果图等。
代码:
# coding=utf-8
import re
s = open("math.py","r",encoding="utf-8")
res=s.readlines()
print("总行数",len(res))
coun=0
numbe=0
tag=0
blank=0
str=0
hstr=0
if_num=0
for_num=0
while_num=0
try_num=0
max_s=0
pre_s=0
a={}
for li in res:
li = li.strip()
for i in li:
str += 1
if li.startswith('#'):
coun+=1
for i in li:
str -=1
if not li.split():
blank+=1
if re.match('if+.+:',li) :
if_num+=1
if re.match('for+.+:',li):
for_num+=1
if re.match('while+.+:',li):
while_num+=1
if re.match('try+.+:',li):
try_num+=1
if re.match('([a-zA-Z_]+)=', li):
temp=li.split('=')
a[temp[0]]=len(temp[0])
print("注释行数",coun)
print("空白行",blank)
num=len(res)-coun-blank
print("有效代码行",num)
print("平均代码长度",str/num)
print("if的数量",if_num)
print("for的数量",for_num)
print("while的数量",while_num)
print("try的数量",try_num)
for hli in res:
if re.match('def+.',hli):
tag=1
print("定义的函数",hli)
numbe+=1
continue
if hli.startswith(" "):
pre_s=1
if pre_s>max_s:
max_s=pre_s
if hli.startswith(" "):
pre_s=2
if pre_s>max_s:
max_s=pre_s
if hli.startswith(" "):
pre_s=3
if pre_s>max_s:
max_s=pre_s
if hli.startswith(" "):
pre_s=4
if pre_s>max_s:
max_s=pre_s
if hli.startswith(" "):
hli = hli.strip()
for i in hli:
if (tag==1):
hstr += 1
else :
tag=0
print("每个函数的平均代码行数",hstr/numbe)
print("最大缩进层级",max_s)
print("变量名和其字符数量")
print(a)
aver=0
div=0
for i in a:
div+=1
aver=aver+a.get(i)
print("平均变量长度",aver/div)
s.close()
作业四:
教师每次下发课件是PDF格式,由若干页(N页)横版的PPT组成,例如:
这样的格式不方便做笔记,于是你希望完成一个软件,将上述PDF文件转成下面的形式的PDF,共计N/4页(如不能整除则向上取整),每页的效果如下:
即每页(A4版面)左侧放置4版的课件(若不足4版则下部为空白),右侧放置多条记笔记的横线,右上方为条码,内容为自己的学号(略去学号中的字母,不足补零)。完成上述代码功能,同时完成j较为详细的软件设计文档(最终提交pdf即可),文档包括设计思路、关键代码解释、效果图等。
百度网盘
链接:https://pan.baidu.com/s/1TlG5LFlJulXNurCZm8_kRw
提取码:wrnr
作业五:
编写一个Python程序,实现下述Word/Excel文档的全文检索能力。
0. 支持图形用户界面QT/TKinter/WxWidgets等实现(若确实难以完成,可以基于命令行实现);
1. 用户输入给定的目录名以及后缀类型(如限定为.DOCX或.XLSX其一或两者);
2.用户输入待检索的关键词(如K);
3. 检索目录中(以及所有的各级子目录内)包含上述关键词的文件,以列表方式或树状方式列出满足条件的文件名及路径;
4. 可选项:支持PDF文档;支持中文检索;
5. 可选项:支持正则表达式检索;列出所有满足条件的文件名及匹配内容;
6. 可选项:支持文件过滤,例如可以仅检索创建于近5天的文件。
完成代码和文档,要求界面基于。文档内容较为详细,列出需求分析、概要设计、详细设计和实现、测试和展示等,预估文档长度大概在6页左右。提交代码和PDF格式的文档。
代码
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from os import listdir
from os.path import join,isfile,isdir
import re
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(557, 406)
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(70, 80, 191, 21))
self.lineEdit.setObjectName("lineEdit")
self.textbox= QtWidgets.QTextEdit(Form)
self.textbox.setGeometry(QtCore.QRect(70, 180, 431, 191))
self.textbox.setObjectName("textBox")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(340, 140, 61, 21))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(70, 50, 72, 15))
self.label.setObjectName("label")
self.lineEdit_2 = QtWidgets.QLineEdit(Form)
self.lineEdit_2.setGeometry(QtCore.QRect(70, 140, 113, 21))
self.lineEdit_2.setObjectName("lineEdit_2")
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(70, 120, 72, 15))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(200, 120, 72, 15))
self.label_3.setObjectName("label_3")
self.lineEdit_3 = QtWidgets.QLineEdit(Form)
self.lineEdit_3.setGeometry(QtCore.QRect(200, 140, 113, 21))
self.lineEdit_3.setObjectName("lineEdit_3")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "确定"))
self.label.setText(_translate("Form", "目录"))
self.label_2.setText(_translate("Form", "文件格式"))
self.label_3.setText(_translate("Form", "文件名称"))
self.pushButton.clicked.connect(self.oncalbutton)
def oncalbutton(self):
dirction = [self.lineEdit.text()]
l=[]
content = self.lineEdit_2.text()
contex = self.lineEdit_3.text()
while dirction:
current = dirction.pop(0)
for subPath in listdir(current):
path=join(current,subPath)
if isfile(path):
if path.endswith(content):
l.append(path)
elif isdir(path):
dirction.append(path)
l1=[]
for i in l:
if bool(re.search(contex,i)):
l1.append(i)
l2=' , '.join(l1)
print(l2)
self.textbox.setText(l2)
app=QtWidgets.QApplication(sys.argv)
mainwindow=QtWidgets.QMainWindow()
w=Ui_Form()
w.setupUi(mainwindow)
mainwindow.show()
sys.exit(app.exec())
课程报告(大作业):
使用爬虫下载免费视频(A站)
百度网盘
链接:https://pan.baidu.com/s/1LOaJtWgSTyqlxewybA8kYA
提取码:t4rj