2014-10-09 101 views
0

我很难评估这个while循环。尝试和除了在while循环中

据我的理解,任何值非1,2,3将测试布尔True并重新启动循环。

我的问题是为什么值1,2,3,测试布尔False并结束循环?

我认为except:声明与它有关。

def get_player_input(): 
    while True: 
     print 
     player = raw_input("Enter 1 for Rock 2 for paper or 3 for Scissors: ") 
     try: 
      player = int(player) 
      if player in (1, 2, 3): 
       return player 
     except ValueError: 
      pass 
     print "Please enter a number from 1 to 3." 

get_player_input() 
+0

提示:'ValueError'有关(只)有'int'函数。 – Mephy 2014-10-09 01:01:59

回答

1

return声明离开功能,返回它的价值。一旦遇到该陈述(当player1,23)时,由于您不再处于get_player_input函数中,所以任何循环(或函数内的其他控制结构)都会“断开”。

except声明与它无关:只是在那里处理无法分解为整数的输入。

+2

啊,这是有道理的。我用'print'替换了'return',现在我陷入了无限循环。 – dyao 2014-10-09 01:02:57

+0

是的。可以添加'除了KeyboardInterrupt:return(“Ctrl-C终止...”)' – user3666197 2014-10-09 01:08:03

+0

@ user3666197请注意详细说明吗? – dyao 2014-10-09 01:11:50

1

取出回报打破要求用户输入e并使用breakreturn

def get_player_input(): 
    while True: 
     print 
     player = raw_input("Enter 1 for Rock 2 for paper or 3 for Scissors or e to exit: ") 
     if player == "e": 
      print("Goodbye") 
      break # or return 
     try: 
      player = int(player) 
      if player in (1, 2, 3): 
       print "yay" 
     except ValueError: 
      pass 
     print "Please enter a number from 1 to 3." 
1

你的程序是正确的之后。记住你需要2个玩石头剪刀。你有一个功能来接受一个玩家的输入。现在,你需要采取两个输入和做一个比较和reutrn结果:

def oneBetterThanTwo(one, two): 
    # finish this function 
    return True # or False 

players = ['player1', 'player2'] 
inps = [get_player_input() for p in players] 

print (players[0] if oneBetterThanTwo(*inps) else players[1]), 'won' 

我让你来完成功能...