鱼C论坛

 找回密码
 立即注册
查看: 1936|回复: 14

[已解决]python 50讲生成器

[复制链接]
发表于 2020-12-6 10:04:16 | 显示全部楼层 |阅读模式

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

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

x
import math

def is_prime(number):
    if number > 1:
        if number == 2:
            return True
        if number % 2 == 0:
            return False
        for current in range(3, int(math.sqrt(number) + 1), 2):
            if number % current == 0:
                return False
        return True
    return False

def get_primes(number):
    while True:
        if is_prime(number):
            yield number
        number += 1

def solve():
    total = 2
    for next_prime in get_primes(3):
        if next_prime < 2000000:
            total += next_prime
        else:
            print(total)
            return

if __name__ == '__main__':
    solve()

这个for循环有些看不明白 这里不是判断素数的吗? 为什么range的第二个参数是number的平方根啊?还有if返回的False也看不懂,求详解
最佳答案
2020-12-6 12:32:44
本帖最后由 大宝陈 于 2020-12-6 12:34 编辑
还有一个小问题 if __name__ == '__main__' 在这是什么意思?

if __name__ == '__main__' 在这是如果直接运行这个程序(不是由其它程序导入运行的话)就执行下面的语句。
我已经学到面向对象编程了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-6 10:36:44 | 显示全部楼层

回帖奖励 +2 鱼币

判断素数三种方法:
0.range(2, n)
1.range(2, math.sqrt(n)+1)
2.range(2, n//2+1)
后两种比第一种少了循环次数

如果不是素数返回0呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-6 10:46:08 | 显示全部楼层
巴巴鲁 发表于 2020-12-6 10:36
判断素数三种方法:
0.range(2, n)
1.range(2, math.sqrt(n)+1)


可我理解不了第二种方法在这题的意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 10:53:45 | 显示全部楼层

回帖奖励 +2 鱼币

wuyanzulqq 发表于 2020-12-6 10:46
可我理解不了第二种方法在这题的意思

就是判断一个数是否为素数啊
和第一种方法差不多,只不过高效一些(循环次数变少)
和range(2, n)本质上是一样的
哪不理解?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-6 11:05:15 | 显示全部楼层
巴巴鲁 发表于 2020-12-6 10:53
就是判断一个数是否为素数啊
和第一种方法差不多,只不过高效一些(循环次数变少)
和range(2, n)本质 ...

大佬能不能写下流程标在代码旁啊。。。
拜托拜托
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-6 11:05:55 | 显示全部楼层
巴巴鲁 发表于 2020-12-6 10:53
就是判断一个数是否为素数啊
和第一种方法差不多,只不过高效一些(循环次数变少)
和range(2, n)本质 ...

这个作业把我绕晕了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-6 11:44:43 | 显示全部楼层
巴巴鲁 发表于 2020-12-6 10:53
就是判断一个数是否为素数啊
和第一种方法差不多,只不过高效一些(循环次数变少)
和range(2, n)本质 ...

大佬如果循环到100的话 100的平方根10 那么range(3,11,2) 那current就是3,5,7,9。100%3,7,9都有余数 而%5 ==0 所以是不是说current中哪怕有一个被number整除 也会直接False 而get_primes while循环 number +=1 (111,112,113......)判断下一个数是不是素数 如果是就加入到total里
大佬我的理解对吗? 不对的请纠正哈
还有一个小问题 if __name__ == '__main__' 在这是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 12:21:58 | 显示全部楼层
wuyanzulqq 发表于 2020-12-6 11:44
大佬如果循环到100的话 100的平方根10 那么range(3,11,2) 那current就是3,5,7,9。100%3,7,9都有余数 ...

嗯,你理解是对的,我才只学到文件那里
https://blog.csdn.net/zhusongziy ... FromBaidu-2.control
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 12:32:44 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +2 鱼币

本帖最后由 大宝陈 于 2020-12-6 12:34 编辑
还有一个小问题 if __name__ == '__main__' 在这是什么意思?

if __name__ == '__main__' 在这是如果直接运行这个程序(不是由其它程序导入运行的话)就执行下面的语句。
我已经学到面向对象编程了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 14:02:45 | 显示全部楼层

回帖奖励 +2 鱼币

哦哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-8 11:55:27 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

发表于 2020-12-9 13:07:21 | 显示全部楼层

回帖奖励 +2 鱼币


(⊙o⊙)…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 17:52:23 | 显示全部楼层

回帖奖励 +2 鱼币

感谢楼主,这个我也不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 20:13:48 | 显示全部楼层

回帖奖励 +2 鱼币

试试看,有没有鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 20:14:26 | 显示全部楼层
每人两次,多谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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