Member 13999350 Ответов: 4

Как мне...получить свой код, чтобы вернуть n


это, предполагают, чтобы вернуться н но это не поможет, мольбы

Что я уже пробовал:

ef pay_off_period(PV, PMT, i):
лет = 0
n = лет
инвестиции = 0
FV = 0
в то время как FV <= PV:
проценты = FV*(i)
FV += проценты
FV += PMT
годы =+1
#инвестиции =раунд(FV/(1 + i)**n,1)

return int(n)

Richard MacCutchan

В начале вашего модуля вы устанавливаете years = 0, и n = years то есть ноль. В конце концов вы вернетесь n, но значение n никогда не менялось.

Member 13999350

посмотрите внутрь функции я увеличил годы так что она действительно меняется

Dave Kreskowiak

Годы меняются. н-нет. Нигде больше в вашем коде нет ничего, что начиналось бы с n = что-то.

Выполнение чего-то вроде n = years не означает, что всякий раз, когда годы меняются, n также будет меняться.

4 Ответов

Рейтинг:
2

Patrice T

Цитата:
это, предполагают, чтобы вернуться н но это не поможет, мольбы

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Обратная сторона этого решения:
- Это DIY, вы один отслеживаете проблему и находите ее корни, которые ведут к решению.
Положительная сторона этого решения:
- Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.

Вторичное воздействие
- Вы будете гордиться тем, что сами находите Жуков.
- Ваши навыки обучения улучшатся.

Вы должны довольно быстро найти, что не так.

Отладчик - Википедия, свободная энциклопедия[^]
27.3. ПДБ — отладчика Python — питон 3.6.1 документации[^]
Отладка в Python | Python покоряет Вселенную[^]
pdb – интерактивный отладчик - Python модуль недели[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
13

Member 13999350

def pay_off_period(PV, PMT, i):
n = 0

в то время как 0 < PV:
PV = PV * (1+i) - PMT
n += 1

возвращение(Н)
print(pay_off_period(1578934, 15000*12, 0.1045))


Рейтинг:
1

Richard MacCutchan

Вам нужно превратить этот код в вызываемый модуль. Видеть 6. Модулей, — документации по языку Python 3.4.9 [^].


Member 13999350

Нет импорта allwed

Richard MacCutchan

Какое это имеет отношение к импорту? Я предлагаю вам ознакомиться с документацией.

Member 13999350

Я думал, что вы добавляете некоторые входные данные к моему вопросу, этот документ говорит об импорте модулей, а это не то, что меня интересует.

Richard MacCutchan

В нем также объясняется, как определить модуль, что вам и нужно сделать. Вам не нужно ничего импортировать. Смотреть также 4. Больше инструментов, управление потоком — 3.4.9 документации по языку Python [^].

Member 13999350

ладно ,мой плохой, я виноват, не заявив, что только эта функция разрешена, и все должно быть внутри нее

Richard MacCutchan

Ну, это то, что у вас уже есть. Я не понимаю, в чем твоя проблема.

Member 13999350

смотрите, когда я вызываю эту функцию со следующим | pay_off_period(1635153, 15000*12, 0.1045) == 30 это ответ который я должен получить но я его не получаю вот в чем проблема

Richard MacCutchan

Это неверное утверждение. Вам нужно захватить возвращаемое значение, а затем отобразить его.

value = pay_off_period(1635153, 15000*12, 0.1045)
print(value)

Member 13999350

он ничего не возвращает

Member 13999350

не могли бы вы отредактировать мой код, чтобы увидеть, что я делаю неправильно, потому что в данный момент я действительно не следую

Member 13999350

def pay_off_period(PV, PMT, i):
n = 0
FV = 0
КРЕДИТ = 0
в то время как кредит < PV :
проценты = FV*(i)
FV += проценты
FV += PMT
n += 1
кредит = FV/(1 +i )**n

return int(n)
print(pay_off_period(1578934, 15000*12, 0.1045)) это мой полный код и он не перенастраивается

Richard MacCutchan

Да, он действительно возвращает n, но вы его не ловите. Посмотрите на мой предыдущий ответ, это то, что вам нужно сделать в конце вашего модуля.

Кроме того, вам не нужно int(n) в конце, n-это уже число.

Рейтинг:
0

CPallini

Ты имеешь в виду

def pay_off_period(PV, PMT, i):
  years = 0
  FV = 0
  while FV <= PV:
    interest = FV*(i)
    FV += interest
    FV += PMT
    years += 1
  return years
?


Member 13999350

когда я вызываю функцию, например

pay_off_period(1635153, 15000*12, 0.1045) == 30

тот ,что выше, возвращает 7, и мне не разрешено использовать никакие внешние функции, кроме тех, которые я написал, то есть импорт не разрешен.