请帮我用python写个判断水仙花数的代码,要求如下:水仙花数是一个三位数,他的每位数字的三次幂之和等于它本身,例如153、370,按要求写个程序,可以判断用户输入的三位数是否为水仙花数
时间: 2025-06-13 22:18:58 浏览: 19
<think>好的,我需要帮助用户编写一个Python程序来判断三位数是否是水仙花数。首先,我得明确水仙花数的定义:三位数,每个位上数字的立方和等于它本身,比如153=1³+5³+3³。
用户提到输入是三位数,但可能需要先验证输入是否有效。根据引用[4],如果不是三位数,应该输出错误信息。所以程序需要先检查输入是否在100到999之间。
接下来,如何分解数字的各位数呢?比如,输入153,百位是1,十位是5,个位是3。可以用整除和取余的方法。例如,百位a = n // 100,十位b = (n // 10) % 10,个位c = n % 10。
然后计算立方和:sum = a**3 + b**3 + c**3。如果sum等于原数n,就是水仙花数。
流程应该是这样的:先获取输入,判断是否为三位数,不是的话输出error。如果是,分解各位,计算立方和,判断并输出yes或no。
需要注意输入可能是非整数的情况,比如用户输入字符串。这时候要用try-except处理异常,提示输入错误。不过根据引用[4]的题目要求,可能假设输入是整数,但实际应用中可能需要处理这种情况。
综合这些步骤,写出代码结构。测试几个例子,比如153应该返回yes,154返回no,99返回error,1000也返回error。
另外,引用[1]中的代码虽然用于生成所有水仙花数,但分解位数的方法可以参考。引用[2]和[5]的C语言代码逻辑类似,只是语法不同。
最后,按照用户的要求,输出格式是yes/no/error,所以程序需要分情况处理。确保所有边界情况都被覆盖,比如输入正好是100或999的情况。</think>根据水仙花数的定义和Python实现需求,以下是分步解答和代码实现:
### 实现步骤
1. **输入验证**:确保输入是三位整数(范围100-999)
2. **位数分解**:提取数字的百位、十位、个位
3. **立方和计算**:计算各位数字立方和
4. **条件判断**:比较立方和与原数是否相等
### Python代码实现
```python
def is_narcissistic_number():
try:
num = int(input("请输入一个三位整数: "))
if 100 <= num <= 999:
a = num // 100 # 获取百位数
b = (num // 10) % 10 # 获取十位数
c = num % 10 # 获取个位数
if num == a**3 + b**3 + c**3:
print("yes")
else:
print("no")
else:
print("error")
except ValueError:
print("error")
# 调用函数
is_narcissistic_number()
```
### 代码说明
1. **输入处理**:使用`try-except`捕获非整数输入,符合引用[4]的错误处理要求
2. **范围验证**:`if 100 <= num <= 999`确保输入是有效三位数
3. **数位分解**:
- 百位数:`num // 100`(整除100)
- 十位数:`(num // 10) % 10`(先整除10后取模)
- 个位数:`num % 10`(直接取模10)
4. **立方和验证**:`a**3 + b**3 + c**3`计算各位立方和
### 测试案例
| 输入 | 预期输出 | 说明 |
|------|----------|------|
| 153 | yes | 标准水仙花数 |
| 370 | yes | 水仙花数 |
| 111 | no | 1³+1³+1³=3≠111 |
| 99 | error | 不足三位 |
| 1000 | error | 超过三位 |
| abc | error | 非法输入 |
阅读全文
相关推荐



















