【发布时间】:2016-09-29 22:29:57
【问题描述】:
我正在尝试从“使用 Python 自动化无聊的东西”一书中编写一个 collatz 程序,但遇到了一些问题。我正在使用 python 3.5.2。这是项目大纲:
编写一个名为 collatz() 的函数,它有一个名为 number 的参数。如果 number 是偶数,那么 collatz() 应该打印 number // 2 并返回这个值。如果数字是奇数,那么 collatz() 应该打印并返回 3 * number + 1。然后编写一个程序,让用户输入一个整数,并在该数字上不断调用 collatz(),直到函数返回值 1。
我的代码:
def collatz(number):
if number % 2 == 0: #its even
print(number // 2)
return number // 2
elif number % 2 == 1: #its odd
print(3*number+1)
return 3*number+1
print('Type an integer: ')
num=int(input())
while(True):
if collatz(num) == 1:
break
# Or even simpler:
# while(collatz(num) != 1):
# pass
输出给了我一个无限循环:
Type an integer:
10
5
5
5
5
5
5
5
5
...
但是当我分解它并使用一个变量来存储返回值时,它就起作用了:
while(True):
num=collatz(num)
if num == 1:
break
输出:
Type an integer:
5
16
8
4
2
1
为什么会这样?我不明白为什么第一个程序不起作用。两者相似,但我只是选择直接在原始程序中测试返回值,而不是使用变量。 我会很感激任何帮助,谢谢。
【问题讨论】:
-
你的无限循环版本永远不会更新
num的值。 -
好吧,这对我来说是一个非常愚蠢的错误。好吧,它发生了......谢谢伙计。
标签: python variables while-loop