小白菜疑问,能不能详细地跟我说一下两种写法的区别?
题目:使用函数求素数和:
假设输入m=1,n=10
疑问:下面是两种不同的写法,第一个是我写的,第二个是正确答案TT,我不太能理解第一种把return True放在for循环里会把不是素数的9给算进去,但是把return True移到for循环外面去就不会了
def prime(p):
if p==0 or p==1:
return False
elif p==2:
return True
else:
for I in range(2,p):
if p%I==0:
return False
else:
return True
def PrimeSum(m,n):
sum=0
for i in range(m,n):
if prime(i):
sum+=i
else:
sum+=0
return sum
m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))
def prime(p):
if p==0 or p==1:
return False
elif p==2:
return True
else:
for I in range(2,p):
if p%I==0:
return False
return True #这里的区别
def PrimeSum(m,n):
sum=0
for i in range(m,n):
if prime(i):
sum+=i
else:
sum+=0
return sum
m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))
如果m=1,n=10,那在这个范围内sum=2+3+5+7=17,但是我第一种方法写的是sum=2+3+5+7+9=26...TT麻烦跟我解释一下这两个的区别。谢谢感激
单独跑一下这个代码,你就明白了
p = 9
for I in range(2, p):
print(f'p:{p}, I:{I}, p%I:{p%I}')
if p % I == 0:
return False
else:
return True
你自己的写法:
if p%I==0:
return False
else:
return True
p%I==0
就会直接返回 false
,也就是说你在验证某个数字是否为质数时,并没有从头到尾遍历一遍,而是在遍历过程中只要碰到 p%I!=0
的情况就已经结束了遍历,这样并不能保证正确性。1 * p
,没有其他组合才可以返回 true
在第一种写法中,如果p不是素数,那么在第一次循环时就会执行else语句并返回True,因此它会错误地将非素数的数字标记为素数。例如,在循环到9时,9%2!=0,因此它会执行else语句并返回True,导致9被标记为素数。
而在第二个写法中,在for循环结束后才返回True。这意味着只有当所有的i都不能整除p时才返回True,从而保证了正确性。
因此,把return True放在for循环外面是更加准确和可靠的做法。
(最后说一句题外话,楼主的提问描述很详细,有利于回答者思考和后来者参考,值得点赞!)
python 代码:地址: node.js 代码: python 输入输出: node.js 输入输出: 请大佬指教为什么我参考 python 代码写的 node.js 代码最后输出的内容是不一样的?
问题内容: 我想做的是请用户输入一些字符串以读入数组,然后要求用户输入该数量的字符串并将其读入数组。当我运行此代码时,它从不要求我在第一个for循环的第一个循环中输入内容,只打印出“字符串#0:字符串#1:”,然后我就可以输入文本了。为什么会这样,我做错了什么? 问题答案: 缓冲。 输入输入数量时,不会在输入缓冲区中占用换行符的位置。在for循环的迭代0中,缓冲区中已经有一行输入,并且可以立即完成
因此,作为学校的一部分,我正在使用For循环,我有一些代码可以工作,但我很难理解为什么它可以工作。对我来说,重要的是要真正理解为什么一块代码能做它不能做的事情,而不仅仅是它能工作。 所以有一点背景。这个小程序利用for循环,根据用户输入打印一系列字符。其思想是用户输入一个介于1和8之间的数字,程序将打印一个字符,然后移动到下一行再打印两个,移动到下一行再打印三个等等,并打印用户输入的行数。 程序在
问题内容: 我是Java的新手,所以我编写了这段代码,以便将这整个五年都称为布尔值,并为所有布尔值生成答案。但是,它仅调用最后一个。我该怎么做呢? 问题答案: 您每年需要使用单独的对象,或者至少在创建该年份的对象后立即调用the年检查方法。 您所拥有的是对函数的一系列调用,该函数将值分配给同一对象的属性。因此,只有最后一条语句才起作用,因为先前的值将被覆盖。 另外请注意,您的代码似乎没有正确组织。
py代码如下: 参考py写的node.js代码如下 node.js 的解密参数全是和py的一样,打印出来的key也是一样的,说明makeKey方法是一样的, 就是接下来的rc4解密,不知道是我node.js哪里写的不对,最后解密出来的verifierHash和 hash 不一样,求大神解答下,是不是node.js这里的rc4解密有问题导致的,还是哪里有问题?
我试图做一个函数,返回数组的长度,但函数总是返回8