最近,我的老师对我的编码技能提出了挑战,因为他看到我已经对他的教学有所了解。问题如下。
创建一个程序,提示用户输入2个数字。然后,程序将显示两个给定数字之间的所有素数,包括给定数字。注意:您不能假定第一个输入大于第二个输入。
因此,我提出了这个问题,并构建了一个相当简单的算法,然后运行它,它就起作用了。我今天打开了它,以查明由于某些原因我的输出偶尔会出错,例如,当您输入8和29时我得到27。我正在寻找提示关于我的逻辑有什么问题,因为我无法为我的生活弄清楚我在做什么错。我不想直接解决问题,因为我想从中学到很多,并尽可能自己做。
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)
从测试中学到的知识来看,即使在numList数组中,似乎在我的for循环或while循环中也从未检查过27。
答案 0 :(得分:2)
永远不要从要迭代的列表中删除项目。 而是创建一个新列表:
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)