Python 自动化枯燥的任务-练习-拼贴功能

Python 自动化枯燥的任务-练习-拼贴功能,python,loops,Python,Loops,这里是初学者的问题 我刚刚尝试了一个将无聊的东西自动化的练习。我已经按照建议的格式完成了问题,首先定义了一个函数,如下所示: 编写一个名为collatz()的函数,该函数有一个名为number的参数。如果number为偶数,则collatz()应打印number//2并返回此值。如果number为奇数,则collatz()应打印并返回3*number+1 然后使用相同的函数,满足这些最小约束条件,编写满足以下要求的程序: 然后编写一个程序,让用户输入一个整数,并对该数字不断调用collatz()

这里是初学者的问题

我刚刚尝试了一个将无聊的东西自动化的练习。我已经按照建议的格式完成了问题,首先定义了一个函数,如下所示:

编写一个名为collatz()的函数,该函数有一个名为number的参数。如果number为偶数,则collatz()应打印number//2并返回此值。如果number为奇数,则collatz()应打印并返回3*number+1

然后使用相同的函数,满足这些最小约束条件,编写满足以下要求的程序:

然后编写一个程序,让用户输入一个整数,并对该数字不断调用collatz(),直到函数返回值1

我已经按照上面的规则生成了一个以1结尾的数字序列,但是我的程序将序列中的每个数字打印三次。有人能解释为什么会这样吗

非常感谢你的帮助

def collatz(number):
    if int(number) % 2 == 0:
        print(int(number)//2)
        return int(number)//2
    else:
        print(3 * int(number) + 1)
        return 3 * int(number) + 1

collatz(5)    
print('Enter a number')

entry = input()

while collatz(entry) != 1:
    collatz(entry)
    entry = collatz(entry)

您的循环应该如下所示:

entry = input()
while entry != 1:
    entry = collatz(entry)

您的循环应该如下所示:

entry = input()
while entry != 1:
    entry = collatz(entry)

您正在调用函数3次,并且函数中有一个
print
调用

只调用该函数一次,我将从
collatz
方法中删除
print
语句,并仅在调用循环中删除
print
,例如:

In []:
def collatz(number):
    if number % 2 == 0:
        return number//2
    return 3*number + 1

entry = int(input("Enter a number: "))
print(entry)

while entry != 1:
    entry = collatz(entry)
    print(entry)

Out[]:
Enter a number: 10
10
5
16
8
4
2
1

您正在调用函数3次,并且函数中有一个
print
调用

只调用该函数一次,我将从
collatz
方法中删除
print
语句,并仅在调用循环中删除
print
,例如:

In []:
def collatz(number):
    if number % 2 == 0:
        return number//2
    return 3*number + 1

entry = int(input("Enter a number: "))
print(entry)

while entry != 1:
    entry = collatz(entry)
    print(entry)

Out[]:
Enter a number: 10
10
5
16
8
4
2
1
您可以尝试:

def collatz(编号):
如果数字==0:
返回“使用0以外的整数重试”
elif编号==1:
返回1
elif编号%2==0:
n=数字//2
打印(n)
elif编号%2==1:
n=3*数字+1
打印(n)
而n!=1:
n=collatz(n)
返回n
返回n

第15行中的最后一条语句
返回n
是可选的。

您可以尝试:

def collatz(编号):
如果数字==0:
返回“使用0以外的整数重试”
elif编号==1:
返回1
elif编号%2==0:
n=数字//2
打印(n)
elif编号%2==1:
n=3*数字+1
打印(n)
而n!=1:
n=collatz(n)
返回n
返回n


第15行中的最后一条语句
return n
是可选的。

它会打印三次,因为您在三个不同的位置调用函数。首先调用
collatz(5)
,然后在每个
while
循环(
while collatz(entry)
)上调用它,然后在循环中再调用它两次。结合使代码看起来更好的方面,
1
您不需要在每个实例上执行
int(number)
,事实上,您可能可以假设将传递
int
,并去掉所有
int()
。另外,您可能只需去掉print语句,只需使用
return
即可将其打印三次,因为您在三个不同的位置调用该函数。首先调用
collatz(5)
,然后在每个
while
循环(
while collatz(entry)
)上调用它,然后在循环中再调用它两次。结合使代码看起来更好的方面,
1
您不需要在每个实例上执行
int(number)
,事实上,您可能可以假设将传递
int
,并去掉所有
int()
。另外,您也可以不用打印语句,直接使用
return
Thank Błotosmętek。我按照建议更改了循环,现在可以工作了。不过,我还是有点困惑。如果您能解释一下,如果我运行程序并在提示时输入1,尽管while循环的条件为false,但它仍然会运行,我将不胜感激?很多人我想我设法弄明白了。。。我猜输入最初是作为字符串计算的?我对代码做了如下更改,现在可以使用了--谢谢你的帮助谢谢Błotosmętek。我按照建议更改了循环,现在可以工作了。不过,我还是有点困惑。如果您能解释一下,如果我运行程序并在提示时输入1,尽管while循环的条件为false,但它仍然会运行,我将不胜感激?很多人我想我设法弄明白了。。。我猜输入最初是作为字符串计算的?我对代码做了如下更改,现在可以使用了--谢谢你的帮助