2016-12-28 10 views
0

我想創建一個條件,讓用戶提供問題的輸入,直到給出非重複答案。我已經更新了代碼,但它不起作用,因此我正在尋求幫助。代碼如下:要創建一個條件繼續提示用戶重新輸入查詢的答案

我的原代碼:

choice=int(input("Enter your move (1-9):".strip()))-1 
if board[choice] ==" ": 
    board[choice] = icon 
else: 
    print() 
    print("That space is taken!") 

代碼的問題是,這並不會給用戶如果輸入重複chocie再次重新輸入答案的機會。我改變了代碼到下面:

更新代碼

def check_duplicate(): 
    while board[choice] !=" ": 
     print ("Duplicate input") 
     choice=int(input("Enter your move (1-9):".strip()))-1 
     board[choice] 

我用check_duplicate來代替上述的舊代碼。這是行不通的。有人可以指出我犯了什麼錯誤嗎?謝謝。

+0

「重複輸入」是什麼意思?重複如何? – DeepSpace

+0

你不應該將'choice'和'board'傳遞給函數嗎? – aIKid

回答

0

將輸入代碼包裝成一個循環。這裏是做的一個方法:

while True: 
    choice=int(input("Enter your move (1-9):".strip()))-1 
    if board[choice] ==" ": 
     board[choice] = icon 
     break 
    else: 
     print() 
     print("That space is taken!") 

還有其他的方法,但使用while True:並用break聲明停止這種方法是常見的Python編寫的。

請注意,如果棋盤上沒有空位,或者用戶由於某種原因拒絕進入空位,此循環將永不停止。確保你防止前者發生。


至於你更新的代碼的特殊問題:

  1. 您打印「重複輸入」採取任何輸入之前。
  2. 輸入完成後,您執行board[choice],其僅評估棋盤位置......然後將其丟棄而不做任何事情。

的明顯的問題與你的原代碼:

  1. 它不給用戶如果輸入重複chocie再次重新輸入答案的機會(正如你指出)。
  2. 如果輸入了一個數字,則代碼假定該空間是在沒有實際檢查的情況下進行的,以查看是否是這種情況。

我不能告訴你正確的代碼應該是什麼,因爲你沒有給出足夠的上下文來理解你想要的東西。

+0

感謝您的回答。然而,我的代碼有什麼問題? 我的我的更新代碼的理解: 1)\t當選擇不爲空,印刷複製 2)\t輸入選擇再次 3)\t更新的選擇。由於board [選項]不再爲空,因此斷開循環。 相反,我得到的結果是循環不斷裂。 – Alexis

+0

@Alexis:查看我的更新。 –

相關問題