' INT' if语句不能迭代

时间:2014-04-30 01:36:00

标签: python if-statement

我正在进行一个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'

的情况下

3 个答案:

答案 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,并用逗号分隔。
它在我的电脑上工作正常。希望它有所帮助..