#python #floating-point #typeerror
#python #с плавающей запятой #ошибка типа
Вопрос:
импортируйте класс 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)
то есть не удается умножить последовательность на не-int типа ‘float’ … кто-нибудь, пожалуйста, может решить это?..Я использую Python 3.6
Ответ №1:
>>> [1,2] * 2
[1, 2, 1, 2]
>>>'abc' * 3
'abcabcabc'
Когда вы умножаете список на целое число, это приводит к тому, что элементы списка повторяются так много раз. Такое же поведение наблюдается при умножении целых чисел на строки.
Вы можете видеть, почему умножение с помощью float не поддерживается для этой операции.
Если вы хотите умножить каждый элемент списка на число с плавающей точкой, вы можете сделать это:
>>>ls = [num * 5.5 for num in [1,2,3]]
>>>ls
[5.5, 11.0, 16.5]
Ответ №2:
Когда вы умножаете список на x
в python, он не умножает каждый элемент списка, он только повторяет последовательность 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) )
Ответ №3:
self.blue1 = [0, 39, 102,1]*int(len(self.score_lines)/2.0)
Здесь я использовал len для преобразования его в целочисленную форму, просто!
Комментарии:
1. Это не дает правильного ответа на вопрос, имеет ту же проблему, описанную другими людьми, которые ответили
Ответ №4:
Вы не можете умножать список подобным образом. Если вы сделаете это с целым числом, список будет добавлен 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)