Python 类型错误:Can';用浮点型的非整数乘以序列

Python 类型错误:Can';用浮点型的非整数乘以序列,python,floating-point,typeerror,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]

导入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,39102,1]*(len(self.score_行)/2.0)
这就是不能将序列与“float”类型的非int相乘…有人能解决这个问题吗?我使用的是Python 3.6。在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) )
将列表与整数相乘时,会导致列表中的元素重复多次。当整数与字符串相乘时,也会观察到相同的行为。 您可以看到为什么此操作不支持与浮点相乘

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

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

你不能把那样的清单成倍增加。如果使用整数执行此操作,则列表将自身追加N次:[1,2,3]*3=[1,2,3,1,2,3,1,2,2,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)

self.blue1=[0,39102,1]*int(len(self.score_行)/2.0)


这里我用len把它转换成整数形式,很简单

这并不能为这个问题提供正确的答案,其他回答过的人也描述了同样的问题
self.blue1 = np.array([0, 39, 102,1])*len(self.score_lines)/2.0)