问题:假设函数is_prime的可用性。假设变量n已与正整数相关联。编写所需的语句,以便在超过n之前添加多少素数(以2开始并以递增的顺序连续更高的素数[2,3,5,7,11,13,...])。将此数字与变量k相关联。
代码:
def is_prime():
i = 2
k = 0
Again = True
while Again = True:
if total > n:
Again = False
for x in range(2,n):
if x % i == 0:
total = total
k = k
i += 1
else:
total += x
k += 1
return k
答案 0 :(得分:0)
对于涉及素数跟踪和连续添加的问题,您的代码不正确。也没有别的。显而易见的问题是它没有运行,所以它不正确。一个语法错误是:
while Again = True:
应该是:
while Again == True:
另一个原因是total
在使用它的值之前从未初始化:
total += x
一旦我们解决了这些问题,您的代码似乎仍然不起作用。但是让我们稍微回顾一下。陈述的问题说,
假设函数is_prime的可用性。
但你没有这样做 - 你用名称is_prime()
编写了你的解决方案。我们应该期望有一个名为is_prime(n)
的函数,它会测试n
是否为素数,返回True
或False
。你得到这个,需要找一个,写一个,或者只是假设它存在但从未真正测试过你的代码。但是一旦你有这个功能,并且它有效,你就不应该改变它!
这是我的示例is_prime(n)
功能:
def is_prime(n):
""" Assume the availability of a function is_prime. """
if n < 2:
return False
if n % 2 == 0:
return n == 2
for m in range(3, int(n ** 0.5) + 1, 2):
if n % m == 0:
return False
return True
现在编写调用此函数的解决方案,但不更改此函数。这是一种可能的算法:
编写一个名为primes_in_sum(n)
将变量prime
设置为2,将变量k
(我们的计数器)设置为
0
从prime
。
n
在n >= 0
期间,增加k
,并计算prime
的下一个值
继续向prime
添加一个,直到is_prime(prime)
返回true。
然后再次从prime
中减去n
。回到这个循环的顶部。
当while
条件失败时,请返回k
。
通过输出一些值来测试您的代码:
for n in range(2, 100):
# Assume a variable n has been associated with a positive integer
print(n, primes_in_sum(n))
检查结果是否合理。