TypeError: ожидаемый целочисленный аргумент получил float' Python 3.4
Я получаю ошибку целого числа, ожидающего число с плавающей запятой, поэтому я изменяю его, а затем получаю обратное, говоря, что число с плавающей точкой не может быть целым числом У меня были подобные проблемы раньше, и я просто изменил его на int.
Я учусь через учебники в python27, но по большей части заставил их работать в python34 через устранение неполадок. На этом я застрял.
TypeError: ожидается целочисленный аргумент go float'
for tile in return_tiles:
pygame.draw.circle(screen, [34, 95, 200],
[tile.x + half - 2, tile.y + half - 2], 5 )
Поэтому я внес изменения ниже, они обычно работают так же, как и под этим, но в этом случае выдается ошибка.
TypeError: объект 'float' не может быть интерпретирован как целое число
for tile in return_tiles:
pygame.draw.circle(screen, (34, 95, 200), (int(tile.x + half -2),int(half - 2, tile.y + half - 2)), int(5))
пример того, как я исправил еще один ниже, который был целым числом, но в случае выше он не работал
pygame.draw.circle(screen, (34, 95, 200), (int(tile.x + half -2),int(half - 2, tile.y + half - 2)), int(5))
Я учил себя, изучая учебники онлайн, но большинство из них для более ранней версии Python 2.7 и т. Д. Но это не было проблемой по большей части. Я просто использовал сообщение об ошибке, и по большей части я могу понять, если нет, иногда я запускаю 2to3.py или ищу, чтобы найти ответ.
1 ответ
Я подозреваю, что ваш виновник half
переменная, так как она включает в себя деление, в Python 2 это даст вам int
Однако в Python 3 деление даст float
если вы не используете оператор деления Int //
Если вы используете учебники по Python 2, им не придется иметь дело с этим
Python 3
>>> 5 // 3
1
>>> 5 / 3
1.6666666666666667
Так что я пойду искать где half
рассчитывается, и либо принудительно int
с half = int(...)
или использовать //
В Pygame это не очень полезно для использования float
для размеров в пикселях, так что просто держите все в int
особенно когда вы делите, как для half
остальная арифметика вроде tile.x + half
даст int
если оба операнда int
с, поэтому нет необходимости принуждать