鱼C论坛

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

第49课课后作业答案疑惑求解

[复制链接]
发表于 2016-4-14 23:14:03 | 显示全部楼层 |阅读模式
10鱼币
  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.         for current in range(3, int(math.sqrt(number) + 1), 2):
  9.             if number % current == 0:
  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()
复制代码


三个问题:
1、为什么get_primes()只需要传入参数的值为 3
  1. def solve():
  2.     total = 2
  3.     for next_prime in get_primes(3):
  4.         if next_prime < 2000000:
  5.             total += next_prime
  6.         else:
  7.             print(total)
  8.             return
复制代码


2、__name__ == '__main__' 是什么意思?
  1. if __name__ == '__main__':
  2.     solve()
复制代码


3、下面的函数里面的 yield 怎么理解?
  1. def get_primes(number):
  2.     while True:
  3.         if is_prime(number):
  4.             yield number
  5.         number += 1
复制代码

最佳答案

查看完整内容

程序A直接执行则__name__ == '__main__' 如果是程序B通过import A调用,则判断不成立,不执行solve()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-14 23:14:04 | 显示全部楼层
伙夫和甲鱼 发表于 2016-4-16 10:29
请问什么叫作为主程序调用?什么叫作为模块调用?

程序A直接执行则__name__ == '__main__'
如果是程序B通过import A调用,则判断不成立,不执行solve()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-15 08:44:23 | 显示全部楼层
1. 02行已有total=2,所以get_primes从3开始,这个参数是质数的开始值,以后每次迭代都 number +=1
2. 判断如果作为主程序执行则调用solve(),如果作为模块调入则不调用solve()
3. 如果是质数则返回质数的值,挂起,等待下一次调用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-4-16 10:29:37 | 显示全部楼层
冬雪雪冬 发表于 2016-4-15 08:44
1. 02行已有total=2,所以get_primes从3开始,这个参数是质数的开始值,以后每次迭代都 number +=1
2. 判 ...

请问什么叫作为主程序调用?什么叫作为模块调用?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-24 19:34:13 | 显示全部楼层
路过
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-27 10:29:05 | 显示全部楼层
路过
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-20 17:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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