【问题标题】:Collatz Conjecture and printing statementsCollat​​z 猜想和打印陈述
【发布时间】:2011-10-30 20:32:29
【问题描述】:

我正在尝试创建一个简单的程序来将 Collat​​z 猜想的语句应用于用户可以输入的整数,我有:

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'

我看不出这行有什么错误。

另外,我还没有能够测试它,这看起来是否可以正常工作?

【问题讨论】:

  • 修复语法错误后,您需要添加loop
  • 您还需要在某处定义n,最好是input() 的结果(无论如何应该是raw_input(),因为您显然使用的是Python 2)。你至少读过一点 Python 教程吗?

标签: python syntax collatz


【解决方案1】:

Python 区分大小写。使用“打印”而不是“打印”。

【讨论】:

    【解决方案2】:

    嗯,你的语法错误是python区分大小写,所以你需要print而不是Print

    但是你有更多的问题:

    • 'n' 打印字符串 n。我认为你想要的是n 来打印变量的值(或者如果没有,那么你可以只制作一个字符串“... true for n”)。

    • 最后(我认为),为了运行函数collatz,你不需要def;这只是为了定义。

    【讨论】:

    • 不需要“(我认为)”;确实是这样。
    • 其实我把'I think'改成'finally',因为我不确定是不是有更多的问题!
    • 啊,好吧。您可以将其替换为“也”,因为没有循环(或递归),该函数只会执行计算的第一步。
    • 哦,collat​​z 是内置函数吗?在这方面我很困惑。
    • George,不,我的意思是,在你定义之后,你不需要在最后一行使用def,以便使用 i> 它。
    【解决方案3】:

    更多问题:

    1. 停止条件应该是n == 1,而不是n == 0
    2. 您必须重复或迭代,因为您只是迈出了一步。
    3. 检查输入,确保它确实是一个正数。

    【讨论】:

    • 关于它是 1 和 0 的好点,而且我正在完成教程,所以没有使用 abs() 和 int() 我不确定第 3 步该怎么做。另外应该怎么做它被修改为迭代?
    • 我也删除了 elif n == 1 以支持 while n > 1
    • 对于输入检查,if n < 1: 然后您可以 a) 抱怨 b) 转换输入,无论您认为更好。什么语法错误?如果将整个 if/elif/else 结构替换为 while n > 1:,它应该可以工作。
    【解决方案4】:
     def collatz_steps(n):
        steps=0
        if n==1:
            return 0 
        else:
            while n!=1:
                if n%2==0:
                    n=n/2
                    steps+=1
                else:
                    n = 3*n+1
                    steps+=1
            return steps
    

    【讨论】:

    • 这个例子没有正确对齐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多