鱼C论坛

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

[已解决]python 50讲生成器

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

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

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

x
  1. import math

  2. def is_prime(number):
  3.     if number > 1:
  4.         if number == 2:
  5.             return True
  6.         if number % 2 == 0:
  7.             return False
  8.       [color=Red]  for current in range(3, int(math.sqrt(number) + 1), 2):
  9.             if number % current == 0:[/color]
  10.                 return False
  11.         return True
  12.     return False

  13. def get_primes(number):
  14.     while True:
  15.         if is_prime(number):
  16.             yield number
  17.         number += 1

  18. def solve():
  19.     total = 2
  20.     for next_prime in get_primes(3):
  21.         if next_prime < 2000000:
  22.             total += next_prime
  23.         else:
  24.             print(total)
  25.             return

  26. if __name__ == '__main__':
  27.     solve()
复制代码


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

if __name__ == '__main__' 在这是如果直接运行这个程序(不是由其它程序导入运行的话)就执行下面的语句。
我已经学到面向对象编程了。
小甲鱼最新课程 -> https://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呗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


可我理解不了第二种方法在这题的意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +2 鱼币

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

就是判断一个数是否为素数啊
和第一种方法差不多,只不过高效一些(循环次数变少)
和range(2, n)本质上是一样的
哪不理解?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬能不能写下流程标在代码旁啊。。。
拜托拜托
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个作业把我绕晕了
小甲鱼最新课程 -> https://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__' 在这是什么意思
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +2 鱼币

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

if __name__ == '__main__' 在这是如果直接运行这个程序(不是由其它程序导入运行的话)就执行下面的语句。
我已经学到面向对象编程了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +2 鱼币

哦哦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +2 鱼币

感谢分享!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +2 鱼币


(⊙o⊙)…
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +2 鱼币

感谢楼主,这个我也不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +2 鱼币

试试看,有没有鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 20:14:26 | 显示全部楼层
每人两次,多谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 20:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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