wuyanzulqq 发表于 2020-12-6 10:04:16

python 50讲生成器

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也看不懂,求详解{:10_266:}

巴巴鲁 发表于 2020-12-6 10:36:44

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

如果不是素数返回0呗

wuyanzulqq 发表于 2020-12-6 10:46:08

巴巴鲁 发表于 2020-12-6 10:36
判断素数三种方法:
0.range(2, n)
1.range(2, math.sqrt(n)+1)


可我理解不了第二种方法在这题的意思{:10_266:}

巴巴鲁 发表于 2020-12-6 10:53:45

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

就是判断一个数是否为素数啊
和第一种方法差不多,只不过高效一些(循环次数变少)
和range(2, n)本质上是一样的
哪不理解?

wuyanzulqq 发表于 2020-12-6 11:05:15

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

大佬能不能写下流程标在代码旁啊。。。{:10_250:}
拜托拜托

wuyanzulqq 发表于 2020-12-6 11:05:55

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

这个作业把我绕晕了

wuyanzulqq 发表于 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里
大佬我的理解对吗? 不对的请纠正哈{:5_109:}
还有一个小问题 if __name__ == '__main__' 在这是什么意思{:10_299:}

巴巴鲁 发表于 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都有余数 ...

嗯,你理解是对的,我才只学到文件那里{:10_319:}
https://blog.csdn.net/zhusongziye/article/details/79505803?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control

大宝陈 发表于 2020-12-6 12:32:44

本帖最后由 大宝陈 于 2020-12-6 12:34 编辑

还有一个小问题 if __name__ == '__main__' 在这是什么意思?
if __name__ == '__main__' 在这是如果直接运行这个程序(不是由其它程序导入运行的话)就执行下面的语句。
我已经学到面向对象编程了。

cx956 发表于 2020-12-6 14:02:45

哦哦

hornwong 发表于 2020-12-8 11:55:27

感谢分享!

心驰神往 发表于 2020-12-9 13:07:21

hornwong 发表于 2020-12-8 11:55
感谢分享!

(⊙o⊙)…

bhcqzf 发表于 2020-12-10 17:52:23

感谢楼主,这个我也不懂

乐乐学编程 发表于 2020-12-11 20:13:48

试试看,有没有鱼币

乐乐学编程 发表于 2020-12-11 20:14:26

每人两次,多谢了
页: [1]
查看完整版本: python 50讲生成器