水仙花数编程练习,放在编译器下发现153输出变成不是水仙花数了,求解
来源:2-14 编程练习
癫某人
2019-03-26 10:32:13
num = int(input("请输入一个三位数:"))
num = int(num)
# 分别求出三位数的个位,十位,百位
gw = num / 1 % 10
sw = num / 10 % 10
bw = num / 100 % 10
# 定义变量total,保存各位数字立方和
total = gw ** 3 + sw ** 3 + bw ** 3
# 用if语句判断条件是否成立,并做出相应的输出
# 补全代码
if total == num:
print('{0}是水仙花数'.format(num))
else:
print('{0}不是水仙花数'.format(num))
3回答
同学,你好,是在计算个位,十位,百位那出错了,同学的计算方式得到的结果如下图所示:结果并不是整数,因为/是浮点数除法,即使能够整除,得到的结果也为float型,才导致程序结果不正确。
同学可以通过%取余和//取商来求个位,十位和百位。参考代码如下:
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~~
癫某人
提问者
2019-03-26
经过我后期debug,发现有两个错误:
gw,sw,bw经过运算以后是浮点数,导致了total的值与num不匹配
if判断条件里num再接受了input()函数的赋值以后是字符串类型,字符串类型与int类型比较,肯定是False
以下是我的改正代码:
num = int(input("请输入一个三位数:"))
num = int(num)
# 分别求出三位数的个位,十位,百位
gw = int(num / 1 % 10)
sw = int(num / 10 % 10)
bw = int(num / 100 % 10)
# 定义变量total,保存各位数字立方和
total = gw ** 3 + sw ** 3 + bw ** 3
# 用if语句判断条件是否成立,并做出相应的输出
if total == int(num):
print('{0}是水仙花数'.format(num))
else:
print('{0}不是水仙花数'.format(num))
仔细思考,发现为什么要用数学上的操作呢,直接利用字符串的索引操作貌似更简单
以下是代码:
num = input("请输入一个三位数:")
# 分别求出三位数的个位,十位,百位
gw = num[0]
sw = num[1]
bw = num[2]
# 定义变量total,保存各位数字立方和
total = int(gw)**3 + int(bw)**3 + int(sw)**3
# 用if语句判断条件是否成立,并做出相应的输出
if total == int(num):
print('{0}是水仙花数'.format(num))
else:
print('{0}不是水仙花数'.format(num))
癫某人
提问者
2019-03-26
另外请忽略第一段代码里的第二行num = int(num),写重了
相似问题