[SakuraiYo][軟工做業(2)]硬幣遊戲—— 代碼分析與改進

做業目標html

  • Python 程序閱讀理解
  • 學習Python 編碼風格指南中譯版(Google SOC), 改進Python程序
  • 如何設計遊戲規則,使得慈善事業可持續。 地鐵口放置硬幣箱(初始值500硬幣),顧客可取、可放。請設計一組規則,使得該錢箱永遠有錢取(儘可能符合實際)
  • 參考:地鐵口錢箱
  • 截至日期:做業佈置一週內

做業過程python

step 1: fork 老師的倉庫

+硬幣遊戲:http://git.oschina.net/juking2017/Game.git 將其 fork 到你的碼雲倉庫。git

step2:clone 到本地,修改後 push 到你的遠端倉庫

  • 將你的倉庫Game.git clone到本地, 運行Python 程序,截圖。

①clone過程算法

②pip安裝及相關包下載安裝express

③使用IDLE打開clone到本地的文件GameMain.py並運行apache

 

①空格: 在行內吝嗇地使用:在圓括號、方括號、大括號裏面不要加空格。app

                                                            在逗號、分號、冒號前面不要加空格。逗號、分號、冒號後面必須加空格,除非那是行尾。less

                                                            在表示參數、列表、下標、分塊開始的圓括號/方括號前面不要加空格。dom

                                                            在二元運算符兩邊各加一個空格,包括:賦值(=)、比較(==、<、>、!=、<>、<=、>=、in、not in、is、is not)、學習

                                                                以及布爾運算符(and、or、not)。

                                                            等號(「=」)用於指名參數或默認參數值時,兩邊不要加空格。

對此進行修改,形如此類賦值(=)兩邊各加一個空格,以此類推。

pychecker:確保在代碼上執行 pychecker。

                              你能夠設置一個名爲 __pychecker__ 的模塊級別變量來適當禁用某些警告。好比:__pychecker__ = 'no-callinit no-classattr'

異常處理:異常處理是很 Pythonic 的,所以咱們固然贊成用它,但只是在符合如下特定條件時:

                             要像這樣拋出異常:raise MyException("Error message") 或者 raise MyException,而不要用雙參數的形式(raise MyException, "Error message") 或者 已廢棄                                  的基於字符串的異常(raise "Error message")。

                             模塊和包應該定義本身的特定領域的基礎異常類,並且這個類應該繼承自內置的 Exception類。這種用於一個模塊的基礎異常應該命名爲 Error。

                             class Error(Exception):
                                  """Base exception for all exceptions raised in module Foo."""
                                   pass
④註釋:Doc strings:
                                                    

⑤模塊頭及做者信息:

                                               

 

⑥另外對縮進及空行進行必定的優化。

 

 

  • 【選作】提出遊戲規則修改(優化)建議,並修改程序,運行截圖(用於寫博客)。
  • 將你的修改commit 並 push 到你遠端的倉庫。git 命令可參考 附加題2

step3: 寫博客。

①說明你的遊戲規則,並陳述你(慈善長久不衰)的理由, 附上截圖。

1.在地鐵口放置一內置500枚硬幣的錢箱

2.過路人若須要可從錢箱中取走1~3枚硬幣,若不足所需,則取光,取錢傾向多取。

3.善良的人會向錢箱中放置1枚硬幣,放錢傾向少放。

(一)若改變初始硬幣數爲700

(二)改變Threshold爲4.5

(三)改變Max_TakeCoin爲5

由上面三種狀況能夠得出,原始代碼的遊戲規則仍是很符合慈善經久不衰的宗旨的。

 

附:

程序代碼

#!/usr/bin/env python3
# -*- coding: cp936 -*-
#
# Copyright [current year] the Melange authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


__authors__ = [
# 請按照姓氏字母順序排列:
'"Han BingJie" <EO353998_603@126.com>', # 應提供電子郵件地址
]


# -*- 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 = 3.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()


__pychecker__ = 'no-callinit no-classattr'


class Error(Exception):
"""Base exception for all exceptions raised in module Foo."""
pass

 

遠端倉庫的連接:https://gitee.com/EO353998/Game

相關文章
相關標籤/搜索