函数调用,求整数n以内(不包括n)所有素数之和

img

正确答案应该是输入100输出1060,但是这个输入100,输出1请问代码哪里错了

简单看了下有个逻辑错误:
当 i%j==0 时,你返回了 False,意味着 i 不是素数。但是,你的循环是从 j=1 开始的,对于所有的 i,i%1 都等于 0,因此你的函数对于所有的 i 都返回 False。

有个代码做参考:

def is_prime(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    max_divisor = int(n ** 0.5) + 1
    for d in range(3, max_divisor, 2):
        if n % d == 0:
            return False
    return True

sum_of_primes = 0
n = int(input())
for i in range(1, n):
    if is_prime(i):
        sum_of_primes += i
print(sum_of_primes)



如果有帮助,请点击一下采纳该答案~谢谢

  问题出在素数判定——
  遍历轮询应该从2起,因为1不是合数也不是素数。

  • 代码运行效果截屏图片

    img

  • 代码

#!/sur/bin/nve python
# coding: utf-8


def fun(n):
    
    for i in range(2, n//2 + 1):
        
        if n%i == 0:
            return 

    return n
    
    
count = 0
n = int(input('\n输入 n :'))

for i in range(2, n+1):

    if fun(i):
        count += i

print(count)



  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1398087
  • 除此之外, 这篇博客: 1.用户输入一个整数n,打印斐波那契数列的前n项、2.猜数字游戏,在程序中预设一个0-100之间的整数中的 2.猜数字游戏,在程序中预设一个0-100之间的整数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 升级1:让计算机随机产生一个预设值

    升级2.猜中数字后,显示“你猜了N次,猜对了,真厉害!

    升级3.最多只允许猜10次,在猜错后提示还有几次机会 

    思路:1.调用随机模块random

    2.随机生成0-100之间的整数(random.randint(0,100))

    3.限定次数

    4.记录用户猜的次数

    5.提示用户剩余次数

    参考代码:

    import random
    
    num = random.randint(0,100)
    
    time = 10
    
    print('你一共有%d次机会'%(time))
    
    for count in range(1,time+1):
    
        n = int(input('请输入一个0-100之间的整数:'))
    
        if n < num:
    
            print('你猜猜的数字小于预设值!')
    
            count = count+1
    
            print('你一共猜了{0}次'.format(count-1))
    
            print('还剩余%d次'%(time-count+1))
    
        elif n > num:
    
            print('你猜猜的数字大于预设值!')
    
            count = count+1
    
            print('你一共猜了{0}次'.format(count-1))
    
            print('还剩余%d次'%(time-count+1))
    
        elif n == num:
    
            print('你猜对了,真厉害!')
    
            count = count+1
    
            print('你一共猜了{0}次'.format(count))
    
            print('还剩余%d次'%(time-count+1))
    
            break
    
    else:
    
        print('很遗憾,10次都没有猜对,请下次再来')

    结果:

    参考代码:

    import random
    
    num = random.randint(0,100)
    
    time = 10
    
    for count in range(time):
    
        n = int(input('请输入一个0-100之间的数字:'))
    
        if n < num:
    
            print('你猜猜的数字小于预设值,还剩余%d次机会!'%(time-1))
    
        elif n > num:
    
            print('你猜猜的数字大于预设值,还剩余%d次机会!'%(time-1))
    
        elif n == num:
    
            print('你猜猜了%d次,猜对了,真厉害!'%(time))
    
            break
    
    else:
    
    print('很遗憾,10次都没有猜对,请下次再来')

    结果: