【问题标题】:resetting the parameters of a for loop from inside the loop in Python3从 Python3 中的循环内部重置 for 循环的参数
【发布时间】:2011-03-27 19:29:58
【问题描述】:

我正在解决 Python 3 中的项目 euler 问题,以此作为学习该语言的一种有趣方式,而我对第三个问题的解决方案我觉得有点时髦。问题是要找到 600851475143 的最大质因数,我用一种相当庞大的方式解决了它,如下所示:

#!/usr/local/bin/python3
# encoding: utf-8
# what is the largest prime factor of whatever the user types


def main():
    original = int(input("Input a number: "))
    if original == isPrime(original):
        print(original, "is prime")
    else:
        print(factor(original), "is the largest prime factor of", original)

def factor(number):
    nummy=2
    for num in range(nummy, number):
        if (number%num==0 and isPrime(num)==num):
            biggest=int(num)
            number=int(number/biggest)
            nummy = int(biggest+2)
            print("so far,",biggest, "is the biggest prime factor...")
            if number < biggest:
                break
    return biggest      

def isPrime(value):
    for num in range(2, int(value**0.5)+1):
        if value%num==0:
            return int(value/num)
    return value


if __name__ == "__main__": main()

如您所见,在我的“因子”函数中,我尝试更新 for 循环中范围的上限,但它并没有像我预期的那样真正工作,所以我不得不添加 if 数字

有没有办法从循环内部更新for循环的参数?

感谢您对此的任何见解。

【问题讨论】:

  • 您无法调整范围。这里有一个提示。使用while 语句而不是for...range...
  • 谢谢!我会试一试并发布结果。

标签: python-3.x


【解决方案1】:

range(nummy, number) 在您进入 for 循环之前进行评估,因此在您的情况下这是不可能的。

通常在 python 中是可能的(尽管并非总是如此),但这是一个坏主意。最好检查更改的条件并像您一样跳出循环。

【讨论】:

    【解决方案2】:

    我认为这不会在合理的时间内运行。

    我会指出一些事情,但不给出解决方案:

    您无需尝试将 X 与直到 X 的每个数字相除即可知道它是素数。如果它不能被 2 整除,它也不能被 4 整除;如果不是 3,则更少 9。您也可以在 (X-1) 之前停止 - 毕竟,X 不会被大于...的素数整除...什么?

    嗯,我还有 3 件物品,但它们都来自上述内容。希望对你有帮助!

    【讨论】:

    • 非常感谢。对于欧拉项目问题中的数字,它运行得非常快,但是如果我给它一个大素数或任何一个非常大的数字,它似乎会永远磨掉。我会尝试加快速度!
    【解决方案3】:

    正如 S. Lott 所说,您将希望使用 while 循环,但您希望将范围的上限分配给变量,因为您希望它是可变的。

    另外,我不确定你为什么这样做:

    biggest=int(num)
    number=int(number/biggest)
    nummy = int(biggest+2)
    

    num 已经是一个 int (否则,您将无法在该点之前进行数学运算)。整数除法也可以如下:

    number = number // biggest
    

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 2013-06-07
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      相关资源
      最近更新 更多