Добро пожаловать в stackoverflow!
В настоящее время ваш код использует al oop там, где он не нужен, и не использует al oop там, где его можно использовать.
Stepping в ваш код:
for i in range(0,1):
Если мы изменим это на:
for i in range(0,1):
print (i)
Мы получим результат 0 - он запускается только один раз, поэтому нет необходимости l oop его - я не упоминаюсь в вашем коде, поэтому нет необходимости проходить через него l oop.
Вы можете использовать al oop для выделения вашего c массиву, но это не так. нужно, и я оставлю это как упражнение для себя.
К нему можно подойти другим, более эффективным способом.
Прежде всего, когда вы присваиваете переменные, попробуйте и сделайте их описательный и читабельный - вы потратите гораздо больше времени на возвращение к коду, чем на его чтение.
Я не знаю, какую систему вы описываете, поэтому я только дал обобщенные c имена :
import numpy as np
length_arrary=12
limit=2.75
value_to_be_assigned=18
energy_result=np.zeros(length_arrary)
Теперь мы действительно спрашиваем о двух вещах, сколько раз value_to_be_assigned разделить на предел (целое число) и то, что является остатком.
Python имеет две операции для этого деления этажа (//) и модуля, которые дают:
11//5 = 2.0
1%5 = 1.0
Так мы знаем, что первый (value_to_be_assigned // limit elements - 1) массива должен быть равен пределу, а конечный элемент должен быть равен value_to_be_assigned% limit
Наконец, Python имеет простой способ получить доступ к элементам списка - мы можем установить первые элементы x равными значению с помощью:
array[:x]=value
x просто должен быть целым числом.
Собрав его вместе, мы получим:
filled_values=int(value_to_be_assigned//limit)
energy_result[:filled_values]=limit
energy_result[filled_values] = value_to_be_assigned % limit
и мы можем проверить с
energy_result.sum() # gives us 18