在Python 3.4中“转换”为int

时间:2014-12-02 07:36:43

标签: python python-3.x

我在Python 3.4中编写了一些简单的游戏。我是Python的新手。代码如下:

def shapeAt(self, x, y):
    return self.board[(y * Board.BoardWidth) + x]

引发错误:

TypeError: list indices must be integers, not float

现在我发现,当Python"认为" list参数不是整数。你知道如何解决这个问题吗?

5 个答案:

答案 0 :(得分:10)

int((y * Board.BoardWidth) + x)使用int将最接近的整数逼近零。

def shapeAt(self, x, y):
    return self.board[int((y * Board.BoardWidth) + x)] # will give you floor value.

并且使用math.floor(通过m.wasowski的帮助)获得最低价值

math.floor((y * Board.BoardWidth) + x)

答案 1 :(得分:4)

如果xy是表示数字文字的数字或字符串,则可以使用int强制转换为整数,而浮点值则会浮动:

>>> x = 1.5
>>> type(x)
<type 'float'>
>>> int(x)
1
>>> type(int(x))
<type 'int'>

答案 2 :(得分:2)

这可能是因为您的索引类型为float,其中这些索引应为ints(因为您将它们用作数组索引)。我不会使用int(x),我想您可能打算通过int(如果没有,请使用return self.board[(int(y) * Board.BoardWidth) + int(x)]

您可能还希望获得最低价值以获取您的索引,以下是如何操作:

import math

def shapeAt(self, x, y):
    return self.board[math.floor((y * Board.BoardWidth) + x)]

您还可以使用Python的type()函数来识别变量的类型。

答案 3 :(得分:1)

您需要检查的x和y的类型是什么,然后使用int将它们转换为整数类型:

def shapeAt(self, x, y):
    return self.board[(int(y) * Board.BoardWidth) + int(x)]

如果你想先存储它们:

def shapeAt(self, x, y):
    x,y = int(x),int(y)
    return self.board[(y * Board.BoardWidth) + x]

答案 4 :(得分:0)

基本上,您只需拨打int()内置电话:

def shapeAt(self, x, y):
    return self.board[int((y * Board.BoardWidth) + x))

但是,如果您想将它用于练习或脏脚本以外的任何内容,您应该考虑处理边缘情况。如果你在某处犯了错误并将奇怪的值作为参数怎么办?

更强大的解决方案是:

def shapeAt(self, x, y):
    try:
        calculated = int((y * Board.BoardWidth) + x)
        # optionally, you may check if index is non-negative
        if calculated < 0:
            raise ValueError('Non-negative index expected, got ' +
                repr(calculated))
        return self.board[calculated]
    # you may expect exception when converting to int
    # or when index is out of bounds of your sequence
    except (ValueError, IndexError) as err:
        print('error in shapeAt:', err)
        # handle special case here
        # ...
        # None will be returned here anyway, if you won't return anything
        # this is just for readability:
        return None 

如果你是初学者,你可能会感到惊讶,但在Python中,负面索引是完全有效的,但它们具有特殊含义。您应该阅读它,并决定是否要在您的函数中允许它们(在我的示例中,它们是不允许的)。

您可能还想了解有关转换为int的规则:

https://docs.python.org/2/library/functions.html#int

考虑一下,如果对你来说,在尝试转换为int之前,用户地板或天花板会不会更好:

https://docs.python.org/2/library/math.html#math.floor

https://docs.python.org/2/library/math.html#math.ceil

请确保在调用之前有float! ;)