2017-02-13 3 views
0

Я работаю над проблемой часами и не могу понять, почему она не работает. Мой код в основном закончен, за исключением одной ошибки, от которой я не могу избавиться. Проблема связана с введением в курс MIT на Python по edx. Задача проблемы 4 Задача 6.вход python неправильно запоминает прошлые входы

uinput = -1 
hand = -1 
while True: 
    uinput = input('Enter n to deal a new hand, r to replay the last hand, or e to end game:') 
    if uinput == 'n': 
     hand = dealHand(HAND_SIZE) 
     playHand(hand, wordList, HAND_SIZE) 
    elif uinput == 'r' and hand == -1: 
     print('You have not played a hand yet. Please play a new hand first!') 
    elif uinput == 'r' and hand != -1: 
     playHand(hand, wordList, HAND_SIZE) 
    elif uinput not in ('n', 'r', 'e'): 
     print("Invalid command.") 
     playGame(wordList) 
    else: 
     break 
    print('') 

Это код, который он называет другими функциями, но я не думаю, что это так важно. Проблема в том, что когда я нажимаю 'е', она должна проваливаться до перерыва и выйти из цикла. Он делает это в первый раз, когда я нажимаю 'e', ​​но если я нажимаю любой другой ключ до этого, он увеличивается, и мне нужно нажать 'e', ​​чтобы много раз, чтобы он действительно сломался. Например, если я дважды нажимаю «x», прежде чем нажать «e», мне нужно будет нажать «e» три раза в общей сложности, чтобы достичь перерыва. Например. xxeee break. При попытке отладки я видел, что он даже изменяет значение uinput на «x», как будто он освобождает стек или что-то в этом роде. Кто-нибудь знает, почему это происходит?

+4

Эта функция называется playHand()? Если вы повторно вызовете playHand(), он начнет складываться, требуя разбить каждый из стека цикла. Если вы удалите вызовы playHand, dealHand или playGame, вы увидите, что ваш if/elif/else работает нормально. – ooknosi

+0

эта функция playGame() и im call dealHand() и playHand(). Мне нужно называть эти функции для работы, нет другого пути? спецификации для проблемы также требуют, чтобы эти функции вызывались – dmnte

+0

Удаление вызовов playHand, dealHand и playGame является частью процесса отладки, чтобы проверить, работает ли ваш код if/else самостоятельно. Вы можете добавлять обратные вызовы один за другим, чтобы увидеть, вызывает ли один из вызовов функции вашу ошибку. – ooknosi

ответ

0

Поскольку ваша функция называется пустяками(), есть ошибка здесь:

elif uinput not in ('n','r', 'e'): 
    print("Invalid command.") 
    playGame(wordList) 

Вы звоните пустяки снова при нажатии кнопки «х». Это накладывает еще один цикл поверх текущего текущего цикла playGame. Попробуйте удалить звонок до playGame(wordList), и он должен исправить вашу ошибку.

+0

yes thats right, который устраняет проблему нажатия на значения, отличные от 'n' и 'r', и имеет эту проблему, которая достаточна для удовлетворения требований к задачам. но это все еще происходит, когда сначала нажимаете «n», а затем пытаетесь выйти из него, нажимая «e». это можно избежать? – dmnte

+0

Проверьте, имеет ли ваша сделкаHand() или playHand() другой вызов playGame(). – ooknosi

+1

Ваш правый playHand() имел еще один вызов playGame(). Я все еще довольно новичок в python, поэтому не знал об этой проблеме. спасибо за помощь. – dmnte

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