我努力在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不可调用),但现在它没有做任何事情。有什么想法吗?
答案 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()