0

如何将整数作为输入,其输出将是该数字之后的Collat​​z 序列。该序列由以下规则计算:

  • 如果 n 是偶数,则下一个数字是n/2
  • 如果 n 是奇数,则下一个数是3n + 1

例如,从 11 开始

11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

这是我现在的代码:

n = int(raw_input('insert a random number'))

while n > 1:
    if n%2 == 0:
        n_add = [n/2]
        collatz = [] + n_add
    else:
        n_add2 = [3*n + 1]
        collatz = [] + n_add2 
        print collatz

如果我执行此操作并插入一个数字,则不会发生任何事情。

4

5 回答 5

1

您永远不会更改数字 n,因此每次都将相同。如果数字是奇数,您也只会打印。此外,方括号[]表示一个数组 - 我不确定您的目标是什么。我可能会这样重写它:

n = int(raw_input('insert a random number'))

while n > 1:
    if n%2 == 0:
        n = n/2
    else:
        n = 3*n + 1
    print n

您可能需要一些时间来比较和对比我正在执行的操作和您的指示 - 它几乎是逐字逐句的翻译(除了print

您的代码有点不清楚您是想在它们出来时将它们打印出来,还是想将它们全部收集起来并在最后打印出来。

于 2014-11-06T20:01:32.840 回答
1

您应该n每次都进行修改,这将满足您的要求:

n = int(raw_input('insert a random number'))   
while n > 1:
    n = n / 2 if not n & 1 else 3 * n + 1 # if  last bit is not set to 1(number is odd) 
    print n

## -- End pasted text --
insert a random number11
34
17
52
26
13
40
20
10
5
16
8
4
2
1

使用您自己的代码打印出每个 n:

n = int(raw_input('insert a random number'))

while n > 1:
    if n % 2 == 0:
        n = n / 2
    else:
        n = 3 * n + 1
    print n

或者将所有内容保存在列表中并在最后打印:

all_seq = []
while n > 1:
    if n % 2 == 0:
        n = n / 2
    else:
        n = 3 * n + 1
    all_seq.append(n)
print(all_seq)
于 2014-11-06T20:34:38.020 回答
0

我也一直在研究它一段时间,这就是我想出的:

def collatz (number): 
    while number != 1: 
        if number == 0: 
            break
        elif number == 2: 
            break
        elif number % 2 == 0: 
            number = number // 2 
            print (number) 
        elif number % 2 == 1: 
            number = 3 * number + 1 
            print (number)
    if number == 0: 
        print ("This isn't a positive integer. It doesn't count")
    elif number == 2: 
        print ("1")
        print ("Done!")
    elif number == 1: 
        print ("1")
        print ("Done!")

try:
    number = int(input("Please enter your number here and watch me do my magic: "))
except (ValueError, TypeError):
    print ("Please enter positive integers only")

try:
    collatz(number)
except (NameError):  
    print ("Can't perform operation without a valid input.")
于 2017-07-28T11:20:40.007 回答
0
def collatz(number):
    while number != 1:
        if number % 2 == 0:
            number = number // 2
            print(number)

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

try:
    num = int(input('Please pick any whole number to see the Collatz Sequence in action.\n'))
    collatz(num)
except ValueError:
    print('Please use whole numbers only.')
于 2016-02-17T19:34:17.890 回答
0

这是我的程序:

def collatz(number):
    if number % 2 == 0:
        print(number//2)
        return number // 2
    elif number % 2 == 1:
        print(3*number+1)
        return 3*number+1
    else:
        print("Invalid number")
    
number = input("Please enter number: ")
while number != 1:
    number = collatz(int(number))`

这个程序的输出:

Please enter number: 12
6
3
10
5
16
8
4
2
1
于 2020-08-25T17:07:02.957 回答