gpt4 book ai didi

python - 过程控制问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:34 26 4
gpt4 key购买 nike

为什么循环在 collat​​z() 第一次返回 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()

最佳答案

在第一个方法中,您在每个循环中调用 collat​​z() 两次:

  • 一旦进入while collat​​z() != 1:,就会测试返回值。如果此时返回1,则退出循环。
  • 在循环体内第二次。这次,返回值没有经过测试,因此即使它是 1,您也只需返回到 while 行。

所以,当你输入4时,你的输出是:

  • 4(您的输入)
  • 2(同时行)
  • 1(正文 - 因此循环不会结束)
  • 4(同时行)
  • 2(正文)
  • 1(while 行 - 现在循环结束)

你也可以这样写你的循环:

while collatz() != 1:
pass # do nothing

一点建议:

  • 避免使用全局变量,它们很快就会变得邪恶
  • 单独的关注点:例如,让您的 collat​​z() 函数采用数字作为参数,并返回下一个值。将打印留给代码的其余部分。
  • 尽量不要重复自己的话。

你可以这样修改它,例如:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com