2015-04-21 15 views
0

我试图输入两个玩家的名字并让程序识别名称中除字母字符以外的任何内容。名称应该循环,直到它们输入正确;目前,我得到local variable 'player1' referenced before assignment.变量'player1'在作业之前引用了

def player(): 

    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 


    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() 

我读关于全球分配和听起来在这种情况下,不良的错误;任何其他建议?

+0

您正在**'player1 = input(...)'之前测试'player1.isalpha()'** ... – jonrsharpe

+0

[询问用户输入信息直到他们给出有效响应]( http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response) – jonrsharpe

+0

那么,'player1'没有被定义或分配,然后再调用' isalpha()'方法,导致这个错误。顺便说一句,你的代码不会做你认为它应该做的事。 – MasterAM

回答

2

在对其执行方法之前,您必须定义player1。

player1="" 
player2="" 
while... 

它不是全球的,因为它的功能

1
def player(x): 
    player='' 
    pass=0 
    while (not player.isalpha()): 
     if pass != 0: 
      print("Please enter a name without integers or spaces") 
     pass += 1 
     player = input("What is the name of our player No.{}?\n".format(x)) 
    print("Welcome {} No.{}".format(player,x)) 
    return player 

player1=player(1) 
player2=player(2) 
1

你,因为你使用player1player2定义之前收到此错误。这很容易解决:

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 

returnwhile循环将作为你的欢迎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 
>>> 

更新

通过我以为这下一块的时候,别人也发布了类似的回答。我将包括我的看看在做不同的方式。

我真的使用类似以下内容:

>>> 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(或其他)有朝一日会成为一个有n个玩家的n维游戏场的超级井字游戏,你不必完全重写和重新调试你的player()函数。或者您已准备好将相同的功能放入您的下一个游戏中。

相关问题