2014-05-30 2 views
0

Это небольшой эксперимент, который я пытаюсь изучать Python. Это означает, что это слот-автомат на основе текстовых файлов, где 3 слота «прокатываются», и один из 4 возможных вариантов выбирается для каждого . Если совпадают 2 числа, дается 5 баллов. Если все 3 соответствуют, 10 даны. После запуска этой функции игра печатает свой текущий счет, спрашивает, хочет ли пользователь снова играть. На этой части кода:Python игнорирует вход для raw_input и продолжает повторять функцию

def ask(): 
    play_again = raw_input ("Do you want to play again? (Yes or No):") 
    if play_again == "yes" or "Yes": 
    run_machine() 
    elif play_again == "No" or "no": 
     print "Bye!" 
     sys.exit(1) 
    else: 
     print "I don't know what that means" 
     ask() 

Где main_функция run_machine(). Однако независимо от ввода, программа повторяет. Я новичок в python, поэтому это может быть что-то простое, но я хотел посмотреть, что может быть проблемой. Если это не что-то в этом блоке, то здесь полная программа:

import random 
slot_1 = [1,2,3,4] 
slot_2 = [1,2,3,4] 
slot_3 = [1,2,3,4] 
points = 0 
def role(slot): 
    return (random.choice(slot)) 
def run_machine(): 
    print "ROLLING!" 
    first = role(slot_1) 
    second = role(slot_2) 
    third = role(slot_3) 
    global points 
    if (first == second) or (first == third) or (second == third): 
     if (first == second) and (second == third): 
      print "You got 10 points! Full matches!" 
      points = points + 10 
     else: 
      print "You got 5 points, 2 matched!" 
      points = points + 5 
    else: 
     print "Sorry try again!" 
    print "You now have %s points" % points 
    ask() 

def ask(): 
    play_again = raw_input ("Do you want to play again? (Yes or No):") 
    if play_again == "yes" or "Yes": 
     run_machine() 
    elif play_again == "No" or "no": 
     print "Bye!" 
    else: 
     print "I don't know what that means" 
     ask() 

run_machine() 

ответ

1

Это не делает то, что вы думаете.

if play_again == "yes" or "Yes": 

Правильный способ сказать, что это было бы следующее (я добавил круглые скобки для акцента)

if (play_again == "yes") or (play_again == "Yes"): 

, как вы изначально написали это означает следующее в псевдокоде

if (play_again == "yes") 
or 
if ("Yes") # this always evaluates to True 
+0

альтернативно: 'if play_again in ('yes', 'Yes'):' но какой OP, вероятно, будет доволен, это 'if play_again.lower() == 'yes':' –

+0

О, да, это была довольно большая случайность моя часть. Забыл о синтаксисе. Кроме того, я думаю, что реализация дела ниже сделала бы это намного проще, так что спасибо Райан. – user3234240

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