Гипотеза Коллатца и печатные утверждения

Я пытаюсь создать простую программу для применения утверждения гипотезы Коллатца к целому числу, которое может ввести пользователь, у меня есть:

def collatz(n):
    print n,
    if n % 2 ==0:
        n = n / 2
    elif n == 0:
        Print "Collatz Conjecture true for" , 'n'
    else:
        n = n *3 + 1

input("\n\nInsert a positive integer:")
def collatz(n)

Однако он говорит, что в строке есть синтаксическая ошибка:

Print "Collatz Conjecture true for" , 'n'

Я не вижу, какая ошибка в этой строке.

Кроме того, поскольку я еще не смог протестировать его, похоже, что он будет работать нормально?


person George Burrows    schedule 30.10.2011    source источник
comment
После того, как вы исправите синтаксические ошибки, вы захотите добавить петля.   -  person Petr Viktorin    schedule 31.10.2011
comment
Вы также захотите определить n где-нибудь, предпочтительно как результат input() (который в любом случае должен быть raw_input(), так как вы, очевидно, используете Python 2). Вы хоть немного прочитали учебник по Python?   -  person Tim Pietzcker    schedule 31.10.2011


Ответы (4)


Python чувствителен к регистру. Используйте «печать», а не «печать».

person Godeke    schedule 30.10.2011

Что ж, ваша синтаксическая ошибка заключается в том, что python чувствителен к регистру, поэтому вам нужно print, а не Print.

Но у вас больше проблем:

  • 'n' печатает строку n. Я думаю, что вы хотите, чтобы n напечатало значение переменной (или, если нет, вы можете просто сделать одну строку "... true for n").

  • Наконец (я думаю), чтобы запустить функцию collatz, вам не нужен def; это только для определения.

person Andrew Jaffe    schedule 30.10.2011
comment
Нет необходимости в «(я думаю)»; это действительно так. - person Petr Viktorin; 31.10.2011
comment
На самом деле, я вставил «я думаю», чтобы изменить «наконец», так как я не был уверен, что больше нет проблем! - person Andrew Jaffe; 31.10.2011
comment
Ах хорошо. Вы можете заменить это на «также», потому что без цикла (или рекурсии) функция будет выполнять только первый шаг вычисления. - person Petr Viktorin; 31.10.2011
comment
О, так это collatz встроенная функция? Я в замешательстве в этом отношении. - person George Burrows; 31.10.2011
comment
Джордж, нет, я имел в виду, что вам не нужен def в последней строке после того, как вы определили его, чтобы использовать его. - person Andrew Jaffe; 31.10.2011

Больше проблем:

  1. Условие остановки должно быть n == 1, а не n == 0.
  2. Вы должны повторяться или повторяться, так как вы делаете только один шаг.
  3. Проверьте ввод, убедитесь, что это действительно положительное число.
person Daniel Fischer    schedule 30.10.2011
comment
Хорошо, что это 1 и 0, также я работаю над учебником, так что не использую abs() и int(), я не уверен, что делать для шага 3. Также как его следует изменить для итерации? - person George Burrows; 31.10.2011
comment
Также я исключил elif n == 1 в пользу while n › 1 - person George Burrows; 31.10.2011
comment
Для проверки ввода if n < 1:, а затем вы можете а) пожаловаться б) преобразовать ввод, как вы считаете лучше. Какая синтаксическая ошибка? Если вы замените всю конструкцию if/elif/else на while n > 1:, она должна работать. - person Daniel Fischer; 31.10.2011

person    schedule
comment
Этот пример не выровнен должным образом. - person octopusgrabbus; 23.07.2012