【问题标题】:How to skip a part of the code if a certain condition is met [duplicate]如果满足某个条件,如何跳过部分代码[重复]
【发布时间】:2020-07-08 16:07:45
【问题描述】:

随着我越来越习惯于用 Python 编写脚本,我编写了一个脚本,它通过尝试将每个数字除以每个数字的一​​个范围内来找到素数(有点像蛮力哈哈)。 它有效,但我想让这个过程更快、更高效。

我的代码:

count = 0

for i in range(2,1000):
    j = 2
    while j < 1000:
        if i%j==0:
            count = count + 1
        j = j + 1
    if count == 1:
        print(i)
    count = 0

解释:

我检查并存储在count 中,一个数字可以被除多少次。 如果在检查结束时count 等于 1,则表示该数字是素数(仅被自身除)。

我现在想要的是停止检查当“count”变量超过 1(2 或更多)时数字可以被除多少次的过程。我该怎么做?

我想用tryexcept 做点什么,但不知道是什么...

【问题讨论】:

  • 你试过break吗?
  • 请永远不要使用 try/except 来处理您的应用程序的流程或跳出循环。它们用于处理错误,而不是用于定义代码的执行流程。

标签: python python-3.x math primes brute-force


【解决方案1】:

在这里添加一个额外的条件,如果计数大于一,break 将退出循环。将其放入while 循环中:

if i % j == 0:
  count += 1
  if count > 1:
      break

如 cmets 中所述,将count 用作循环条件的一部分会更简洁。这是一个改进的版本:

for i in range(2, 1000):
    j = 2
    count = 0
    while j <= i and count < 2:
        if i % j == 0:
            count += 1
        j += 1
    if count == 1:
        print(i)

当然,有更快的方法来确定一个数字是否为素数 - 特别是在内部循环中,您不应该迭代直到1000,甚至直到达到i,直到sqrt(i),但我会把它留给你做的改进;)

【讨论】:

  • 嘿,谢谢!有效。我尝试使用 break 但由于某种原因它结束了整个脚本。
  • 把条件放在while里面然后根本不休息不是更好吗?
  • 当心 break 是隐式 goto 并导致无法维护的代码。改变 while 条件更好
  • @RobRaymond 是的,这就是我的意思。
  • 好的 @EdwinCruz 和 RobRaymond,我根据你的建议更新了我的答案;)
【解决方案2】:

您可以尝试使用breakbreak 所做的是跳过循环的剩余部分并跳转到循环后面的语句。

count = 0
for i in range(2,1000):
    j = 2
    while j < 1000:
        if i%j==0:
            count = count + 1
            break
        j = j + 1   ### line 8
    if count == 1:
        print(i)
        
    count = 0

在这段代码中,python遇到break时,会跳过循环的剩余部分(即剩余的循环没有执行),直接跳转到下一条语句,也就是第8行

【讨论】:

    【解决方案3】:

    都是错的,首先你要了解检查素数的算法,基本上一个数如果不能被2到(number//2)-1之间的任何数整除,则它就是素数

    现在在你的问题中,你不能在任何地方使用 break,因为你首先搜索所有可分然后检查素数,更好的是我在你的问题中添加一个示例代码,这更容易找到素数

    代码

    number = int(input("Enter A Number"))
    for i in range(2,number//2+1):      #See range arguments
        if(number%i==0):
            print("Not A Prime")
            break          #Break loop when condition reached
    

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多