我正在进行一个tic-tac-toe游戏,我正在为网格上的位置创建if语句(即(a,1)(b,2)(c,3)等。)
我一直在"' int'对象不可迭代"一旦代码到达我的第一个if语句。
当前代码:
def getXandY():
y=input("Enter your move [letter, number]: ")
acc=[]
for i in y:
acc.append(i)
y=int(acc[1])
x=acc[0]
print(x,y)
if y == 1:
return 0
print(x,y)
if y == 2:
return 1
print(x,y)
if y == 3:
return 2
else:
return -1
x=x.lower()
num=convrtLet2Num(x)
return num,y
def convrtLet2Num(x):
if x == 'a':
return 0
if x== 'b':
return 1
if x== 'c':
return 2
else:
return -1
我到达了第一个" print(x,y)"是,然后错误发生在if语句。有什么想法导致错误吗?
在我测试y = 1和x =' a'
的情况下答案 0 :(得分:2)
我认为你实际上是在更早地遇到错误(当你在问题中包含错误堆栈时它会帮助我们):
for i in y:
acc.append(i)
如果您希望用户以[letter, number]
格式输入字符串作为字符串,则需要使用ast
模块'literal_eval()
方法
像这样:
y=input("Enter your move [letter, number]: ")
acc=[]
for i in ast.literal_eval(y):
acc.append(i)
因此,当用户在提示时输入:
Enter your move [letter, number]: ['a', 3]
ast.literal_eval(y)
会将输入转换为python列表['a', 3]
。
以下代码正确打印x和y的值:
import ast
y=input("Enter your move [letter, number]: ")
acc=[]
for i in ast.literal_eval(y):
acc.append(i)
y=int(acc[1])
x=acc[0]
print(x,y)
演示:
$ python3 so.py
Enter your move [letter, number]: ['a', 1]
a 1
但是,如果您希望用户输入格式为letter number
但没有方括号的字符串,则您的代码仍然无法达到预期效果。因为y
将包含字符串a 3
(如果输入为'a 3')。做一个
for i in y:
acc.append(i)
会使acc
列出三个元素['a', ' ', '3']
。 y[1]
现在是一个空格角色。因此,代码y=int(acc[1])
中的这一行将失败。
答案 1 :(得分:0)
怎么样?
def get_move():
while True:
xy = input("Enter your move (ie b2): ").strip().lower()
if len(xy) == 2:
x, y = xy
if x in "abc" and y in "123":
return (ord(x) - ord("a"), ord(y) - ord("1"))
像
一样运行>>> get_move()
Enter your move (ie b2): c2
(2, 1)
>>> get_move()
Enter your move (ie b2): a1
(0, 0)
答案 2 :(得分:0)
请试试这个:
def getXandY():
y=raw_input("Enter your move [letter, number]: ")
input_list = y.split(',')
acc=[]
for i in input_list:
acc.append(i)
我假设输入如下:a,1
您只需修改我上面提到的部分,它就会收到您的字母和数字输入raw_input
,并用逗号分隔。
它在我的电脑上工作正常。希望它有所帮助..