强制变量为整数
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
。