鱼C论坛

 找回密码
 立即注册
查看: 1302|回复: 5

[已解决]第49课生成器的课后题

[复制链接]
发表于 2020-4-1 18:57:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 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()

以上两个问题请大佬指教
最佳答案
2020-4-1 19:07:04
1. 你的理解是正确的

2. 因为不需要返回任何内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-1 19:07:04 | 显示全部楼层    本楼为最佳答案   
1. 你的理解是正确的

2. 因为不需要返回任何内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 19:18:53 | 显示全部楼层
zltzlt 发表于 2020-4-1 19:07
1. 你的理解是正确的

2. 因为不需要返回任何内容

我试过 ,如果不写return,就会一直输出计算后的值, 如果直接rerurn total,则返回空值,这是为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 19:43:42 | 显示全部楼层
yjptx121 发表于 2020-4-1 19:18
我试过 ,如果不写return,就会一直输出计算后的值, 如果直接rerurn total,则返回空值,这是为什么呢

如果写 return total,那应该这样写:
if __name__ == '__main__':
    print(solve())

因为 solve() 函数有返回值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 19:59:01 | 显示全部楼层
zltzlt 发表于 2020-4-1 19:43
如果写 return total,那应该这样写:

多谢 !!明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-6 11:42:54 | 显示全部楼层
插个眼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 00:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表