鱼C论坛

 找回密码
 立即注册
查看: 1216|回复: 3

[已解决]程序总显示错误

[复制链接]
发表于 2020-7-20 18:45:43 | 显示全部楼层 |阅读模式

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

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

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

  2. def is_primes(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(m.sqrt(number)+1), 2):
  9.             if number % current == 0:
  10.                 return False
  11.         return True
  12.     return False

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

  18. def sum_primes(lim):
  19.     total = 0
  20.     for i in get_primes(2):
  21.         if i < lim:
  22.             total += i
  23.         else:
  24.             print(total)
  25.             return

  26. if __name__ == '__main__':
  27.     range = int(input())
  28.     sum_primes(range)
复制代码
  1. import math as m

  2. def is_primes(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(m.sqrt(number)+1), 2):
  9.             if number % current == 0:
  10.                 return False
  11.         return True
  12.     return False

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

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

  26. if __name__ == '__main__':

  27.     sum_primes()
复制代码
最佳答案
2020-7-20 18:48:38
超级大的甲鱼 发表于 2020-7-20 18:46
想把sum_primes()的范围改成可变的应该怎么改呢??这是第49课的最后一题




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

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

改下变量名即可了吧:

  1. import math as m

  2. def is_primes(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(m.sqrt(number)+1), 2):
  9.             if number % current == 0:
  10.                 return False
  11.         return True
  12.     return False

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

  18. def sum_primes(lim):
  19.     total = 0
  20.     for i in get_primes(2):
  21.         if i < lim:
  22.             total += i
  23.         else:
  24.             print(total)
  25.             return

  26. if __name__ == '__main__':
  27.     temp = int(input())
  28.     sum_primes(temp)
复制代码

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

使用道具 举报

 楼主| 发表于 2020-7-20 18:46:49 | 显示全部楼层
想把sum_primes()的范围改成可变的应该怎么改呢??这是第49课的最后一题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-20 18:48:38 | 显示全部楼层    本楼为最佳答案   
超级大的甲鱼 发表于 2020-7-20 18:46
想把sum_primes()的范围改成可变的应该怎么改呢??这是第49课的最后一题




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

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

改下变量名即可了吧:

  1. import math as m

  2. def is_primes(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(m.sqrt(number)+1), 2):
  9.             if number % current == 0:
  10.                 return False
  11.         return True
  12.     return False

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

  18. def sum_primes(lim):
  19.     total = 0
  20.     for i in get_primes(2):
  21.         if i < lim:
  22.             total += i
  23.         else:
  24.             print(total)
  25.             return

  26. if __name__ == '__main__':
  27.     temp = int(input())
  28.     sum_primes(temp)
复制代码

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

使用道具 举报

发表于 2020-7-20 18:50:33 | 显示全部楼层
定义变量不建议用内置函数名做变量名,这样新变量会覆盖内置函数导致 Bug,把变量 range 改个名就行了:

  1. import math as m

  2. def is_primes(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(m.sqrt(number)+1), 2):
  9.             if number % current == 0:
  10.                 return False
  11.         return True
  12.     return False

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

  18. def sum_primes(lim):
  19.     total = 0
  20.     for i in get_primes(2):
  21.         if i < lim:
  22.             total += i
  23.         else:
  24.             print(total)
  25.             return

  26. if __name__ == '__main__':
  27.     range1 = int(input())
  28.     sum_primes(range1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 21:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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