轨道
/
Python
Python
/
练习
/
完全数
完全数

完全数

简单

说明

根据 Nicomachus(公元 60 - 120 年)对正整数的分类方法,判断一个数是完全数、过剩数还是亏数。

希腊数学家 Nicomachus 为正整数设计了一套分类方法,根据每个数的真因数和,把它们分别归入完全数、过剩数或亏数这三类,且每个数只属于其中一类。 _真因数和_的定义是:一个数的所有因数之和,但不包括这个数本身。 例如,15 的真因数和是 1 + 3 + 5 = 9。

完全数

当一个数等于它的真因数和时,它就是完全数。 例如:

  • 6 是完全数,因为 1 + 2 + 3 = 6
  • 28 是完全数,因为 1 + 2 + 4 + 7 + 14 = 28

过剩数

当一个数小于它的真因数和时,它就是过剩数。 例如:

  • 12 是过剩数,因为 1 + 2 + 3 + 4 + 6 = 16
  • 24 是过剩数,因为 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36

亏数

当一个数大于它的真因数和时,它就是亏数。 例如:

  • 8 是亏数,因为 1 + 2 + 4 = 7
  • 质数都是亏数

任务

实现一种方法,判断给定的数是否为完全数。 根据你所使用的编程语言,你可能还需要实现判断给定数是过剩数还是亏数的方法。

异常消息

有时需要抛出异常。抛出异常时,一定要附上一段有意义的错误消息,说明错误的来源。这样代码更易读,也能大大方便调试。如果已经确定错误来源属于某种类型,你可以选择抛出某个内置错误类型,但同样要附上有意义的消息。

本练习要求你在传给classify()函数的数字不是_正整数_时,使用 raise 语句来“抛出”ValueError。只有既用raise抛出该exception,又附上消息,测试才会通过。

要给ValueError附上消息,就把消息作为实参传给该exception类型:

# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Python Exercism

准备好开始 完全数 了吗?

注册 Exercism,借助 17 个概念146 个练习 和真人导师指导,学习并掌握 Python,全部免费。