我想从'自动化枯燥的东西与Python书',但已遇到一些问题编写collatz程序。我正在使用python 3.5.2。以下是项目大纲:使用while循环和变量
编写一个名为collatz()的函数,该函数有一个名为number的参数。如果数字是偶数,那么collatz()应该打印数字// 2并返回该值。如果数字是奇数,那么collatz()应该打印并返回3 *数字+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'的值。 – Blorgbeard
那么这是我的一个非常愚蠢的错误。好吧,它发生..谢谢你。 – tadm123