Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按照collatz顺序合计步骤?_Python_Python 3.x - Fatal编程技术网

Python 按照collatz顺序合计步骤?

Python 按照collatz顺序合计步骤?,python,python-3.x,Python,Python 3.x,我不确定如何使用以下代码获取collatz序列中的步骤总数: number = int(input('Enter a number, please:')) while number > 1: if number % 2 == 0: number = number / 2 print(number) else: number = number * 3 + 1 print(number

我不确定如何使用以下代码获取collatz序列中的步骤总数:

number = int(input('Enter a number, please:'))  

while number > 1:  
    if number % 2 == 0:  
        number = number / 2  
        print(number)  
    else:  
        number = number * 3 + 1  
        print(number)  
    # print('Steps required:',NEED TO FILL , end='')  

似乎您只想简单地计算
while
循环中采取的步骤。添加
count
变量并打印结果如下:

number = int(input('Enter a number, please:'))

#initiate step count
steps = 0
while number > 1:
    if number % 2 == 0:
        number = number / 2
        print(number)
    else:
        number = number * 3 + 1
        print(number)
    # add a step for each loop
    steps += 1
print('Steps required: {}'.format(steps))
在shell中运行此操作将产生:

$ python3 -i collatz.py 
Enter a number, please:14
7.0
22.0
11.0
34.0
17.0
52.0
26.0
13.0
40.0
20.0
10.0
5.0
16.0
8.0
4.0
2.0
1.0
Steps required: 17
试试这个:

def collatz(number): if(number%2==0): n=number//2 print(n,"\t",end="") return n else: ev=3*number+1 print(ev,"\t",end="") return ev num1=input("Enter a number: \n") step=0 try: num=int(num1) if(num==1): print("Enter an integer greater than 1") elif(num>1): a=collatz(num) while(True): if(a==1): step=step+1 break else: a=collatz(a) step+=1 print("\nNumber of steps needed:",step) else: print("Please, Enter a positive integer to begin the Collatz sequence") except: print("please, Enter an integer") def collatz(编号): 如果(数字%2==0): n=数字//2 打印(n,“\t”,end=”“) 返回n 其他: ev=3*编号+1 打印(ev,“\t”,end=”“) 返回电动汽车 num1=输入(“输入一个数字:\n”) 步长=0 尝试: num=int(num1) 如果(num==1): 打印(“输入大于1的整数”) elif(数值>1): a=项圈(个) 虽然(正确): 如果(a==1): 步骤=步骤+1 打破 其他: a=collatz(a) 步骤+=1 打印(“\n需要的步骤数:”,步骤) 其他: 打印(“请输入一个正整数以开始Collatz序列”) 除: 打印(“请输入一个整数”)
您提到的
while
循环在哪里?提示:您不想执行
number=format(number/2,.0f')
。顺便说一句,这种模式被称为Collatz序列。你不能在一行中获得所有信息,因为用户必须点击
Enter
来输入他们的号码。所以在你的例子中,在10和5之间会有一条换行符,但是所有其他的东西都可以在一条线上。您只需执行
print(number,end='')
谢谢您指出序列的名称,我没有注意到,但我的示例没有正确复制@pm2如果您是正确的,在用户点击enter之后,每个值(5,16,8,4,2,1)都将分别出现在新行上。因此我对代码进行了一些修改,但我仍然不确定如何使用以下代码获取总步骤数:
number=int(输入('enter a number,please:'))当数字>1时:如果数字%2==0:number=number/2打印(数字)否则:number=number*3+1打印(数字)#打印('Steps required:',NEED TO FILL,end='')你们能告诉我要添加哪些代码行吗