【问题标题】:Python: Find Prime Number AlgorithmPython:查找素数算法
【发布时间】:2019-04-20 21:03:39
【问题描述】:

最近,我的老师对我的编码技能提出了挑战,因为他看到我已经对他所教的内容了如指掌。问题如下。

创建一个提示用户输入 2 个数字的程序。然后程序将显示两个给定数字之间的所有素数,包括给定数字。注意:您不能假设第一个输入大于第二个输入。

所以我提出了这个问题并构建了一个相当简单的算法并运行它并且它有效。我今天打开它是为了发现由于某种原因我的输出偶尔会出错,例如,当您输入 8 和 29 时,我得到 27。我正在寻找 HINTS 关于我的逻辑有什么问题,因为我无法为我的生活弄清楚我做错了什么。我不想直接修复,因为我想从中学到更多,并尽可能多地自己完成。

numbers = [int(input("First Number")), int(input("Second Number"))]
numbers.sort()

numList = []
#Removing Even Numbers
for num in range(numbers[0],numbers[1] + 1):
    if num % 2 != 0:
        numList.append(num)

#Checking For Prime Numbers
for currNum in numList:
   #Set Start number to divide
    i = 2
    while i < currNum:
        #Checks if the currNum can be divisble by i and is a whole number
        if currNum % i != 0:
          i = i + 1
        else :
          numList.remove(currNum)
          break

print(numList)

根据我从测试中了解到的情况,似乎 27 在我的 for 循环或 while 循环中从未检查过,即使它位于 numList 数组中。

【问题讨论】:

  • 我希望他们在学校教授自动化测试。查看doctest
  • 您的 for 循环实际上从未迭代,因此 currNum == 27
  • 永远不要从列表中删除项目,您正在迭代。

标签: python for-loop while-loop


【解决方案1】:

切勿从您正在迭代的列表中删除项目。 而是创建一个新列表:

numbers = [int(input("First Number")), int(input("Second Number"))]
numbers.sort()

primes = []
for num in range(numbers[0], numbers[1] + 1):
    #Set Start number to divide
    i = 2
    while i < num:
        #Checks if the currNum can be divisble by i and is a whole number
        if num % i == 0:
            break
        i += 1
    else:
        primes.append(num)

print(primes)

【讨论】:

  • 谢谢!这帮助我了解出了什么问题。请问为什么从列表中删除会导致问题?我真的很想尽可能多地了解问题所在,以便从中吸取教训。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多