目录
- 水仙花数简介
- 初阶研究
- 源码分享
- 程序分析
- 判断水仙花数的函数
- 用户输入
- 使用函数判断
- 运行结果展示
- 高阶研究
- 源码分享
- 程序分析
- 根据数字n得出数字范围
- 遍历列表以寻找所有水仙花数
- 简单判断列表内是否有水仙花数
- 运行结果展示
水仙花数简介
如果一个数各个数位上的数字的立方之和等于这个数本身,那么这个数被称为“水仙花数”。
例:
23不是水仙花数,因为23+33=8+27=35≠23
153是水仙花数,因为13+53+33=1+125+27=153=153
初阶研究
目标:根据用户输入的数,判断它是不是水仙花数。
源码分享
以下是程序的源码:
def check_number(n):
'''给定一个数n,判定它是不是水仙花数'''
list_n = list(str(n))
result = 0
for a in list_n:
result += int(a)**3
# 根据是否相等返回True或False
if result == n:
return True
else:
return False
if __name__ == '__main__':
while True:
message = "输入一个数,我来告诉你它是不是水仙花数。\n输入“q”退出。"
number = input(message) # 用户输入
if number == "q": # 退出程序
break
number = int(number)# 转为数字
# 根据判定结果输出结果
if check_number(number) == True:
print('它是水仙花数。\n')
elif check_number(number) == False:
print('它不是水仙花数。\n')
程序分析
判断水仙花数的函数
check_number()函数提供一个参数n,判断它是不是水仙花数。
def check_number(n):
'''给定一个数n,判定它是不是水仙花数'''
list_n = list(str(n))
result = 0
for a in list_n:
result += int(a)**3
# 根据是否相等返回True或False
if result == n:
return True
else:
return False
用户输入
根据用户输入的数字或者“q”来继续小程序的行为。
while True:
message = "输入一个数,我来告诉你它是不是水仙花数。\n输入“q”退出。"
number = input(message) # 用户输入
if number == "q": # 退出程序
break
number = int(number)# 转为数字
使用函数判断
# 根据判定结果输出结果
if check_number(number) == True:
print('它是水仙花数。\n')
elif check_number(number) == False:
print('它不是水仙花数。\n')
运行结果展示
高阶研究
目标:输入数字n,返回长度为n的所有水仙花数。
源码分享
以下是程序源码:
(备注:如果输入数字n较大,程序运行会比较慢)
def check_number(n):
'''给定一个数n,判定它是不是水仙花数'''
list_n = list(str(n))
result = 0
for a in list_n:
result += int(a)**3
# 根据是否相等返回True或False
if result == n:
return True
else:
return False
def main():
num = input('输入数字n,输出长度为n的所有水仙花数。\n')
num = int(num)
if num == 1:
f_n = 0
else:
f_n = int('1'+'0'*(num-1))
l_n = int('1'+'0'*num)
result = []
for n in range(f_n,l_n):
if check_number(n) == True:
result.append(str(n))
elif check_number(n) == False:
pass
return result
if __name__ == '__main__':
num_list = main()
if num_list:
print(','.join(num_list))
else:
print('没有水仙花数!')
程序分析
注:判断水仙花数的函数和初阶研究一样。
根据数字n得出数字范围
构造出数字上限和下限(下限+1,为了后面range()函数做铺垫)
num = input('输入数字n,输出长度为n的所有水仙花数。\n')
num = int(num)
if num == 1:
f_n = 0
else:
f_n = int('1'+'0'*(num-1))
l_n = int('1'+'0'*num)
遍历列表以寻找所有水仙花数
用定义好的函数check_number()寻找水仙花数。
result = []
for n in range(f_n,l_n):
if check_number(n) == True:
result.append(str(n))
elif check_number(n) == False:
pass
return result
简单判断列表内是否有水仙花数
这里比较简单,就不多加以分析了。
if __name__ == '__main__':
num_list = main()
if num_list:
print(','.join(num_list))
else:
print('没有水仙花数!')
运行结果展示
这是程序的运行结果: