2016-08-10 2 views
-2

Я пытаюсь создать программу, которая проверяет, является ли введенный номер happy number.Проверка на счастливое число - инструкция else не работает

Мой код находит каждое из чисел после возведения в квадрат и добавления, но когда он достигает 1, я ожидаю, что он напечатает «это счастливое число».

Я не могу увидеть что-то не так с кодом, но я мог бы пропустить что-то простое.

Вот код:

number = raw_input('What number?') 
dictionary = {} 
counter = 0 
counter_2 = 0 

while counter_2 < 20: 
    counter_2 += 1 
    if number != 1:   
     for n in str(number): 
      n = int(n)**2 
      counter += 1 
      dictionary ['key{}'.format(counter)] = n 

     added = sum(dictionary.values()) 
     dictionary = {} 
     number = str(added)    
     print number 

    else: 
     print 'that is a happy number' 
+4

номер является строкой, и вы сравниваете его с Int – levi

+1

BTW, 'не номер == 1' лучше записать в виде' числа! = 1'. – Barmar

+0

Поскольку 'number' уже является строкой, вам не нужно использовать' str (number) '. – Barmar

ответ

0

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

Да, что-то простое number = raw_input('What number?') и number = str(added) делают number в string, но все же вы хотите проверить, не является ли это целое значение 1, которое всегда будет истинным, поэтому оператор else не работает.

Теперь я не слишком уверен, для чего используется этот словарь. Может быть, сохранить значения, которые уже были рассчитаны, чтобы предотвратить дальнейшие вычисления? Это хорошо, но вот решение, которое уже отлично работает для первых 1000 счастливых чисел.

Во-первых, две функции для вычисления суммы квадратов для числа. Обратите внимание, что преобразование числа в строку, а повторение итерации над символами и возврат к целому числу - лишние накладные расходы.

square = lambda x: x**2 

def square_digits(x): 
    square_sum = 0 
    while x > 0: 
     square_sum += square(x % 10) 
     x /= 10 
    return square_sum 

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

def check_happy(n, limit=20): 
    counter = 0 
    while n != 1 and counter < limit: 
     counter += 1 
     n = square_digits(n) 
    else: 
     return counter != limit 

А, а затем просто проверить ваше значение

number = int(raw_input('What number?')) 

if check_happy(number): 
    print number, 'is a happy number' 

Пример вывода.

What number? 19 
19 is a happy number 
+0

Спасибо, что работает сейчас. Я использовал словарь, чтобы можно было использовать любое количество цифр во введенном числе. – Andy

Смежные вопросы