zoukankan      html  css  js  c++  java
  • 软工作业: (2)硬币游戏—— 代码分析与改进

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

    一、作业要求

    1、Python 程序阅读理解

    2、学习Python 编码风格指南中译版(Google SOC)(http://blog.csdn.net/damotiansheng/article/details/43867175),改进Python程序

    3、设计游戏规则,使得慈善事业可持续。 地铁口放置硬币箱(初始值500硬币),顾客可取、可放。请设计一组规则,使得该钱箱永远有钱取(尽量符合实际)

      注:参考http://www.cnblogs.com/juking/p/7273043.html

    二、作业步骤

    step 1: fork 老师的仓库

    直接点击页面右上角的fork后,结果如图1所示:

    图1 fork 老师的仓库

     

    step2:clone 到本地并运行Python 程序

    1、首先百度搜索并下载Python,在安装时要特别注意安装向导界面最下方的复选框需要打钩,以完成环境变量配置,安装及运行结果如图2、3所示。

    图2 安装截图

    图3 环境变量

    2、双击运行IDLE,单击Flie —open,自己之前克隆下的Game里的SRC文件夹中的GameMain.py ,尝试运行,结果如图4、5所示

    图4 打开文件

    图5 运行错误

    3、为解决以上运行错误,下载并安装安装pip,具体参考(http://blog.csdn.net/qy20115549/article/details/5217

      cmd命令行依次键入:

    1 C:Users刘奔>AppDataLocalProgramsPythonPython36Scriptseasy_install.exe
    2 C:Users刘奔>AppDataLocalProgramsPythonPython36Scriptspip.exe

      执行结果如图6所示

    图6 安装pip 

    4、安装pip后运行依旧出错,原因在于文件中包含了两个第三方库,直接运行会导致出错,我们在cmd中利用pip指令进行python的第三方库的安装

      cmd命令行依次键入:

    1 pip install numpy
    2 pip install matplotlib

      执行结果如图7所示

    图7 第三方库安装

    5、再次尝试运行GameMain.py,结果如图8、9所示

    图8 GameMain.py运行结果(1)

     

    图9 GameMain.py运行结果(2)

    6、进行代码规范化,依据编码风格,最基本最简单的要求是对缩进的要求,规范化后代码如下:

     1 #!/usr/bin/env python3
     2 # -*- coding: utf-8 -*-
     3 import random
     4 import numpy as np
     5 import matplotlib.pyplot as plt
     6 from matplotlib import mlab
     7 from matplotlib import rcParams
     8 
     9 
    10 # 初始参数设置
    11 Box_sum =500         # 箱子中剩余硬币数量,初始值
    12 People_Flag= random.randint(1,10)       # flag 模拟人们取硬币或放硬币的概率 1~10 
    13 Threshold = 2.5        #  阈值,可调: 1~Threshold 为取硬币,Threshold+1 ~10 为放硬币
    14 Max_TakeCoin=5       #  最多可取硬币数量
    15 Max_DonateCoin=1     #  最多可放硬币数量
    16 
    17 delata=0                # 取、放硬币数量
    18 Box_per_remain= [500]   # 每次箱子中硬币余额,list
    19 
    20 
    21 # 算法模拟
    22 for x in range(1,5000):  # 循环次数表示参与人数
    23     flag= random.randint(1,10) # flag 模拟人们取硬币或放硬币的概率
    24     if flag > Threshold:
    25         # 放硬币
    26         delta=random.randint(1,Max_DonateCoin)
    27         delta=random.randint(1,delta)          # 模拟了人们捐款可能性,有偏少的倾向
    28         Box_sum =Box_sum + delta
    29         Box_per_remain.append(Box_sum)
    30     else:
    31         # 取硬币
    32         delta=random.randint(1,Max_TakeCoin)
    33         delta=random.randint(delta,Max_TakeCoin) # 模拟了人 取硬币的可能性,偏多的倾向
    34         if Box_sum < delta:
    35             Box_sum =0                           # 如果不够取,则取光
    36         else:
    37             Box_sum =Box_sum - delta
    38         Box_per_remain.append(Box_sum)
    39  
    40 print(Box_per_remain)
    41  
    42  
    43 # 绘图区
    44 fig = plt.figure()
    45  
    46 ## 1. 标题、X、Y 轴 label
    47 plt.title('Subway testing')
    48 plt.xlabel('Time')
    49 plt.ylabel('Money remained')
    50  
    51 x= np.arange(len(Box_per_remain))
    52  
    53 ## 2. data
    54  
    55 plt.plot(x,Box_per_remain,color='r')
    56 plt.bar(x,Box_per_remain,alpha=.5,color='g')
    57  
    58 plt.show()

     

    step3:修改参数设置改进方案并push至远端仓库

    1、修改阈值为3.5,最多可取硬币数为3,最多可放银币数为2

    1 old = 3.5        #  阈值,可调: 1~Threshold 为取硬币,Threshold+1 ~10 为放硬币
    2 Max_TakeCoin=3       #  最多可取硬币数量
    3 Max_DonateCoin=2     #  最多可放硬币数量

    2、修改后运行结果如图10所示

    图10 改进后执行结果

    3、push至远端仓库 https://gitee.com/Aaron17/Game(注:push时出错,选择上传)

  • 相关阅读:
    Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架
    Java高级特性 第10节 IDEA和Eclipse整合JUnit测试框架
    Java高级特性 第9节 Socket机制
    Java面向对象和高级特性 项目实战(一)
    Java高级特性 第8节 网络编程技术
    Java高级特性 第7节 多线程
    二十一、字符串类的创建
    二十二、经典问题解析二
    二十一、C++中的临时对象
    二十、对象的销毁
  • 原文地址:https://www.cnblogs.com/aaron20/p/7569492.html
Copyright © 2011-2022 走看看