开发者

Forcing a variable to be an integer

errors = int(0)
for i in range(len(expectedData)):
    if data[i] != expectedData[i]:
        errors += int(binary_compare(data[i], expectedData[i]))
return errors

I have the above code which I am trying to use to calculate some integer (number of errors) for some data. I have casted everything I can see possible as an integer, yet the line "errors += ..." still appends the value, rather than adds it.

For example, if my answer should be 7, I might get 500002. (5 + 0 + 0 + .. + 2). I have never run into this before. The function binary_compare is returning an integer as well, but I'm completely in the dark as开发者_Python百科 to why this isn't working.


python is not javascript

it's no way to get concatenated strings instead of math sum, when you do count += value starting with count = 0. if you try to add a string to integer, exception is raised:

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

to compare values of which you don't know whether they are strings or integers, i'd use

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

for noninteger-proof math sum, you might want to do something like this

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


I think the error is outside of your code, but anyway, in Python, list operations are seldom done with loops, as this focuses on the implementation rather on the purpose. List comprehension, generators etc are preferred, and there are also many built-in and standard library functions for common tasks.

In your case, I would write the function as

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

If you are using Python 2.x, itertools.izip should be used instead of zip.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜