导入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
答案 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将其转换为整数形式,简单!