Помогите правильно написать цикл в python с учетом значений из 3 столбцов
Есть 3 столбца range_1, range_2, range_3:
| range_1 |
|---|
| 26365 |
| 3757 |
| 3723 |
| range_2 |
|---|
| -275,08 |
| 757,74 |
| 668,44 |
| range_3 |
|---|
| -1 |
| 1 |
| -1 |
Также есть 2 значения sum_1 = 75644.
Нужно написать цикл который будет проверять значение столбца range_2 равняется ли оно максимальному значению данного столбца, если равняется, то необходимо прибавить значение range_3 к значению range_1 по строке, по которой было найдено максимальное значение. Цикл должен повторяться пока сумма значений по столбцу range_3 не достигнет sum_1.
def rounding(range_1, range_2, range_3, summ):
if sum(range_1) != summ:
for i in range_1:
for j in range_2:
for z in range_3:
if range_2[j] == max(range_2):
range_1[i] += range_3[z]
Выдает ошибку KeyError: -1.837480750236864
Подскажите как правильно написать цикл? Так как я не совсем понимаю как использовать в цикле значения двух столбцов. Пишу код на python. Заранее спасибо.
Ответы (2 шт):
Если вам нужно проверять значения по всем трём столбцам в одной и той же строке и все столбцы имеют одно и то же число строк, то делается это по-другому - просто итерируетесь по строке и всё, индекс строки один, не нужно никаких вложенных циклов. Ну и не if, конечно, а цикл while должен быть:
while sum(range_1) != summ:
for i in range(len(range_1)):
if range_2[i] == max(range_2):
range_1[i] += range_3[i]
А вообще числа с плавающей точкой - штука коварная, я не уверен, что точное совпадение будет достигнуто и цикл закончится. Возможно, нужно проверять совпадение с какой-то точностью, а не абсолютно.
Я вообще не понял зачем здесь циклы. Если разбить задачу на этапы, то
- Найти индекс максимального элемента в столбце roundin_1.
- Проверить, что значением home_label по найденному индексу можно увеличить значение value_1 по найденному индексу до значения sum_1.
- Просто добавить к этому значению необходимую разницу.
sign = lambda x: -1 if x < 0 else 1
def rounding(_label, _roundin, _value, _summ):
max_roundin = max(_roundin)
max_index = _roundin.index(max_roundin)
summ_value = sum(_value)
increment = _label[max_index]
delta = _summ - summ_value
if sign(delta) != increment:
print("It's impossible to reach the result.")
else:
_value[max_index] += delta
label = [-1, 1, -1]
roundin = [-275.08, 757.74, 668.44]
value = [26365, 3757, 3723]
summ = 75644
rounding(label, roundin, value, summ)
print(value)
[26365, 45556, 3723]