我有一个Python代码的问题.执行代码时,条目显示[*]



我的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)

相关内容

  • 没有找到相关文章

最新更新