2017-06-13 68 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