TypeError:类型' int'的对象没有len() - Python / Pygame

时间:2017-08-03 17:26:07

标签: python pygame

我正在创建一个cookie clicker游戏,其中有一个表面显示我有多少个cookie。

这是我绘制文字的代码。

 def draw_text(self, text, font_name, size, color, x, y, align="nw"):
            font = pg.font.Font(font_name, size)
            text_surface = font.render(text, True, color)
            text_rect = text_surface.get_rect()
            self.screen.blit(text_surface, text_rect)

然后在我的游戏循环的新功能中(当新游戏开始时),我创建了一个变量:

def new(self):
        self.cookie_count = 0

最后,我有绘图功能。

def draw(self):
    self.draw_text('Cookies: {}'.format(len(self.cookie_count)), self.cookie_font, 105, SKYBLUE, 325, HEIGHT * 3/4, align="nw")
    pg.display.update()

然而,当我运行程序时,我得到:

TypeError: object of type 'int' has no len()

我是新手创建一个"得分计数器"你可以打电话给它。但为什么呢

self.draw_text('Cookies: {}'.format(len(self.cookie_count))

给我一​​个错误?为什么不打印self.cookie_count的长度?

4 个答案:

答案 0 :(得分:1)

如果您只想要self.cookie_count的值,则可以使用

self.draw_text('Cookies: {}'.format(self.cookie_count)

len()函数返回对象(如数组)中的项目数,但不适用于int对象。

答案 1 :(得分:1)

您可以尝试删除len()函数,因为self.cookie_count已经是int。

所以你的答案应该是:

self.draw_text('Cookies: {}'.format(self.cookie_count))

答案 2 :(得分:0)

This正是您要找的。 len()是容器函数,因此len(int)会出错。使用len(str(self.cookie_count))。希望有所帮助!

编辑:这将获得整数中的位数,包括负号。对于浮点数,这也将计算小数点。对于小数字(小于10 ^ 16),使用

更快
import math
digits = math.log10(n) + 1

但这不太可读。对于大数字,舍入不精确会给出错误的答案,而字符串方法的简单性远远超过其缺乏速度。

答案 3 :(得分:0)

如果设置self.cookie_count = 0,则其类型为整数。 len()适用于列表,元组和字符串,但不适用于整数。