Проблема с работой цикла for заключается в том, что условие остановки (i < 100000) может не выполняться, если значение i увеличивается на 0.1 каждую итерацию. Таким образом, цикл может продолжаться бесконечно.
Для нахождения значения первоначального взноса (ПВ), при котором новый КДН равен максимальному значению КДН (kdn_max), можно воспользоваться методом подбора. Например, можно изменять значение ПВ в цикле и проверять, не достиг ли новый КДН максимального значения. Как только это произойдет, можно вывести найденное значение ПВ. Например:
```python
kdn_max = calculate_kdn(100000, 0.1, 0.05, 0.07) # вычисляем максимальное значение КДН
pv = 0
while True:
new_kdn = calculate_kdn(pv, 0.1, 0.05, 0.07) # вычисляем КДН для текущего значения ПВ
if new_kdn >= kdn_max:
print(f"Значение первоначального взноса (ПВ): {pv}")
break
pv += 0.01
```
Этот код будет пробегать значения первоначального взноса (ПВ) и находить тот, при котором новый КДН достигнет максимального значения.