Collatz от автоматизировать скучные вещи - PullRequest
0 голосов
/ 28 января 2020

Я знаю, что есть несколько сообщений на этот вопрос. Но я не мог опубликовать свой код другим способом, кроме как задать вопрос. Может кто-нибудь, пожалуйста, помогите мне понять, как я могу предотвратить ввод n в функцию collatz каждый раз, когда выполняется глобальная область.

Напишите функцию с именем collatz (), которая имеет один параметр с именем number. Если число четное, то collatz () должно напечатать число // 2 и вернуть это значение. Если число нечетное, то collatz () должно напечатать и вернуть 3 * число + 1.

Затем напишите программу, которая позволяет пользователю вводить целое число и которая продолжает вызывать collatz () для этого числа до функции возвращает значение 1. (Удивительно, но эта последовательность на самом деле работает для любого целого числа - рано или поздно, используя эту последовательность, вы получите 1! Даже математики не уверены, почему. Ваша программа изучает то, что называется последовательностью Коллатца, иногда называется «простейшей невозможной математической задачей».) # Не забудьте преобразовать возвращаемое значение из input () в целое число с помощью функции int (); в противном случае это будет строковое значение. желаемый вывод

3 10 5 16 8 4 2 1

Проверка входных данных Добавьте операторы проб и исключений в предыдущий проект, чтобы определить, вводит ли пользователь не целую строку. Обычно функция int () вызывает ошибку ValueError, если ей передается нецелая строка, как в int ('puppy'). В предложении "исключение" выведите пользователю сообщение о том, что он должен ввести целое число.

def collatz(number):

    if number%2==0:
        number=number//2
        print(number)
    elif number%2==1:
        number=3*number+1
        print(number)

print('Enter number: ')
n=int(input())
while n!=1:
    collatz(n)

1 Ответ

0 голосов
/ 28 января 2020

Вы создали бесконечное l oop, так как ваш «n» не изменяется в пределах l oop и «n! = 1» никогда не встречается, пока пользователь не вводит «1 ”В начале.

Попробуйте это:

def collatz(number):
    if number % 2 == 0:
        number = number // 2
    else:
        number = 3 * number + 1

    print(number)
    return number

n = int(input("Enter number: "))
while n != 1:
    n = collatz(n)
...