【问题标题】:Collatz conjuncture and answer formatCollat​​z连词和答案格式
【发布时间】:2021-02-06 01:47:10
【问题描述】:

我对 python 还是很陌生,因为我刚开始攻读硕士学位(在分析方面),所以对我来说很简单。我们正在做 collat​​z 猜想问题,从这里的其他结果中我可以看到人们对此相当熟悉。我了解如何使用 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 的加分!!!

谢谢!!!

【问题讨论】:

  • 追加到一个最初为空的列表,而不是打印n 的每个值。返回结果列表。您会看到两个,因为您既要打印又要返回最后的 1。一般来说,函数不应该包含 print,而是应该按照它们的 return 工作。
  • @约翰·科尔曼。谢谢你的回答!!两件事情。我在哪里添加追加?当我打印出来时,它并没有列出它在循环中经过的所有数字吗?另外,如果我定义 newlist = [],那么在 if 和 else 语句中添加 newlist.append(n) 而不是 print(n) 的位置?
  • 该列表将包含您附加到它的任何内容。您可能需要在循环之后附加最后一个 1,或者在循环之前附加初始 n;不管你如何构建代码。
  • @john coleman 我终于明白了!谢谢!!我的老师从来没有讨论过如何在 While 循环中使用它!

标签: python yield-return collatz


【解决方案1】:

如果您仍然需要,这是我的代码。它使用一个函数来执行 collat​​z 方法,并且还检查负数和整数。代码的开头初始化列表,然后 collat​​z 的每个函数调用都附加到它。

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

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多