水仙花数编程练习,放在编译器下发现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回答

时间,

2019-03-26

同学,你好,是在计算个位,十位,百位那出错了,同学的计算方式得到的结果如下图所示:结果并不是整数,因为/是浮点数除法,即使能够整除,得到的结果也为float型,才导致程序结果不正确。

http://img.mukewang.com/climg/5c99922b00010a1603700105.jpg

同学可以通过%取余和//取商来求个位,十位和百位。参考代码如下: 

http://img.mukewang.com/climg/5c9993820001bbe103690114.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~~

3

癫某人

提问者

2019-03-26

经过我后期debug,发现有两个错误:

  1. gw,sw,bw经过运算以后是浮点数,导致了total的值与num不匹配

  2. 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))


3

癫某人

提问者

2019-03-26

另外请忽略第一段代码里的第二行num = int(num),写重了

1

0 学习 · 8160 问题

查看课程