2017-08-03 40 views
1

我正在创建一个cookie clicker游戏,其中有一个表面显示我有多少个cookie。TypeError:'int'类型的对象没有len() - Python/Pygame

这是我的绘图文本代码。

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的长度如何不打印?

+1

我不太清楚你想用'len'做什么,但它不'int'工作。 'len'返回一个字符串的长度。 – TheDetective

+1

'.format(self.cookie_count)' – Alexander

回答

1

如果你只是想self.cookie_count值,你可以只使用

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

len()函数返回一个对象的项目数如数组和int对象不起作用。

0

This是你在找什么。 len()是一个容器功能,所以len(int)提供了一个错误。使用len(str(self.cookie_count))。希望有所帮助!

编辑:这将得到你的整数,包括一个负号数字的数量。对于浮点数,这也将计算小数点。对于小数字(小于10^16),使用起来更快

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

但是这是不太可读的。大数字,舍入不精确给出了不正确的答案,并且字符串方法的简单性远远超过了它的速度不足。

+0

您应该将相关信息放在您的答案中,因为链接可能会随着时间的推移而被弃用。 – xgord

+0

'len'不是一个“字符串或列表函数”,它适用于实现'__len__'的任何东西,并且这是大多数内置的容器类型。 –

+0

如果可以的话,我会赞成你们两人。谢谢! – TBlock

0

如果您设置self.cookie_count = 0,那么它的类型是整数。 len()适用于列表,元组和字符串,但不适用于整数。

+0

围绕内嵌代码片段使用反引号(')有助于使答案更清晰。 – robinCTS

1

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

所以你的答案应该是:

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

恭喜你的第一个答案。给你一些好的提示:1)使用反引号(')引用函数,变量和其他代码片段内联。 2)在一行的开头使用四个空格来创建一个代码块。点击答案框右上角的帮助图标即可找到这些提示和其他有用的信息。 – robinCTS

相关问题