1. 程式人生 > >軟工作業: (2)硬幣遊戲—— 代碼分析與改進

軟工作業: (2)硬幣遊戲—— 代碼分析與改進

style hold -a p s alpha .py get 倉庫 xlabel

軟工作業: (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\劉奔>AppData\Local\Programs\Python\Python36\Scripts\easy_install.exe
2 C:\Users\劉奔>AppData\Local\Programs\Python\Python36\Scripts\pip.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時出錯,選擇上傳)

軟工作業: (2)硬幣遊戲—— 代碼分析與改進