强制变量为整数

1 投票
2 回答
14161 浏览
提问于 2025-04-16 01:35
errors = int(0)
for i in range(len(expectedData)):
    if data[i] != expectedData[i]:
        errors += int(binary_compare(data[i], expectedData[i]))
return errors

我有上面的代码,想用它来计算一些整数(错误的数量)。我已经把能看到的所有东西都转换成整数了,但那行“errors += ...”还是把值拼接在一起,而不是相加。

比如说,如果我的答案应该是7,我可能得到的是500002。(5 + 0 + 0 + .. + 2)。我以前从来没有遇到过这种情况。函数binary_compare也返回一个整数,但我完全不知道为什么这样不行。

2 个回答

4

Python 不是 JavaScript。

在 Python 中,如果你用 count += value 来计算,开始时 count = 0,那么你得到的永远是数学上的加法结果,而不是字符串的拼接。如果你试图把一个字符串和一个整数相加,就会出现错误:

>>> x = 0
>>> x += "1"
TypeError: unsupported operand type(s) for +=: 'int' and 'str'

如果你想比较一些值,但不确定它们是字符串还是整数,我会使用

str(data[i]).strip() == str(expectedData[i]).strip()

如果你想确保进行的数学加法是安全的,不会出错,你可以这样做:

try:
    value = int(expectedData[i])
except:
    value = 0
count += value
2

我觉得这个错误可能不在你的代码里。不过在Python中,处理列表时很少用循环,因为这样更关注实现细节,而不是实现的目的。通常我们会用列表推导式、生成器等方式来处理列表,还有很多内置的和标准库的函数可以用来完成常见的任务。

在你的情况下,我会这样写这个函数:

return sum(binary_compare(x, y) for x, y in zip(data, expectedData) if x != y)

如果你在用Python 2.x版本,应该用itertools.izip来代替zip

撰写回答