美好的一天:)
所以白天,我决定做一个赌博模拟。我正在测试一个失败的赌博策略(所以如果你尝试尝试我的方法,我的你)
让我展示我的代码,然后看看发生的整个事情。
from random import randint
winningNumber=0
bankroll=5000
testCase=1
betLevel=0
bettingLevel=[1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987]
town=[]
bet=0
#----------------------------
my_file= open("output.txt","w")
my_file.write(" # Bet Number Outcome bankroll "+"\n")
def startTheSimulation():
print "OK"
for i in range(100):
if bankroll==0:
break
global betLevel
if bankroll < bettingLevel[betLevel]:
betLevel=0
bet= bettingLevel[betLevel]
print "betlevel",betLevel
print "bet",bet
winningNumber= randint(0,36)
print "winningnumber",winningNumber
if winningNumber== 4:
win(bet)
else:
lose(bet)
def win(inbox):
global bankroll
cow= inbox*35
bankroll+=cow
print "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
print "bankroll",bankroll
town=[testCase,bet,winningNumber,"WIN",bankroll]
print town
betLevel=0
writing()
def lose(inbox):
global bankroll
global betLevel
wow= inbox
bankroll-=wow
town=[testCase,bet,winningNumber,"LOSE",bankroll]
betLevel+=1
if betLevel==16:
betLevel=15
writing()
def writing():
global testCase
testCase+=1
print "Hey!"
my_file.write(" ".join(town)+"\n")
startTheSimulation()
my_file.write("On all betting, player bet single bet on one number, which is number 4. How money money bet on number for is indicated.")
my_file.close()
我的投注系统很奇怪。它的工作原理类似于鞅投注系统,但我的下一个赌注不是加倍,而是基于斐波那契数列。
参数betLevel用于决定我应该下注多少。 bettingLevel 显示斐波那契序列列表。
麻烦来了
问题#1: 我的输出包含空行
所需的输出文件是这个
& Bet Number Outcome bankroll
# 100 lines of information
On all betting, player bet single bet on one number, which is number 4. How money money bet on number for is indicated.
但是,我反过来得到了这个
& Bet Number Outcome bankroll
# 100 BLANK LINES
On all betting, player bet single bet on one number, which is number 4. How money money bet on number for is indicated.
我的调试过程: 我实际上打印了列表城镇。列表是否已满(非空)。没有其他改进。
问题#2:(通过使用带参数的函数解决。) 我的银行存款没有更新。
我的调试过程: 我发现了问题所在。
注意 win 函数。当我打印 (int(35)*int(bet)) 时。结果返回0,导致资金不动。 然而 当我在 startTheSimulation() 函数中打印“bet”,bet 时,它会打印正确的数字。我被困在这里了。
<小时/>这是我的第二大问题。如有任何帮助,我们将不胜感激。
PS:我使用全局来避免 UnBoundLocalError PPS:我使用Python 2.7.6
最佳答案
对于一个相当简单的过程来说,你的逻辑似乎相当复杂。另外,您编写了诸如 int(35)
之类的内容,这告诉我您刚刚从另一种语言(也许是 IDL?)转向 Python。
如果您将此作为学习练习,我可以为您提供一些有关如何解决该问题的提示:
首先,全局变量几乎总是一个坏主意。如果您需要使用它,那么您可能做错了什么。共享此信息的正确方法是创建一个类。像这样的东西(非常不完整)
class Simulation(object):
def __init__(self, bankroll):
self.betlevel = 0
self.betting = [1, 1, 2, 3, 5] # You should actually generate this on the fly
self.bankroll = bankroll
self.outputfile = open('filename.txt', 'w')
def do_bet(self):
self.bet = self.betting[self.betlevel]
luckynumber = random.randint()
mynumber = random.randint()
if mynumber == luckynumber:
self.win()
def win(self):
self.bankroll -= self.bet
self.outputfile.write('I won:' + str(self.bet))
这个想法是类方法可以访问类属性,因此您完全避免了全局变量,并减少了错误的可能性。
尝试完成实现。一旦你有了它,你可以再次发布它,我们可以看看是否有改进。
关于python - 输入/输出 python : Handling output and variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220851/