超级大的甲鱼 发表于 2020-7-20 18:45:43

程序总显示错误

第一个程序总显示int不可以被调用,把sum_primes()里的参数去掉就能正常跑了,这是为什么呢??import math as m

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

def get_primes(num):
    while True:
      if is_primes(num):
            yield num
      num += 1

def sum_primes(lim):
    total = 0
    for i in get_primes(2):
      if i < lim:
            total += i
      else:
            print(total)
            return

if __name__ == '__main__':
    range = int(input())
    sum_primes(range)
import math as m

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

def get_primes(num):
    while True:
      if is_primes(num):
            yield num
      num += 1

def sum_primes():
    total = 0
    for i in get_primes(2):
      if i < 2000000:
            total += i
      else:
            print(total)
            return

if __name__ == '__main__':

    sum_primes()

超级大的甲鱼 发表于 2020-7-20 18:46:49

想把sum_primes()的范围改成可变的应该怎么改呢??这是第49课的最后一题

Twilight6 发表于 2020-7-20 18:48:38

超级大的甲鱼 发表于 2020-7-20 18:46
想把sum_primes()的范围改成可变的应该怎么改呢??这是第49课的最后一题



你用 range = int(input()) ,会导致 range 函数被你这边赋值给覆盖,失去原有的 range 函数的功能

所以 Python 变量命名时候注意别把 关键字、内置函数登 Python 内置的一系列东西,拿去当作变量名

改下变量名即可了吧:

import math as m

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

def get_primes(num):
    while True:
      if is_primes(num):
            yield num
      num += 1

def sum_primes(lim):
    total = 0
    for i in get_primes(2):
      if i < lim:
            total += i
      else:
            print(total)
            return

if __name__ == '__main__':
    temp = int(input())
    sum_primes(temp)

zltzlt 发表于 2020-7-20 18:50:33

定义变量不建议用内置函数名做变量名,这样新变量会覆盖内置函数导致 Bug,把变量 range 改个名就行了:

import math as m

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

def get_primes(num):
    while True:
      if is_primes(num):
            yield num
      num += 1

def sum_primes(lim):
    total = 0
    for i in get_primes(2):
      if i < lim:
            total += i
      else:
            print(total)
            return

if __name__ == '__main__':
    range1 = int(input())
    sum_primes(range1)
页: [1]
查看完整版本: 程序总显示错误