Почему цикл не корректно работает?

Реализуйте функцию is_happy_number(), которая возвращает True, если число счастливое, и False — если нет. Количество итераций процесса поиска необходимо ограничить числом 10.
Воспользуйтесь вспомогательной функцией sum_of_square_digits(), которая принимает на вход число и возвращает сумму квадратов цифр этого числа.
Назовем счастливыми те числа, сумма квадратов цифр которого, в результате ряда преобразований, превратятся в единицу.
С первой частью задачи все вроде понятно:
def sum_of_square_digits(n):
	result = 0
	while n > 0:
		last = n % 10
		result += last * last
		n = n // 10
	return result

Вот 2 часть:
def is_happy_number(n):
	start = n
	result = 0
	while result != 1:
		result = sum_of_square_digits(n)
		n = result
		if result == start:
			return False
	return True
print(is_happy_number(8))

Цифра 8 - цикл не останавливается, цифра 7 - все корр
  • Вопрос задан
  • 93 просмотра
Решения вопроса 2
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Сказано же в задании надо граничить цикл 10 итерациями. А вы не ограничиваете. В этом и проблема.
8*8=64
6*6+4*4=52
5*5+2*2=29
2*2+9*9=85
8*8+5*5=...
И так очень и очень долго.
Ответ написан
Комментировать
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
def sum_of_square_digits(n):
    res = 0
    while n > 0:
        d = n % 10
        res += d * d
        n = n // 10
    return res

def is_happy_number(n):
    for _ in range(10):
        n = sum_of_square_digits(n)
        if n == 1:
            return True
    return False

print(is_happy_number(8))  # False
print(is_happy_number(7))  # True
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы