2017-06-13 25 views
0

我正在創建我的tic tac toe遊戲 我想限制用戶對列表元素的輸入。如何限制用戶輸入列表元素

我的代碼去如下

from random import randint 

def player_input(): 

    turn_r = randint(0,1) 

    if(turn_r == 0):   
     def player1(): 
      p1marker=0 
      while not int(p1marker) in range(0,9): 
       p1marker = raw_input("Where Should I Place Your X : ") 
      board[p1marker-1] = 'X' 
    if(turn_r == 1): 
     def player2(): 
      p2marker=0 
      while not int(p2marker) in range(0,9): 
       p2marker = raw_input("Where Should I Place Your X : ") 
      board[p2marker-1] = 'X' 

好,而不是range(0,9)我想while循環檢查表的元素,也避免一旦被用戶添加到列表中X或0

+0

因爲我是初學者,請解釋一下代碼,請不要使用錯誤,除了或者其他新概念 – mvrht

+0

你是什麼意思「不使用錯誤」?你不希望我們使用什麼「新概念」 - 或者以不同的方式解釋它,你希望我們使用哪些概念? –

+0

在Python 2.x'range(0,9)'中實際上會生成一個列表:'[0,1,2 ... 8]',所以只需將您的'range()'調用替換爲對列表的引用。 – zwer

回答

0

你的代碼替換範圍(0,9),在其目前的狀態是相當無用的實際。注意:

from random import randint 

def player_input(): 
    turn_r = randint(0,1) 
    if(turn_r == 0):   
     def player1(): 
      ... 

    if(turn_r == 1): 
     def player2(): 
      ... 

取決於turn_r的價值,你要麼定義這個功能,或者你定義。

例子:

>>> i = 0 
>>> if i: 
... def f1(): pass 
... elif i == 0: 
... def f2(): pass 
... 
>>> f1 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'f1' is not defined 
>>> f2 
<function f2 at 0x104a511b8> 

的另一件事是,如果turn_r == 0,是真實的,第二個條件可能永遠不會發生。您最好將第二個if轉換爲elif。它使更好的代碼。

最後,您只需將range(0, 9)替換爲您的一些列表,如果這就是您想要的。

但是,除非您調用其中任何一個函數,否則它將不起作用。

+0

好吧謝謝我已經轉換我的第二個如果elif – mvrht

+0

@zwer但仍然如果用戶輸入X或0將在列表中後第一項。比X或0將被接受,但X或0不是井字棋的有效輸入 – mvrht

+0

@mvrht否,不會,因爲您沒有將X添加到列表中。 –

1

只需更換range(0,9)與你的名單。它應該完全一樣!

然而,還有其他問題,您的代碼:

p1marker=0 
while not int(p1marker) in range(0,9): 
    p1marker = raw_input("Where Should I Place Your X : ") 

這個循環將不會執行,因爲你已經宣佈p1marker0

此外,如果您想使用board[p1marker-1] = 'X',請確保p1marker是一個數字。事實上,你會得到一個錯誤,試圖從字符串中減去一個整數。

+0

,但仍然如果用戶輸入X或0,它將在第一次輸入後在列表中。比X或0將被接受,但X或0不是井號 – mvrht

0

請選擇一個列表。 假設:

x = [0,1,2,3,4,5,6,7,8] 

然後用X

while not int(p1marker) in x: 
+0

中的有效輸入,但仍然如果用戶輸入第一次輸入後將在列表中的X或0。比X或0將被接受,但X或0不是有效的輸入井號 – mvrht