2010-07-20 5 views
1
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 также возвращает целое число, но я полностью в неведении относительно того, почему это не работает.

+4

Не может быть связан, но я бы использовал 'return sum (binary_compare (x, y) для x, y в zip (data, expectedData), если x! = Y)' вместо этого. – kennytm

+0

Можете ли вы опубликовать код? Попробуйте опубликовать наименьший объем кода, который воспроизводит ошибку. –

+4

- это ваш фактический код? – SilentGhost

ответ

2

Я думаю, что ошибка находится вне вашего кода, но в любом случае, в Python, список операции редко делаются с петлями, так как это основное внимание на осущ скорее, с целью. Рекомендуется использовать список, генераторы и т. Д., А также множество встроенных и стандартных библиотечных функций для общих задач.

В вашем случае, я хотел бы написать функцию, как

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

Если вы используете Python 2.x, itertools.izip следует использовать вместо zip.

3

питон не Javascript

это не способ получить сцепленные строки вместо математики суммы, когда вы 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 
Смежные вопросы