2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

时间:2021-05-18 16:52:56

作业中的目的是:

  • Python 程序阅读理解
  • 改进Python程序
  • 如何设计游戏规则,使得慈善事业可持续。 地铁口放置硬币箱(初始值500硬币),顾客可取、可放。请设计一组规则,使得该钱箱永远有钱取(尽量符合实际)

step 1: fork 老师的仓库

+硬币游戏:http://git.oschina.net/juking2017/Game.git 将其 fork 到你的码云仓库。

2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

step2:clone 到本地,修改后 push 到你的远端仓库

在Python官网上下载Python并安装,打开Game,运行程序,发现缺少模块“numpy”。

2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

安装“numpy”:

 在https://pypi.python.org/pypi/numpy上下载numpy-1.13.1-cp36-none-win_amd64.whl,将文件放到python安装目录下的scripts文件夹中,打开cmd,输入命令pip3.6 install D:\python\anzhuang\Scripts\numpy-1.13.1-cp36-none-win_amd64.whl之后便出现如下提示:

2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

在python中输入import numpy

 2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

重新运行程序,出现问题并进行更改后,程序运行如下图。

 2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

打开cmd输入以下命令

 python -m pip install -U pip setuptools
python -m pip install matplotlib 

 2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

之后再运行MainGame.py文件,运行结果如下:

2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进。。。。。。

依据代码规范改进代码:

模块应该按照字母顺序排序,但所有以 from ... 开头的行都应该靠前,然后是一个空行,再然后是所有以 import ... 开头的行。以 import ... 开头的标准库和第三方库的 import 应该放在最前面,而且和其他分组隔开;

由于在二元运算符两边各加一个空格,包括:赋值(=)、比较(==、<、>、!=、<>、<=、>=、in、not in、is、is not)、以及布尔运算符(and、or、not),因此在二元运算符两边各加一个空格。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import mlab
from matplotlib import rcParams


# 初始参数设置
Box_sum = 500 # 箱子中剩余硬币数量,初始值
People_Flag = random.randint(1,10) # flag 模拟人们取硬币或放硬币的概率 1~10 
Threshold = 2.5 # 阈值,可调: 1~Threshold 为取硬币,Threshold+1 ~10 为放硬币
Max_TakeCoin = 5 # 最多可取硬币数量
Max_DonateCoin = 1 # 最多可放硬币数量

delata = 0 # 取、放硬币数量
Box_per_remain = [500] # 每次箱子中硬币余额,list


# 算法模拟
for x in range(1,5000): # 循环次数表示参与人数
flag= random.randint(1,10) # flag 模拟人们取硬币或放硬币的概率 
if flag > Threshold:
# 放硬币
delta = random.randint(1,Max_DonateCoin)
delta = random.randint(1,delta) # 模拟了人们捐款可能性,有偏少的倾向
Box_sum = Box_sum + delta
Box_per_remain.append(Box_sum)
else:
# 取硬币
delta = random.randint(1,Max_TakeCoin)
delta = random.randint(delta,Max_TakeCoin) # 模拟了人 取硬币的可能性,偏多的倾向
if Box_sum < delta:
Box_sum = 0 # 如果不够取,则取光
else:
Box_sum = Box_sum - delta
Box_per_remain.append(Box_sum)

print(Box_per_remain)


# 绘图区
fig = plt.figure()

## 1. 标题、X、Y 轴 label
plt.title('Subway testing')
plt.xlabel('Time')
plt.ylabel('Money remained')

x= np.arange(len(Box_per_remain))

## 2. data

plt.plot(x,Box_per_remain,color='r')
plt.bar(x,Box_per_remain,alpha=.5,color='g')

plt.show()

该游戏规则为:初始箱子中剩余硬币数量为500,人们取硬币或放硬币的概率为1-10,阈值为2.5,最多可取硬币数量为5,最多可放硬币数量为1。当人们取硬币或放硬币的概率大于2.5时,人们捐款,捐款数为1,箱子中的硬币数量为500加上捐款数;当概率小于等于2.5时,人们取硬币,取硬币数为1-5之间的随机数,当箱子中的硬币总数小于人们所取硬币数量时,取光箱子中的硬币,当箱子中的硬币数量大于等于人们所取硬币数量时,箱子中剩余硬币数量为箱子中的硬币总数减去被人们取走的硬币数量。

 远端仓库链接:https://gitee.com/HaoHanYinHe/Game/blob/master/GameMain.py