неразрешенная ошибка NameE во время написания игрового процесса в блэкджеке - PullRequest
0 голосов
/ 14 января 2019

В настоящее время я пишу игру в блэкджек, используя python 2.7. как часть игрового процесса приложения я определил новую функцию под названием player_turn(), в которой мне потребовался пользовательский ввод, который приводил бы к различным сценариям в зависимости от ввода («нажатие» дало бы игроку другую карту, а «удержание» завершите ход игрока и передайте его дилеру. В противном случае возникнет ошибка по настройке)

def player_turn():
    if sum(player_card_numbers) < 21:
        user_decision = input('would you like to hit or hold?')
        if user_decision == 'hit':
            player_cards.append(deck.draw())
            print player_cards, dealer_cards
            player_turn()

        elif user_decision == 'hold':
            print "Dealer's turn!"
            dealer_turn()
        else:
            print "player must choose 'hit' or 'hold'"
            player_turn()

    elif sum(player_card_numbers) == 21:
        print "Blackjack!"
        dealer_turn()

    else:
        print "Player Burnt! \nDealer's turn!"
        dealer_turn()

Стоит отметить, что код изначально был написан на python 3.7, а позже был изменен. код отлично работал с 3.7.

Теперь я получаю эту ошибку:

NameError: name 'hit' is not defined

Мне бы хотелось получить несколько советов о том, как решить эту проблему, а также объяснить, почему это произойдет. :)

1 Ответ

0 голосов
/ 23 января 2019

Проблема в этой строке:

user_decision = input('would you like to hit or hold?')

В Python2 input() имеет природу eval(), поэтому он подтверждает ваш ответ: нажмите

>>> user_decision = input('would you like to hit or hold?')
would you like to hit or hold?hit
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'hit' is not defined
>>> 

Стандарт кодирования для Python 2 состоит в том, чтобы не использовать input(), а вместо этого использовать raw_input() вместо:

>>> user_decision = raw_input('would you like to hit or hold?')
would you like to hit or hold?hit
>>> user_decision
'hit'
>>> 

В Python 3 функция input() эквивалентна raw_input() в Python 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...