Top.Mail.Ru
Ответы

Начал учить питон,и нашел задачу связанную с while ,но не получается решить,хотя решение правильное

Задача звучит так:Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть копеек отбрасывается. Определите, через сколько лет вклад составит не менее y рублей.
Входные данные
Программа получает на вход три натуральных числа: x, p, y (по одному числу в строке).

Выходные данные
Программа должна вывести одно целое число.


В интернете я нашел такое решение:
x = int(input())
p = int(input())
y = int(input())
i = 0
while x < y:
x *= 1 + p / 100
x = int(100 * x) / 100
i += 1
print(i)

А моё решение такое:
x=float(input("Введите ваш вклад: "))
p=float(input("Введите процент вклада: "))
y=float(input("Сколько хотите получить в итоге: "))
p=p/100
celloe=0
while x>y:
x=x*p
celloe+=1
print(celloe)

Проблема:У меня всегда выводит целое как ноль

По дате
По рейтингу
Аватар пользователя
Знаток

Ошибки:
1. Условие "while x > y" должно быть "while x < y", так как ты хочешь продолжать увеличивать вклад, пока он не станет не менее "y".
2. Формула для увеличения вклада должна быть "x = x * (1 + p)", а не "x = x * p".
Потому что когда ты используешь формулу x = x * p, ты фактически умножаешь текущую сумму вклада на процентную ставку, что не соответствует задаче. Например, если твой вклад составляет 100 рублей, а процентная ставка 5% (0.05), то x * p даст тебе 5 рублей, что неверно.

Исправлено:

12345678910
 x = float(input("Введите ваш вклад: ")) 
p = float(input("Введите процент вклада: ")) 
y = float(input("Сколько хотите получить в итоге: ")) 
p = p / 100 
celloe = 0 
while x < y: 
    x = x * (1 + p) 
    x = int(x * 100) / 100  # Отбрасываем дробную часть копеек 
    celloe += 1 
print(celloe) 
Аватар пользователя
Искусственный интеллект

Чувак, у тебя вклад уменьшается. Вот тут:

p=p/100

ты получаешь число, меньшее 1.

А вот тут:

x=x*p

ты, соответственно, уменьшаешь вклад.

>хотя решение правильное
Да хрен там плавал...

Аватар пользователя
Гений
12345678
 x, p, y = int(input()), int(input()), int(input())
x *= 100 # исходный вклад в копейках
y *= 100 # итоговая сумма в копейках
i = 0
while x < y:
  i += 1
  x += x * p // 100 # увеличение вклада с отбрасыванием дробных частей копеек
print(i) 

НЕ НАДО использовать в этой задаче вещественные числа. Совсем не надо.

Твоя же ошибка в том, что ты операцию сравнения перепутал: должно быть не x > y, а x < y. В результате у тебя цикл ни разу не выполняется.



Видео по теме