Во время цикла: как установить (что-то = целое число) только один раз во время цикла - PullRequest
0 голосов
/ 04 ноября 2019

Я не могу понять, как установить и скорость, и принципал на их заданные числа только один раз

В этом цикле он постоянно сбрасывает скорость = 5 и принципал = 9000, но я хочу, чтобы цикл продолжался там, гдепринципал увеличивается до 10 000, 11 000, 12 000 и т. д.

N = 5
rate = 5
while rate <= 15: 
    principal = 9000
    principal = principal + 1000
    while principal <= 15000:
        simple = principal * (1 + (rate/100) * N)
        compound = principal * (1 + (rate/100)) ** N
        print(str(rate) + "%", principal, simple, compound)

При запуске он должен выглядеть следующим образом:

5% $10000 $12500.00 $12762.82
5% $11000 $13750.00 $14039.10
5% $12000 $15000.00 $15315.38
5% $13000 $16250.00 $16591.66
5% $14000 $17500.00 $17867.94
5% $15000 $18750.00 $19144.22
10% $10000 $15000.00 $16105.10
10% $11000 $16500.00 $17715.61
10% $12000 $18000.00 $19326.12
10% $13000 $19500.00 $20936.63
10% $14000 $21000.00 $22547.14
10% $15000 $22500.00 $24157.65
15% $10000 $17500.00 $20113.57
15% $11000 $19250.00 $22124.93
15% $12000 $21000.00 $24136.29
15% $13000 $22750.00 $26147.64
15% $14000 $24500.00 $28159.00
15% $15000 $26250.00 $30170.36

Ответы [ 4 ]

0 голосов
/ 04 ноября 2019

С одним for-loop:

  • Явным образом создайте список rate и principal, используя range(start, stop + 1, step)
    • *, распаковывает range в list, это то же самое, что и list(range(1, 5))
  • Затем используйте itertools.product для создания комбинаций или rate и principal и выполните итерацию по генераторус печатью for-loop
  • с использованием f-string (например, print(f'{variable}'))
from itertools import product

N = 5
rate = [*range(5, 16, 5)]
principal = [*range(10000, 16000, 1000)]

for v in product(rate, principal):
    simple = v[1] * (1 + (v[0]/100) * N)
    compound = v[1] * (1 + (v[0]/100)) ** N
    print(f'{v[0]}% ${v[1]} ${simple} ${compound:0.02f}')

Вывод:

5% $10000 $12500.0 $12762.82
5% $11000 $13750.0 $14039.10
5% $12000 $15000.0 $15315.38
5% $13000 $16250.0 $16591.66
5% $14000 $17500.0 $17867.94
5% $15000 $18750.0 $19144.22
10% $10000 $15000.0 $16105.10
10% $11000 $16500.0 $17715.61
10% $12000 $18000.0 $19326.12
10% $13000 $19500.0 $20936.63
10% $14000 $21000.0 $22547.14
10% $15000 $22500.0 $24157.65
15% $10000 $17500.0 $20113.57
15% $11000 $19250.0 $22124.93
15% $12000 $21000.0 $24136.29
15% $13000 $22750.0 $26147.64
15% $14000 $24500.0 $28159.00
15% $15000 $26250.0 $30170.36
0 голосов
/ 04 ноября 2019

Вам нужно увеличить скорость внутри цикла while, чтобы он закончился:

while rate <= 15:
    rate += 5
0 голосов
/ 04 ноября 2019

Спасибо всем за помощь, я разобрался:)

N = 5
rate = 5
principal = 10000
while principal <= 15000:
    simple = principal * (1 + (rate/100) * N)
    compound = principal * (1 + (rate/100)) ** N
    print(str(rate) + "%", "$" + str(principal), "$" + str(simple), "$" + str(compound))
    principal += 1000
    if principal >= 15001:
        rate += 5
        principal = 10000
    if rate >= 20:
        principal = 15001
0 голосов
/ 04 ноября 2019

Инициализируйте коэффициент за пределами while loop и увеличьте его сначала while

N = 5
rate = 0
while rate < 15:
    rate += 5
    principal = 9000
    while principal < 15000:
        principal = principal + 1000
        simple = principal * (1 + (rate/100) * N)
        compound = principal * (1 + (rate/100)) ** N
        print(str(rate) + "%", principal, simple, compound)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...