问题描述
我刚接触python时,对python来说还很陌生,所以对我几乎一无所知。我们正在做collatz猜想问题,从这里的其他结果中,我可以看到人们相当熟悉。我了解如何使用while循环来获取答案以及这本来的答案:
[IN}:
n = int(input("Please enter a whole greater than number 1 for n: "))
def CollatzC(n):
print("Starting value is:",n)
while n > 1:
if n % 2 == 0:
n = n // 2
print (n)
else:
n = (n*3)+1
print (n)
return n
print (CollatzC(n))
[out]:
The starting value is: 10
5
16
8
4
2
1
1
我的问题是输出,因为我的老师希望输出看起来像这样:
[in]: print((CollatzC(10))
[out]: [10,5,16,8,4,2,1]
我在这里看了看,这个答案确实给出了期望的输出,但是我们还没有使用“ yield”,并且由于缺少更好的术语,该类中关于使用“外部函数”的规则是以便能够彻底解释该功能/正在发生的事情,您的推理以及其结果,以使它不会“作弊”。
[in]:
user = int(input("Enter a number: "))
def collatz(n):
print(n)
while n != 1:
if n % 2 == 0:
n = n // 2
yield(n)
else:
n = n * 3 + 1
yield(n)
print(list(collatz(user)))
那么有人可以向我解释一下这是怎么回事或解释我如何使它与现有的东西一起工作吗?我也知道我可能会丢失“起始值为:”行。我可以没有它。
如果您能告诉我为什么我最后要得到两个1,则加分!!!
谢谢!
解决方法
如果您仍然需要此代码,这是我的代码。它使用一个函数来执行collatz方法,并检查负数和整数。代码的开头会初始化列表,然后collatz的每个函数调用都会追加到列表中。
def collatz(number):
if number % 2 == 0:
numlist.append(number // 2)
return(number // 2)
elif number % 2 == 1:
result = 3 * number + 1
numlist.append(result)
return(result)
# Program starts here.
while True:
try:
# Ask for input and establish list with said input
n = int(input('Please enter a number: '))
numlist = [n]
# If number is negative or 0,asks for positive and starts over.
if int(n) < 1:
print('Please enter a positive INTEGER!')
continue
#If number is applicable,goes through collatz function.
while n != 1:
n = collatz(int(n))
# If input is a non-integer,asks for a valid integer starts over.
except ValueError:
print('Please enter a valid INTEGER!')
else:
print(numlist)
break