Вы получаете эту ошибку, потому что вы используете player1
и player2
, прежде чем определить их. Это легко разрешить:
def player():
player1 = ''
player2 = ''
# The rest of your code here...
Есть и другие проблемы с вашим кодом. Например:
while (player1.isalpha()):
player1 = input("What is the name of our first player? \n")
print("Welcome " + player1)
return
else:
print("Please enter a name without integers or spaces")
return False
return
Это в вашем while
цикле выход из функции, как только вы приветствовали player1
. Однако вы сказали, что хотите запросить второго игрока, поэтому он должен быть break
. Затем, когда я делаю эти корректировки, а затем опустить функцию в интерпретатор, это то, что я получаю:
>>> def player():
... player1 = ''
... player2 = ''
... while (player1.isalpha()):
... player1 = input("What is the name of our first player? \n")
... print("Welcome " + player1)
... break
... else:
... print("Please enter a name without integers or spaces")
... return False
... while (player2.isalpha()):
... player2 = input("What is the name of our first player? \n")
... print("Welcome " + player2)
... break
... else:
... print("Please enter a name without integers or spaces")
... return True
...
>>> player()
Please enter a name without integers or spaces
False
>>>
Ваш пустой player1
& player2
не возвращаются, как альфа, так что вы никогда не собираетесь получить приглашение для ввода. Смотрите следующее:
>>> player1 = ''
>>> assert player1.isalpha()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
>>>
Update
К тому времени, когда я думал об этом следующей части, кто-то другой также опубликовал аналогичный ответ. Я включу мое, чтобы взглянуть на другой способ сделать это.
Я бы на самом деле использовать что-то вроде следующего:
>>> def get_player(n=1):
... player = input("What is the name of player %d? " % n)
... if not player.isalpha(): # Ask again, if non-alpha characters.
... print("Please enter a name without integers or spaces!")
... player = get_player(n)
... return player
...
>>> player1 = get_player(1)
What is the name of player 1? Bob1
Please enter a name without integers or spaces!
What is the name of player 1? Bob
>>> assert player1 == 'Bob'
>>>
Это позволит запросить произвольное количество игроков, таких как:
>>> players = []
>>> try:
... num = int(input("How many players? "))
... except ValueError:
... print("Number of players must be an integer!")
... else:
... for i in range(num):
... players.append(get_player(i + 1))
...
How many players? 3
What is the name of player 1? Frodo
What is the name of player 2? Sam
What is the name of player 3? Merry
>>> assert players == ['Frodo', 'Sam', 'Merry',]
>>>
Таким образом, если ваша текущая игра tic-tac-toe (или что-то еще) когда-нибудь станет игрой гипер-tac-tac-toe в n-мерном игровом поле с n игроками, вам не нужно полностью переписывать и повторно отлаживать вашу функцию player()
. Или вы готовы отбросить эту же функцию в свою следующую игру.
Вы тестируете 'player1.isalpha()' ** перед ** 'player1 = input (...)' ... – jonrsharpe
Возможный дубликат [Запросить пользователя для ввода до тех пор, пока он не даст действительный ответ] (http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response) – jonrsharpe
Ну, 'player1' не определен или не назначен, прежде чем вы вызываете' isalpha() ', вызвав эту ошибку.Кстати, ваш код не делает то, что, по вашему мнению, он должен делать. – MasterAM