第49课生成器的课后题
# 10以内的素数之和是:2+3+5+7=17,那么请编写程序,计算2000000以内的素数之和?import math
def is_prime(number): # 定义一个判断是否为素数的函数
if number > 1: # 如果形参大于1
if number == 2: # 如果形参等于2
return True # 返回结果为真(2为素数),跳过后续循环
if number % 2 == 0: # 如果形参除2取余为0(不为素数),能被2整除肯定不是素数
return False # 返回结果为假,跳过后续循环
# 不满足以上两个if循环则会进入for循环
for current in range(3, int(math.sqrt(number) + 1), 2): # current(当前的)属于range循环2-->number开平方加1-->step为2
if number % current == 0: # 如果current能被number整除
return False # 返回假(因为一个数最多能被自身的一半整除
return True # 如果以上条件都不符合,则返回True(即为素数)
return False # 小于等于1的数均为假
def get_primes(number): # 定义一个获取素数的函数
while True: # 设定循环条件永远为真
if is_prime(number): # 如果判断函数is_prime(number)为真
yield number # 那么生成一个number值
number += 1 # 同时number值加1
def solve(): # 定义一个解答函数
total = 2 # 设置局部变量total的值为2
for next_prime in get_primes(3):
# 问题1:个人理解为get_primes(3)是一个从3开始指向正无穷的素数生成器,for循环从is_prime(3)开始,且next_prime的值属于这个生成器
if next_prime < 20000: # 如果next_prime小于2000000(生成的数字小于20000)
total += next_prime # 局部变量total重新赋值为自身与next_prime的和
else: #
print(total) # next_prime大于20000时,输出total的值
return
# 问题2:这里return后面为什么不接参数??
if __name__ == '__main__':
solve()
以上两个问题请大佬指教 1. 你的理解是正确的
2. 因为不需要返回任何内容 zltzlt 发表于 2020-4-1 19:07
1. 你的理解是正确的
2. 因为不需要返回任何内容
我试过 ,如果不写return,就会一直输出计算后的值, 如果直接rerurn total,则返回空值,这是为什么呢 yjptx121 发表于 2020-4-1 19:18
我试过 ,如果不写return,就会一直输出计算后的值, 如果直接rerurn total,则返回空值,这是为什么呢
如果写 return total,那应该这样写:
if __name__ == '__main__':
print(solve())
因为 solve() 函数有返回值。 zltzlt 发表于 2020-4-1 19:43
如果写 return total,那应该这样写:
多谢 !!明白了 插个眼
页:
[1]