使用函数内的输入来更改列表中的元素

时间:2016-11-08 23:50:16

标签: python list input

我努力在python中制作一个tic tac toe游戏并且不想作弊,所以我在这里提出了一个非常具体的问题。我的董事会是一个清单:

lst = [1,2,3,4,5,6,7,8,9]

我将以下函数分解,使其看起来像一个网格:

def board():
    print (lst[:3])
    print (lst[3:6])
    print (lst[6:])

以便调用函数print:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

然后我尝试接受输入并使用它来用字符串替换列表中的数字' x':

 def move():
     move1=(input('Player 1: Type a number!'))
     for x in lst:
         if move1 == x:
            lst[x-1] = 'x'
            board()

这会打印字符串并为输入提供一个框,但不会用' x'替换列表中的数字。我意识到这个功能一定有问题,所以如果有人有耐心去解释它,我会非常感激。

好的,现在我想将电路板中的数字变成字符串,因为它看起来更好:     [' 1',' 2',' 3']     [' 4',' 5',' 6']     [' 7',' 8',' 9']

我想出了下面的代码,因为我意识到,如果for循环遇到像' x'并尝试将其转换为整数,可能会显示错误:

def move2():
    move2=int(input('Player 2: Type a number!'))
    for x in lst:
        if x != 'x' and x != 'o' and move2 == int(x):
            lst[move2-1] = 'o'
            board()
            move()
        elif x != 'x' and x != 'o' and move1 != int(x):
                print('Not that number!')
                board()
                move2()

在额外条件之前(如果x!=' x'等),它标记了' x然后在第二个玩家输入时显示错误一个数字,(int不可调用),但现在它没有做任何事情。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为这是因为列表中的项目不是字符串,而用户输入是字符串。所以你可以这样做:

try:
   move1=int(input('Player 1: Type a number!'))
catch ValueError:
   print("Error input is not a number!")

编辑:您可以选择使用if with move1.isDigit()而不是try / catch

答案 1 :(得分:1)

 def move():
     move1=(input('Player 1: Type a number!'))
     if move1.isdigit(): #check if the input is numeric
        move1 = int(move1)
        for x in lst:
            if move1 == x: #now compares two ints, not str & int
               lst[x-1] = 'x'
               board()

你可以清理:

 def move():
     move1=(input('Player 1: Type a number!'))
     if move1.isdigit() and int(move1) < 10:
               lst[int(move1)-1] = 'x'
               board()