正确答案应该是输入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不是合数也不是素数。
代码运行效果截屏图片
代码
#!/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)
升级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次都没有猜对,请下次再来')
结果: