过程控制问题
Process Control Issue
为什么第一次循环不结束collatz()
returns 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:
中,其中测试 return 值。如果此时returns 1,则退出循环
- 第二次在循环体内。这次,return 值没有被测试,所以即使它是 1,你也只是回到
while
行。
所以,当你输入 4 时,你的输出是:
- 4(您的输入)
- 2(同时行)
- 1(正文 - 所以循环不会结束)
- 4(同时行)
- 2(正文)
- 1(while 行 - 现在循环结束)
您也可以像这样编写循环:
while collatz() != 1:
pass # do nothing
一点建议:
- 避免使用全局变量,它们很快就会变坏
- 分离关注点:例如,让您的
collatz()
函数将一个数字作为参数,return 下一个值。将打印留给其余代码。
- 尽量不要重复自己。
您可以这样修改,例如:
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
为什么第一次循环不结束collatz()
returns 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:
中,其中测试 return 值。如果此时returns 1,则退出循环 - 第二次在循环体内。这次,return 值没有被测试,所以即使它是 1,你也只是回到
while
行。
所以,当你输入 4 时,你的输出是:
- 4(您的输入)
- 2(同时行)
- 1(正文 - 所以循环不会结束)
- 4(同时行)
- 2(正文)
- 1(while 行 - 现在循环结束)
您也可以像这样编写循环:
while collatz() != 1:
pass # do nothing
一点建议:
- 避免使用全局变量,它们很快就会变坏
- 分离关注点:例如,让您的
collatz()
函数将一个数字作为参数,return 下一个值。将打印留给其余代码。 - 尽量不要重复自己。
您可以这样修改,例如:
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