大一python实验答案_20192114 《Python程序设计》实验四报告

20192108《Python程序设计》实验四报告

课程:《Python程序设计》

班级: 1921

学号:20192114

实验教师:王志强

实验日期:2020年6月13日

必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。

课代表和各小组负责人收集作业(源代码、视频、综合实践报告)

(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分

(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。10分。

(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。5分

2. 实验过程及结果

前几天TapTap上2048极速版排行榜登顶,我决定用python编写一个2048小游戏

实验过程

1.先导入所需的库

curses 用来在终端上显示图形界面

random 模块用来生成随机数

collections 提供了一个字典的子类 defaultdict。可以指定 key 值不存在时,value 的默认值。

import random

import curses

import collections

2.定义

定义

class Matrix(object)

class Grid(object)

3.设置

上下左右与得分

def getScore():

def left(self):

def right(self):

def up(self):

def down(self):

4.在终端上显示图形界面

并不会,寻求百度帮助

实验结果

1939662-20200614124748328-1007771775.png

完整代码如下

"""

作者:杜晨玄

文件名称:t04

时间:2020.6.13

2048

"""

from Tkinter import *

from random import randint

from random import choice

import tkMessageBox

class Grid(object):

def __init__(self, master=None, height=4, width=4, offset=10, grid_width=200, bg="#696969"):

self.height = height

self.width = width

self.offset = offset

self.grid_width = grid_width

self.bg = bg

self.canvas = Canvas(master, width=self.width*self.grid_width + 2*self.offset,height=self.height*self.grid_width+2*self.offset, bg=self.bg)

self.initial()

def initial(self):

for i in range(0,4):

for j in range(0,4):

x = i * self.grid_width + self.offset

y = j * self.grid_width + self.offset

self.canvas.create_rectangle(x+10, y+10, x + self.grid_width-10, y + self.grid_width-10, fill="#808080",outline=self.bg)

self.canvas.pack(side=RIGHT, fill=Y)

def draw(self, pos, color, text):

x = pos[0] * self.grid_width + self.offset

y = pos[1] * self.grid_width + self.offset

self.canvas.create_rectangle(x+10, y+10, x + self.grid_width-10, y + self.grid_width-10, fill=color, outline=self.bg)

ft1 = ('Comic Sans MS', 50, "bold")

self.canvas.create_text(pos[0] * 200 + 110, pos[1] * 200 + 110, text=text, font=ft1)

class Matrix(object):

def __init__(self, grid):

self.grid = grid

self.matrix = [[0 for i in range(4)] for i in range(4)]

self.matrix_o = [[0 for i in range(4)] for i in range(4)]

self.vacancy = []

self.gamewin = False

self.color ={0:"#808080", 2:"#FFFACD", 4:"#F5DEB3", 8:"#F0E68C", 16:"#FFFF00", 32:"#FFD700", 64:"#FFA500", 128:"#FF8C00",

256:"#CD5C5C", 512:"#FF6347", 1024:"#FF0000", 2048:"#00FFFF"}

def initial(self):

self.matrix = [[0 for i in range(4)] for i in range(4)]

self.void()

self.generate()

self.generate()

self.draw()

self.gamewin = False

for i in range(0, 4):

for j in range(0, 4):

self.matrix_o[i][j] = self.matrix[i][j]

def draw(self):

for i in range (0, 4):

for j in range (0, 4):

pos = (i, j)

text = str(self.matrix[i][j])

color = self.color[self.matrix[i][j]]

self.grid.draw(pos, color, text)

def void(self):

self.vacancy = []

for x in range(0,4):

for y in range(0,4):

if self.matrix[x][y] == 0:

self.vacancy.append((x,y))

return len(self.vacancy)

#生成2或4

def generate(self):

pos=choice(self.vacancy)

if randint(0,5)==4:

self.matrix[pos[0]][pos[1]] = 4

else:

self.matrix[pos[0]][pos[1]] = 2

del self.vacancy[self.vacancy.index((pos[0], pos[1]))]

#左移

def up(self):

ss = 0

for i in range(0, 4):

for j in range(0, 3):

s = 0

if not self.matrix[i][j] == 0:

for k in range(j + 1, 4):

if not self.matrix[i][k] == 0:

if self.matrix[i][j] == self.matrix[i][k]:

ss = ss + self.matrix[i][k]

self.matrix[i][j] = self.matrix[i][j] * 2

if self.matrix[i][j] == 2048:

self.gamewin = True

self.matrix[i][k] = 0

s = 1

break

else:

break

if s == 1:

break

for i in range(0, 4):

s = 0

for j in range(0, 3):

if self.matrix[i][j - s] == 0:

self.matrix[i].pop(j - s)

self.matrix[i].append(0)

s = s + 1

return ss

#右移

def down(self):

for i in range(0, 4):

self.matrix[i].reverse()

ss = self.up()

for i in range(0, 4):

self.matrix[i].reverse()

return ss

#上移

def left(self):

ss = 0

for i in range(0, 4):

for j in range(0, 3):

s = 0

if not self.matrix[j][i] == 0:

for k in range(j + 1, 4):

if not self.matrix[k][i] == 0:

if self.matrix[j][i] == self.matrix[k][i]:

ss = ss + self.matrix[k][i]

self.matrix[j][i] = self.matrix[j][i] * 2

if self.matrix[j][i] == 2048:

self.gamewin = True

self.matrix[k][i] = 0

s = 1

break

else:

break

if s == 1:

break

for i in range(0, 4):

s = 0

for j in range(0, 3):

if self.matrix[j-s][i] == 0:

for k in range(j-s, 3):

self.matrix[k][i] = self.matrix[k+1][i]

self.matrix[3][i] = 0

s = s+1

return ss

#下移

def right(self):

ss = 0

for i in range(0, 4):

for j in range(0, 3):

s = 0

if not self.matrix[3-j][i] == 0:

k = 3-j-1

while k >= 0:

if not self.matrix[k][i] == 0:

if self.matrix[3-j][i] == self.matrix[k][i]:

ss = ss + self.matrix[k][i]

self.matrix[3-j][i] = self.matrix[3-j][i] * 2

if self.matrix[3-j][i] == 2048:

self.gamewin = True

self.matrix[k][i] = 0

s = s+1

break

else:

break

k = k -1

if s == 1:

break

for i in range(0, 4):

s = 0

for j in range(0, 3):

if self.matrix[3-j+s][i] == 0:

k = 3-j+s

while k > 0:

self.matrix[k][i] = self.matrix[k-1][i]

k = k-1

self.matrix[0][i] = 0

s = s+1

return ss

class Game(Frame):

def __init__(self, master):

Frame.__init__(self, master)

self.grid = Grid(master)

self.matrix = Matrix(self.grid)

self.score = 0

self.status = ['run', 'stop']

self.grid.canvas.bind_all("", self.key_release)

self.m = StringVar()

self.ft1 = ('Times New Roman', 40, "bold")

self.m1 = Message(master, textvariable=self.m, aspect=5000, font=self.ft1, bg="#696969")

self.m1.pack(side=LEFT, fill=Y)

self.m.set("Score:"+str(self.score))

self.initial()

def initial(self):

self.score = 0

self.m.set("Score:"+str(self.score))

self.matrix.initial()

def key_release(self, event):

key = event.keysym

if key == "Up":

ss = self.matrix.up()

self.run(ss)

elif key == "Down":

ss = self.matrix.down()

self.run(ss)

elif key == "Left":

ss = self.matrix.left()

self.run(ss)

elif key == "Right":

ss = self.matrix.right()

self.run(ss)

def run(self, ss):

if not self.matrix.matrix == self.matrix.matrix_o:

self.score = self.score + int(ss)

self.m.set("Score:" + str(self.score))

if self.matrix.gamewin == True:

self.matrix.draw()

message = tkMessageBox.showinfo("芜湖,你就是龙!", "你的分数: %d" % self.score)

if message == 'ok':

self.initial()

else:

self.matrix.void()

self.matrix.generate()

for i in range(0, 4):

for j in range(0, 4):

self.matrix.matrix_o[i][j] = self.matrix.matrix[i][j]

self.matrix.draw()

else:

v = self.matrix.void()

if v < 1:

message = tkMessageBox.showinfo("gg", "你的分数: %d" % self.score)

if message == 'ok':

self.initial()

if __name__ == '__main__':

root = Tk()

game = Game(root)

game.mainloop()

码云链接如下

运行结果如图

3. 实验过程中遇到的问题和解决过程

问题1:windows系统在安装curses库时,使用conda或者pip安装,总是失败

问题1解决方案:百度

问题2:运行显示Redirection is not supported.

问题2解决方案:百度

问题3:图形界面不会搞

问题3解决方案:百度,从github找了几个参考

其他(感悟、思考等)

这学期同时学c和python,一开始有点混乱,但是后面就好起来了,c语言的文件操作和python的差不多,很有帮助

网上有很多python的资源这对于学习python帮助很大,老师的讲解也十分到位、清晰

参考资料

个人博客 jerwang.cn

标签:20192114,matrix,Python,self,ss,range,grid,程序设计,def

来源: https://www.cnblogs.com/20192114dcx/p/13124436.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python大一期末考题库是指一个包含大一学生期末考试中所涉及的Python编程题目集合。根据试题分布,该题库通常包含多个难度级别和不同类型的题目。 这份大一期末考题库的目的是测试学生对Python编程语言的掌握程度。题目内容涵盖了Python基础语法、变量、数据类型、控制结构、函数、文件操作等方面的知识点。通过解答这些题目,学生能够巩固对Python编程语言的理解并提高编程能力。 这份题库的题目设计通常包含一些简单的考察基础概念的选择题,例如Python中的数据类型、变量赋值等操作;还有一些需要学生编写代码的编程题,例如使用循环结构实现某种算法、使用函数实现特定功能等等。 通过解答这些题目,学生能够培养对问题分析和解决的能力,提升编程思维和逻辑思维能力。同时,题目的难度也会逐渐增加,以激发学生的学习兴趣和挑战自我。 总而言之,Python大一期末考题库是一份集合了大量与Python编程相关的题目,旨在帮助学生巩固基础知识、提高编程能力,并培养问题解决能力和思维能力的重要教学资料。 ### 回答2: Python大一期末考题库是指在大一期末考试中出现的关于Python编程语言的题目集合。这些题目旨在考察学生对Python语法、逻辑思维以及程序设计的理解与掌握程度。 题库中的题目类型包括但不限于选择题、填空题、编程题等。选择题主要考察对Python语言基础知识的掌握,如数据类型、控制流程、函数等;填空题则要求学生完善给定的Python代码片段,考察对语法规则和函数使用的理解;编程题通常是给出一个具体问题,要求学生设计、实现一个能解决问题的Python程序。 在准备这个考题库的过程中,考题的设计应当考虑到学生的学习目标和教学大纲的内容。题目难易程度要适中,既能考察基础知识掌握的程度,又能刺激学生思考和动手解决实际问题的能力。 学生在面对这个考题库时,可通过复习相关教材和课堂笔记,进行实践编程和解题练习,参加相关讨论和交流,以强化对Python编程的理解和应用。 综上所述,Python大一期末考题库是一份用来考察学生Python编程能力和理解程度的题目集合,旨在促进学生对Python语言的掌握和应用能力的提升。学生应结合自己的学习进度和能力,积极准备并应对考试,以取得好成绩。 ### 回答3: Python大一期末考题库涵盖了Python编程语言的各个方面,旨在考察学生对Python基础知识的掌握和应用能力。以下是一个可能的题库构成: 1. 请解释Python中的变量和数据类型,并举例说明。 变量是用来存储数据的容器,可以通过赋值来给变量赋予不同的值。Python中常见的数据类型包括整数、浮点数、字符串、布尔值和列表等。例如,可以将整数赋给一个名为"age"的变量:age = 18。 2. 解释Python中的条件语句和循环语句,给出实例。 条件语句用于根据某个条件的真假来执行相应的代码块。常见的条件语句包括if语句和if-else语句。例如,判断一个数是否为正数: ``` num = 10 if num > 0: print("该数为正数") ``` 循环语句用于重复执行一段代码块。Python中常见的循环语句有for循环和while循环。例如,使用for循环打印1到10的整数: ``` for i in range(1, 11): print(i) ``` 3. 请编写一个函数,计算两个数的和,并在调用函数时传递参数。 ```python def add_numbers(num1, num2): sum = num1 + num2 return sum result = add_numbers(5, 3) print(result) # 输出结果为8 ``` 4. 请解释Python中的模块和函数,并给出实例。 模块是一个包含Python代码的文件,用于组织和重用代码。Python的标准库中提供了许多有用的模块,例如math模块用于数学运算。可以使用import语句导入模块,并调用模块中的函数。例如,使用math模块计算平方根: ```python import math result = math.sqrt(25) print(result) # 输出结果为5.0 ``` 函数是一段可重复使用的代码块,用于完成特定任务。函数可以接受参数,并返回结果。例如,编写一个函数计算两个数的平方和: ```python def square_sum(num1, num2): sum = num1 ** 2 + num2 ** 2 return sum result = square_sum(3, 4) print(result) # 输出结果为25 ``` 通过上述题库的考察,学生可以对Python的基础知识有一个全面的了解,并通过实际编程的练习来加深对Python编程语言的理解与应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值