小丑9 发表于 2022-3-24 17:04:22

第9行那里,当number是3时返回的列表不应该是空的吗,那下面执行if语句不会报错吗

本帖最后由 小丑9 于 2022-3-24 17:10 编辑

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


还有第23行,get_primes()函数它返回的不是一个 int 型吗?int型不是不可迭代的吗

isdkz 发表于 2022-3-24 17:09:04

for 循环迭代不出元素就不会进入循环体,不进入循环体就不会执行 if 呀

小丑9 发表于 2022-3-24 17:11:00

isdkz 发表于 2022-3-24 17:09
for 循环迭代不出元素就不会进入循环体,不进入循环体就不会执行 if 呀

那第23行那里呢,get_primes()函数它返回的不是一个 int 型吗?int型不是不可迭代的吗

isdkz 发表于 2022-3-24 17:14:18

本帖最后由 isdkz 于 2022-3-24 17:15 编辑

小丑9 发表于 2022-3-24 17:11
那第23行那里呢,get_primes()函数它返回的不是一个 int 型吗?int型不是不可迭代的吗

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

函数里面 使用到 yield ,这种函数返回的是一个生成器,生成器是可迭代的,

生成器的内容你可以看一下这个:https://fishc.com.cn/thread-60398-1-1.html

小丑9 发表于 2022-3-24 17:16:46

isdkz 发表于 2022-3-24 17:14
def get_primes(number):
    while True:
      if is_prime(number):


那如果返回的number是3的话,那迭代的结果就是1,2,3吗

小丑9 发表于 2022-3-24 17:21:00

isdkz 发表于 2022-3-24 17:14
def get_primes(number):
    while True:
      if is_prime(number):


还是说那个for语句中的i就是3

isdkz 发表于 2022-3-24 17:23:50

小丑9 发表于 2022-3-24 17:21
还是说那个for语句中的i就是3

如果 number 是 3 的话,它会迭代出 以 3 开始的所有素数

小丑9 发表于 2022-3-24 17:51:18

isdkz 发表于 2022-3-24 17:23
如果 number 是 3 的话,它会迭代出 以 3 开始的所有素数

那个next_prime在get_primes迭代出的是什么呢

小丑9 发表于 2022-3-24 17:53:07

isdkz 发表于 2022-3-24 17:23
如果 number 是 3 的话,它会迭代出 以 3 开始的所有素数

懂了懂了,非常感谢
页: [1]
查看完整版本: 第9行那里,当number是3时返回的列表不应该是空的吗,那下面执行if语句不会报错吗