北京科技大学python(选修课)作业

初学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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值