如何限制用户输入List的元素

时间:2017-06-13 16:20:07

标签: python python-2.7

我正在制作我的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

3 个答案:

答案 0 :(得分:2)

只需将range(0,9)替换为您的列表即可。它应该完全一样!

但是,您的代码还存在其他问题:

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

此循环永远不会执行,因为您已将p1marker声明为0

另外,如果您想使用board[p1marker-1] = 'X',请确保p1marker是一个数字。实际上,尝试从字符串中减去一个整数会出错。

答案 1 :(得分:0)

列出您的选择。 假设:

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

然后用x

替换范围(0,9)
while not int(p1marker) in x:

答案 2 :(得分:-1)

您的代码在当前状态下实际上是无用的。观察:

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)替换为您的一些列表,如果这是您想要的。

但是,除非你调用其中任何一个函数,否则它将没有用处。