2016-10-21 7 views
-1

Я пытаюсь создать игру ножниц для каменной бумаги, которая держит счет, но когда я запускаю эту программу, оценка сбрасывается каждый раз. Что мне нужно изменить, чтобы я мог правильно вести счет?Сканирующая бумага Ножницы для хранения бумаги

import random 

def rockPaperScissors(): 
    playerScore = 0 
    computerScore = 0 
    print "" 
    p = raw_input("Type 'r' for rock, 'p' for paper or 's' for scissors: ") 
    choices = ['r', 'p', 's'] 
    c = random.choice(choices) 
    print "" 
    print "Your move:", p 
    print "Computer's move:", c 
    print "" 
    if p == c: 
     print "Tie" 
    elif p == 'r' and c == 's': 
     playerScore += 1 
     print "You win" 
    elif p == 'p' and c == 'r': 
     playerScore += 1 
     print "You win" 
    elif p == 's' and c == 'p': 
     playerScore += 1 
     print "You win" 
    elif c == 'r' and p == 's': 
     computerScore += 1 
     print "You lose" 
    elif c == 'p' and p == 'r': 
     computerScore += 1 
     print "You lose" 
    elif c == 's' and p == 'p': 
     computerScore += 1 
     print "You lose" 
    else: 
     print "Try again" 
    print "" 
    print "Your score:", str(playerScore)+ ", Computer score:", str(computerScore) 

while True: 
    rockPaperScissors() 
+0

каждый раз, когда вы запускаете, как и при каждом запуске скрипта? –

+0

Предложение с того момента, когда я преподавал это задание: кодируйте варианты как целые числа 1, 2, 3. Тогда (r-c)% 3 легко указывает победителя, не имея предложений 7 if/else. – Prune

ответ

2

Вы вызываете функцию в цикле. Первое, что делает функция, это создать локальную переменную для оценки. Когда функция заканчивается, эта оценка отбрасывается. Он не сохраняется через несколько вызовов. Вы должны вернуть новый счет и присвоить новые значения счетчикам:

import random 

def rockPaperScissors(): 
    playerScore = 0 
    computerScore = 0 
    ... 
    return playerScore, computerScore 

player = 0 
computer = 0 

while True: 
    p, c = rockPaperScissors() 
    player += p 
    computer += c 
    print "Your score:", str(player)+ ", Computer score:", computer 
+0

Мне нравится это лучше, чем глобальное, но я думаю, вы должны передать накопленные баллы в функцию, чтобы каждый раз распечатывать кумулятивный результат (и не сбрасывать счеты вверху) – mitoRibo

+0

@rbierman - Хорошая точка; переместил оператор 'print' из функции. – TigerhawkT3

0

Каждый раз, когда вы запускаете функцию, вы сбрасываете счет. Определите computerScore и playerScore вне функции, тогда он будет поддерживать значения даже при многократном запуске функции. Использовать global для «импорта» глобальной переменной в область функций.

playerScore = 0 
computerScore = 0 

def rockPaperScissors(): 
    global playerScore 
    global computerScore 
    OTHER CODE 
+0

'global' совершенно не нужен для этого и страшный костыль, чтобы учиться. – TigerhawkT3

+0

Я бы рекомендовал использовать его в этом случае просто потому, что он демонстрирует, как работает python с переменными и областями. Возвращение значений было бы альтернативой, хотя это действительно не нужно для простого проекта, подобного этому. – NikxDa

+0

Я никогда не видел ни одного экземпляра, где 'global' - это правильный способ сделать что-то. – TigerhawkT3

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