【问题标题】:Merge two for-loops into one for-loop将两个for循环合并为一个for循环
【发布时间】:2018-10-10 13:41:25
【问题描述】:

此代码的目标是确定一个数字是否为素数,如果不是,则打印给定数字可以除以的数字。

我的问题是:是否可以在下面的代码中将两个for 循环合并为一个for 循环?

num = 224

list1 = []

for i in range(2, num):
    if num % i == 0:
        list1.append(i)

for i in range(2, num):
    if num % i == 0:
        print(num, 'is not prime and can be divided by the following numbers:\n', list1)
        break
else:
    print(num, 'is Prime.')

【问题讨论】:

  • 你试过了吗?发生了什么?
  • @roganjosh 这是第二个循环写入的消息的参数。
  • @chepner 哎呀,错过了。循环看起来仍然很不稳定。我看不出他们一直想打印整个列表。

标签: python for-loop if-statement primes


【解决方案1】:

由于您已经使用第一个循环中的所有除数构造了 list1,因此您可以在条件中使用它,而不是第二次遍历相同的序列:

for i in range(2, num):
    if num % i == 0:
        list1.append(i)
if list1:
    print(num, 'is not prime and can be divided by the following numbers:\n', list1)
else:
    print(num, 'is Prime.')

【讨论】:

    【解决方案2】:

    根据给出的答案,重新设计代码的最佳方法是:

    num = 224
    
    list1 = [i for i in range(2, num) if num % i == 0]
    
    if list1:
        print(num, 'is not prime and can be divided by the following numbers:\n', list1)
    else:
        print(num, 'is Prime.')
    

    谢谢@matthieu-brucher 和@blhsing

    【讨论】:

      【解决方案3】:

      应该这样做,例如 10 个数字:

      n = 10
      
      for i in range(2, n + 1):
          divisors = []
          for j in range(2, i):
              if i % j == 0:
                  divisors.append(j)
          if divisors:
              print('{} is not prime and can be divided by the following numbers: {}.'.format(i, divisors))
          else:
              print('{} is prime.'.format(i))
      

      输出:

      2 is prime.
      3 is prime.
      4 is not prime and can be divided by the following numbers: [2].
      5 is prime.
      6 is not prime and can be divided by the following numbers: [2, 3].
      7 is prime.
      8 is not prime and can be divided by the following numbers: [2, 4].
      9 is not prime and can be divided by the following numbers: [3].
      10 is not prime and can be divided by the following numbers: [2, 5].
      

      【讨论】:

        【解决方案4】:

        不需要第二个for循环

        num = 224
        
        list1 = []
        
        for i in range(2, num):
            if num % i == 0:
                list1.append(i)
        
        if (not list1):
            print(num, 'is Prime.')
        else:
            print(num, 'is not prime and can be divided by the following numbers:\n', list1)
        

        【讨论】:

        • if (not list1): 中不需要括号。此外,此答案与@blhsing 中的答案几乎相同
        猜你喜欢
        • 1970-01-01
        • 2021-09-15
        • 2020-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 1970-01-01
        相关资源
        最近更新 更多