【问题标题】:How to divide for i in arange by a list?如何在一个范围内除以一个列表?
【发布时间】:2020-01-28 21:03:32
【问题描述】:

我最近开始学习 python,我正在努力解决我给自己的这个难题:寻找素数

我相信还有更优雅的方式,但我更愿意以这种方式来学习列表和 for in range 的交互方式。

我有一个素数列表:

prime_list = [2, 3, 5, 7]

还有一个检查每个奇数的范围列表:

for attempt in arange(9.0, 100.0, 2.0):

现在,最理想的情况是我想做以下操作:

  • 从 prime_list 中,使用 >= 尝试平方根的所有数字(第一种情况下为 9)
  • 检查是否 9 / 2 != int
  • 检查是否 9 / 3 != int
  • 如果至少 1 为 TRUE,则移动到下一个尝试编号 11 并重复步骤
  • 如果没有为真,则中断并打印数字

到目前为止我只能想出下面这段代码,我必须手动输入 2 然后 3 并让逻辑检查自己...

    from numpy import arange
    prime_list = [2, 3, 5, 7]

    for attempt in arange(9.0, 100.0, 2.0):
        prime_check = attempt / 2
        if int(prime_check) != prime_check:
            print(prime_check)
            break
    print(attempt)

感谢您的帮助和提示!

【问题讨论】:

  • 你为什么用arange()而不是range(),用浮点数而不是整数?
  • 您希望for prime in prime_list: 尝试每个。

标签: python list


【解决方案1】:

没有必要为此使用浮点数或 numpy。

要测试所有素数,请使用for prime in prime_list:。要测试数字是否精确除,请使用模运算符%

prime_list = [2, 3, 5, 7]

for attempt in range(9, 100, 2):
    for prime in prime_list:
        if attempt % prime == 0:
            break
    else:
        print("%d is prime" % attempt)

for 循环的 else: 块在循环运行到完成但未执行 break 时运行。

【讨论】:

    【解决方案2】:
    def isPrime(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    
    i = 3
    while i * i <= n:
        if n % i == 0:
            return False
        i += 2
    return True
    
    if __name__ == '__main__':
        print 'Check prime in range(10000)'
        for i in range(10000):
            if isPrime(i):
                print repr(i) + ' is prime'
    

    我确信您可以做很多练习,并且有很多方法可以解决这个特定问题。但是我可以给你的开始是这个我去年自己使用的实用网站。 看一看: a practical website for python exercises

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多