为什么循环第一次collatz()
返回1时循环不结束?
def collatz():
global number
if number % 2 == 0:
number = number // 2
print(number)
return number
else:
number = 3 * number + 1
print(number)
return number
try:
number = int(input('Please enter an integer except zero.\n'))
except ValueError:
print("ValueError: invalid value.")
number = int(input('You must enter an integer except zero.\n'))
while collatz() != 1: # if input(4), the output will be: 4 2 1 4 2 1
collatz()
# another way, which works:
while number != 1: --> # also input(4), the output will be: 4 2 1
collatz()
最佳答案
在第一种方法中,每个循环中两次调用collatz()
:
一次进入while collatz() != 1:
,将测试返回值。如果此时返回1,则将退出循环。
第二次进入循环体内。这次,返回值没有经过测试,因此即使它是1,您也只需要回到while
行。
因此,当您输入4时,输出为:
4(您的输入)
2(边线)
1(正文-循环不会结束)
4(边线)
2(身体)
1(当行-现在循环结束)
您也可以像这样编写循环:
while collatz() != 1:
pass # do nothing
一点建议:
避免使用全局变量,它们会很快变成邪恶
单独的关注点:例如,让您的
collatz()
函数将数字作为参数,然后返回下一个值。将打印内容保留到代码的其余部分。尽量不要重复自己。
您可以这样修改它,例如:
def collatz(n):
if n % 2 == 0:
n = n // 2
else:
n = 3 * number + 1
return n
try:
number = int(input('Please enter an integer except zero.\n'))
except ValueError:
print("ValueError: invalid value.")
number = int(input('You must enter an integer except zero.\n'))
while True: # infinite loop
number = collatz(number)
print(number)
if number == 1:
# we break out of the loop
break
关于python - 过程控制问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44705996/