2014-10-09 98 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' 

我讓你來完成功能...