我的python代码的问题如下:
计数素数:编写一个函数,返回在给定数字之前(包括该数字(存在的素数的数量
我的代码如下:
def count_primes(num):
lista = [3]
b = 4
while b <= num:
for a in range(2,b-1):
if b%a != 0:
lista.append(b)
b += 1
return len(lista)
我在条目中显示[*]时遇到问题所以我点击";内核";然后";中断"。
回溯显示下面这行有一个问题:
for a in range(2,b-1)
我找到了这个问题的答案,但我不知道我的代码出了什么问题。
你能帮帮我吗?
谢谢
回溯如下:
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-4-ea1b44fd7e05> in <module>
----> 1 count_primes(15)
<ipython-input-3-d9c02d7f375d> in count_primes(num)
3 b = 4
4 while b <= num:
----> 5 for a in range(2,b-1):
6 if b%a != 0:
7 lista.append(b)
KeyboardInterrupt:
罪魁祸首是在内部循环的条件中递增b。在代码的第一次迭代中,b=4,a=2。因此b%a==0。因此,控制永远不会到达b递增的部分,因此,代码被困在无限循环中。您可能认为,当a=3时,应该满足该条件。然而,由于环路是
for a in range(2, b - 1)
当b=4时,a可以取的值仅为2。
在尝试修改代码后,我找到了正确的代码。谢谢你的帮助。
def count_primes(num):
lista = [3]
b = 4
while b <= num:
for a in range(2,b):
if b%a != 0 and a != (b-1):
continue
elif b%a != 0 and a == (b-1):
lista.append(b)
else:
break
b += 1
return len(lista)