2014-03-06 2 views
1

Хороший день :)I/O python: Обработка выходных данных и переменных

Итак, в течение дня я решил создать азартную игру. Я тестирую стратегию азартных игр (так что, если вы попытаетесь применить мой метод)

Позвольте мне показать мой код, а затем все, что произошло.

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 используется для определения того, сколько я должен ставить. Пакет ставок показывает список последовательности Fibonnaci.

Вот приходит беда

Trouble # 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: (Решается с помощью функции с аргументами.) Мой банковский рулон не обновляется.

Процесс отладки: Я понял проблему.

Обратите внимание на функцию выигрыша. Когда я печатаю (int (35) * int (ставка)). Оказывается, возвращается 0, в результате чего банкролл не движется. HOWEVER Когда я печатаю «ставку», делаю ставку в функции startTheSimulation(), он печатает правильный номер. Я застрял здесь.


Это моя самая большая проблема. Любая помощь приветствуется.

PS: Я использую глобального избежать UnboundLocalError PPS: Я использую Python 2.7.6

ответ

1

Ваша логика кажется довольно запутанным для довольно простой процесс. Кроме того, вы пишете такие вещи, как int(35), которые говорят мне, что вы только что пришли на Python с другого языка (возможно, IDL?).

Если вы используете это упражнение, чтобы узнать, что я могу дать вам несколько советов о том, как ее решить:

Прежде всего, глобальные переменные почти всегда плохая идея. Если вам нужно использовать один, вы, вероятно, делаете что-то неправильно. Правильный способ обмена этой информацией - создать класс. Что-то вроде этого (очень неполный)

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

Идея заключается в том, что методы класса имеют доступ к атрибутам класса, так что вы полностью избежать глобальных переменных, а также уменьшить вероятность ошибки.

Постарайтесь выполнить реализацию. После этого вы можете отправить его снова, и мы увидим, есть ли улучшения.

+0

Я решил вторую задачу (банкролл), используя параметры по Fuction, но не удается разрешить вывод. Я честно еще не изучил класс. Я постараюсь подойти к нему. BTW, пожалуйста, воздайте должное новому методу :) BTW, я пришел из AS3 – Realdeo

0

Trouble # 1: вы не установили town как глобальный, так что это будет печатать правильно:

town=[testCase,bet,winningNumber,"WIN",bankroll] 
print town 

, но в writing() методе town пуст, и вот почему вы получите 100 пустых строк

вот пример:

#global town #uncomment if you want to change "town" in "one()" 
    town = ["not", "changed", "town"] 
    def one(): 
     #global town #uncomment if you want to change "town" here 
     town = [1,"local", "town", True] 
     print "local -> ", town 
    def two(): 
     # you don't need "global town" here because you do not change it, you only use it 
     print town 

one() 
two() 

это выход:

local -> [1, 'local', 'town', True] 
['not', 'changed', 'town'] 

Проблема # 2: подобно тому, как неприятности # 1, в startTheSimulation(): вам нужно написать global bet, в противном случае bet не является локальной переменной и не получает изменилось, поэтому это 0 в методе win().

Те решения ваших проблем, но рассмотреть вопрос о создании класса, как @davidmh сказал ... глобальные переменные почти всегда плохая идея

+0

Спасибо за круглое решение. Мне сложно учиться в классе (к сожалению, у меня также было плохое время с классом в AS3). Еще раз спасибо! – Realdeo

Смежные вопросы