具有'计数'的3n + 1序列函数

时间:2017-10-03 02:25:40

标签: python python-3.x

def seq3np1(n):

    count = 0

    """ Print the 3n+1 sequence from n, terminating when it reaches 1."""

    while(n != 1):

        if(n % 2) == 0:        # n is even
            n = n // 2
            count += 1

        else:                 # n is odd
            n = n * 3 + 1
            count += 1
    return count



def main():

    num=int(input("what number do you want to put?: "))
    seq3np1(num)
    print("This is the starting number: ", num)
    print("Number of iterations:", count)

main()

这是我现在的代码,我必须这样做

  
      
  • seq3np1函数跟踪并返回计数
  •   
  • 询问用户范围值的上限
  •   
  • 使用范围(包含)

  •   
  • 有一个绘图函数,它将迭代次数作为参数

  •   
  • 根据seq3np1
  • 返回的最大值绘制结果并更新世界坐标   
  • 在图表上打印到目前为止的最大值
  •   

但如果我尝试在main函数上打印'count',则表示count未定义。我应该怎么做才能打印主函数?

3 个答案:

答案 0 :(得分:0)

函数中定义的变量属于该函数namespace;它们不能在函数的scope之外访问。 (命名空间和范围是你应该在python文档中查找和学习的词)

main中,您必须将seq3np1返回的结果分配给count

num=int(input("what number do you want to put?: "))
count = seq3np1(num)     # <--- Here
print("This is the starting number: ", num)
print("Number of iterations:", count)

答案 1 :(得分:0)

count在seqnp1函数中定义,当该函数退出时,count变量不再可用。

因此,您可以将seqnp1函数的返回值存储到变量中,然后使用它。

修改功能中的行:

seq3np1(num)

count = seq3np1(num)

它将按预期工作。

答案 2 :(得分:0)

在main中定义变量count,然后是 将返回值从seq3np1()存储到该变量。

您目前唯一的count变量位于seq3np1,其拥有自己的范围。
那个功能&#34;返回&#34; count为主,但您不会将其存储在main中的任何位置,因此您已丢失该返回值。

在main中你应该替换函数调用
seq3np1(num)
与行
count = seq3np1(num)

请注意,count中的这个新变体main()count函数中定义的seq3np1()不同。

您甚至可以更改主体中的count变量名称 因此,您可以通过在count中使用以下内容而不是上述修复来查看它与seq3np1()main()变量的不同之处:

numIterations = seq3np1(num)
然后
print("Number of iterations:", numIterations)