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с, поэтому нет необходимости принуждать

Другие вопросы по тегам