【问题标题】:How to check all the numbers in a range against a calculation?如何根据计算检查范围内的所有数字?
【发布时间】:2020-06-25 23:08:01
【问题描述】:

所以我尝试打印最多 100 的所有质数。这是我目前的代码:

primes = []

for num in range(100):
    if num > 1:
        for i in range(2, num):
            if num % i != 0:
                primes += [num]
                break
            else:
                break
            
print(primes)  

但是,当我运行代码时,它只对范围 (for i in range(2, num)) 中的第一次迭代进行计算 (if num % i != 0)。对于像 15 这样的数字,这是一个问题,其中for i in range 中的第一次迭代是 2。15 除以 2 不会给出整数,因此它运行 primes += [num]。它已经进行了第一次迭代,并没有运行其余的迭代。有没有办法运行范围内的所有迭代?

【问题讨论】:

  • 只需删除if num % i != 0: 中的中断,您需要检查该数字对于该范围内的所有数字是否都不可整除(但您最多可以到 sqrt(num)),否则程序逻辑错误。

标签: python


【解决方案1】:

试试这个:

primes = []

for num in range(100):
    if num > 1:
        for i in range(2, num):
            if num % i == 0:
                break
        else:
            primes.append(num)

print(primes)  

仅当内部 for 循环耗尽时,代码才会执行​​ else 块,即完成所有迭代而不会中断。

【讨论】:

    【解决方案2】:

    你的逻辑有点错误。这是你必须做的事情

    primes = []
    
    for num in range(2, 100): # 0 and 1 aren't primes
        for i in range(2, num):
            if num % i == 0:
                break
        else: # the else condition is for the for loop i.e. if it executes without break
            primes.append(num)
                
    print(primes)  
    

    【讨论】:

      【解决方案3】:

      all 函数可能正是您想要的!

      【讨论】:

        【解决方案4】:

        这是我的看法。

        >>> def primes(limit=100):
        ...     for number in range(limit):
        ...         is_prime = all([number % divisor != 0 for divisor in range(2, number)])
        ...         if is_prime:
        ...             yield number
        ...
        >>> list(primes(10))
        [0, 1, 2, 3, 5, 7]
        >>> list(primes(100))
        [0, 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
        >>>
        

        不完整,0 和 1 不是素数。但我想你明白了。

        【讨论】:

          【解决方案5】:

          虽然尝试适应你的方法,但我认为应该有更好的方法来解决这个问题

          >>> primes = []
          >>> for num in range(2,100):
          ...     p = True
          ...     for i in range(2, num):
          ...         if num % i == 0:
          ...             p = False
          ...     if p:
          ...         primes += [num]
          ...
          >>> primes
          [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-21
            • 2018-03-19
            • 1970-01-01
            • 2013-02-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多