美好的一天 :)

因此,在白天,我决定进行赌博模拟。我正在测试一种失败的赌博策略(如果尝试使用我的方法,请尝试我的游戏)

让我展示我的代码,然后整个过程都发生了。

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()


我的投注系统很奇怪。它的工作方式类似于mar下注系统,但下一次下注不是基于斐波那契数列,而是使我的下注倍增。

参数betLevel用于确定我应该下注多少。 bettingLevel显示Fibonnaci序列的列表。

麻烦来了

问题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))


这个想法是类方法可以访问类属性,因此您完全避免了全局变量,并减少了出错的可能性。

尝试完成实施。有了它之后,您可以再次发布它,我们可以查看是否有改进。

10-06 07:01