我正在创建一个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的长度?
答案 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()
适用于列表,元组和字符串,但不适用于整数。