TypeError:无法将序列乘以float类型的非整数

时间:2019-03-06 09:19:04

标签: python floating-point typeerror

导入pyglet CarMap类:

def __init__(self):


    self.in_map = [341, 161, 452, 121, 567, 123, 650, 160, 678, 241, 613, 340, 654, 467, 611, 508, 506, 514, 416, 437,
               289, 401, 207, 431, 130, 469, 110, 424, 128, 320, 157, 229, 95, 99, 217, 87]
    self.out_map = [344, 89, 445, 45, 572, 59, 691, 92, 756, 229, 695, 333, 715, 482, 649, 566, 455, 567, 409, 502, 319,
                476, 214, 492, 125, 550, 78, 557, 45, 485, 41, 353, 87, 254, 38, 88, 74, 35, 271, 44, 295, 70]
    self.score_lines = [341, 161,344, 89,567, 123,572, 59,678, 241,756, 229,654, 467,715, 482,506, 514,455, 567,130, 469,125, 550,157, 229,87, 254,95, 99,74, 35]
#self.score_lines = [654, 467,715, 482,506, 514,455, 567,416,437,409,502,289,401,319,476,207,431,214,492,130, 469,125, 550,157, 229,87, 254,95, 99,74, 35]
    self.in_batch = pyglet.graphics.Batch()
    self.out_batch = pyglet.graphics.Batch()
    self.in_grey = [160] * (len(self.in_map) / 2.0)
    self.out_grey =[160] * (len(self.out_map) / 2.0)
    self.blue1 = [0, 39, 102,1]*(len(self.score_lines)/2.0)
    self.blue2 = [0, 97, 255, 1] * (2)
    self.in_batch.add(len(self.in_map) / 2, pyglet.gl.GL_LINE_LOOP, None, ('v2i', self.in_map),
                  ('c4B', self.in_grey * 4))
    self.out_batch.add(len(self.out_map) / 2, pyglet.gl.GL_LINE_LOOP, None, ('v2i', self.out_map),
                   ('c4B', self.out_grey * 4))

def draw(self,score_activate):

    self.in_batch.draw()
    self.out_batch.draw()
    score_batch = pyglet.graphics.Batch()
    score_batch.add(16,pyglet.gl.GL_LINES,None,('v2i',self.score_lines),('c4B',self.blue1))
    score_batch.draw()
    score_batch2 = pyglet.graphics.Batch()
    score_batch2.add(2, pyglet.gl.GL_LINES, None, ('v2i', self.score_points(score_activate)), ('c4B', self.blue2))
    score_batch2.draw()

def score_points(self,score_activate):

    if score_activate == 7:


        score_activate = -1
    return self.score_lines[score_activate*4+4:score_activate*4+8]

我在一行中遇到错误:  self.blue1 = [0,39,102,1] *(len(self.score_lines)/2.0) 不能将序列乘以'float'类型的非整数...任何人都可以解决这个问题吗?..我正在使用Python 3.6

4 个答案:

答案 0 :(得分:0)

在python中将列表乘以x时,它不会将列表中的每一项相乘,只会重复序列x次。这就是x必须为整数且不能为浮点的原因。如果要使列表的元素成倍增加,请尝试以下一行:

self.blue1 = [k*(len(self.score_lines)/2.0) for k in [0, 39, 102,1]]

类似地更改代码,其中整数列表可能会乘以浮点数。如果要重复列表x次,请尝试以下操作:

self.blue1 = [0, 39, 102,1]*int(len(self.score_lines)/2.0) )

答案 1 :(得分:0)

>>> [1,2] * 2
[1, 2, 1, 2]
>>>'abc' * 3
'abcabcabc'

将列表与整数相乘时,它会使列表中的元素重复多次。将整数与字符串相乘时,会观察到相同的行为。 您可以看到为什么此操作不支持使用浮点数进行乘法。

如果要将列表的每个元素乘以浮点数,可以执行以下操作:

>>>ls = [num * 5.5 for num in [1,2,3]]
>>>ls
[5.5, 11.0, 16.5]

答案 2 :(得分:0)

您不能像这样乘以一个列表。如果您使用整数来完成此操作,则列表将被附加N次:[1,2,3] * 3 = [1,2,3,1,2,3,1,2,3]。

您可以在定义新列表的列表中使用for循环进行此操作:

self.blue1 = [0, 39, 102,1]
self.blue1 = [i*len(self.score_lines)/2.0) for i in self.blue1]

或一口气:

self.blue1 = [i*len(self.score_lines)/2.0) for i in [0, 39, 102,1]]

您还可以求助于numpy,它确实允许像代码中那样进行乘法。

将导入添加到代码顶部:     将numpy导入为np

然后下面的代码产生相同的结果,只是self.blue1现在是一个numpy数组:

self.blue1 = np.array([0, 39, 102,1])*len(self.score_lines)/2.0)

答案 3 :(得分:0)

self.blue1 = [0,39,102,1] * int(len(self.score_lines)/2.0)

在这里,我使用len将其转换为整数形式,简单!