【问题标题】:The sum of prime number is incorrect素数之和不正确
【发布时间】:2021-12-03 22:42:22
【问题描述】:

代码没有返回素数的总和,我做错了什么?

the_sum = 0
for number in range(20):
    if number > 3:
        for i in range(2,number):
            if (number%i)==0:
                break
        else:
            the_sum += number
            print (the_sum)

【问题讨论】:

  • 打印出质数,看看是否正确!
  • 可能你想设置the_sum = 5,遍历range(4, 20)并移除条件。或者只是迭代range(2, 20)
  • 23 也是素数。您没有使用函数,只有函数可以返回。顺便说一句:很好地使用带有 else 子句的 for 循环。
  • 检查 2 到数字的平方根之间的数字。你不需要去号码本身....

标签: python sum primes


【解决方案1】:

2 是一个素数,你需要包含它。还有 3,您正在检查 > 3 ,它应该是 >=

the_sum = 0
for number in range(2,20):
    for i in range(2,number):
        if (number%i)==0:
            break
    else:
        the_sum += number
print(the_sum)

【讨论】:

  • @OlvinR​​oght 如果你这样做 range(2, 20) 总和将始终为 0,因为它将始终评估 number % number
  • @BTables,你确定吗?
  • 谢谢,我必须在 EOL 时退出循环。现在完美运行。
  • @OlvinR​​oght 如果您在谈论内部循环,是的。循环遍历range(2,20) 确实可以保证您将登陆每个数字 [2,20)
  • @saleemdamry 为什么在接受这个答案后又转到下面的答案?有什么具体原因吗?
【解决方案2】:
the_sum = 0
for number in range(20):
    if number >= 3:
        for i in range(2,number):
            if (number%i)==0:
                break
            elif i == (number-1):
                the_sum += number
    elif number==2:
        the_sum += number

print (the_sum)

请试试这个。

【讨论】:

  • 它会改变什么?
【解决方案3】:

我更改了以下代码行,如果条件我将其更改为 if number >= 2 而不是 if number > 3,因为两个也是质数,它也需要添加到总和中。

注意:range函数总是以0而不是1开始生成可迭代对象,并以小于限制的1结束,例如:

范围(0, 4)

会从0 to 4生成数字

the_sum = 0
for number in range(1, 4):
    # numbers = [1, 2, 3,]
    if number >= 2:
        for i in range(2,number):

            if (number%i)==0:
                break
        else:
            the_sum += number


print (the_sum)

【讨论】:

  • 有人能解释一下为什么你迭代某个范围并将条件放入循环中以减少该范围的一半吗?为什么不初始化所需的范围?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多