鱼C论坛

 找回密码
 立即注册
查看: 1156|回复: 4

[已解决]i=100 怎么提取i中的三个数字

[复制链接]
发表于 2020-9-13 10:05:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. def special():
  2.     '寻找水仙花数如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。,'
  3.     i = 100
  4.     while 100<=i<=999:
  5.         if i == i[1]**3 +i[2]**3 +i[3]**3:
  6.             print ('水仙花数为:'+str(i))
  7.             i += 1
  8.         else:
  9.             i += 1
复制代码

报错了,错误是
  1. TypeError: 'int' object is not subscriptable
复制代码
最佳答案
2020-9-13 10:12:40
本帖最后由 coolliqing 于 2020-9-13 11:03 编辑

你那i的值是一个整形(int),是不能切片的,提供两个思路吧。
1.你可以把100转换成字符串 str(i) 或者列表list(i)这样就可以使用切片的方式分解这个数字了。
2.用100%10可以的到100的个位,同样再用10%10可以得到100的十位,再次用1%10可以得到100的百位,那么100,10,1可以用地板除法得到,用100//10得到10,再用10//10得到1.
这两个思路都可以解这道题。

按照楼主想法用切片方法实现的代码,把直接定义i的值换成了自己输入,可以参考一下(我也是菜鸟写的不好别喷 )。
  1. print('输入一个3位数判断是不是水仙花数')
  2. num = input('请输入一个三位数:')
  3. while (not num.isdigit()) or (len(num) > 3):
  4.     num = input('输入错误,请重新输入:')
  5. num_1 = []
  6. for i in num:
  7.     num_1.append(i)            
  8. first_num = int(num_1[0])
  9. second_num = int(num_1[1])
  10. third_num = int(num_1[2])
  11. add_in = first_num**3 + second_num**3 + third_num**3
  12. if add_in == int(num):
  13.     print(num,'是水仙花数哦')
  14. else:
  15.     print(num,'不是水仙花数哦')
复制代码


用整除和地板除的思路又写了一个代码,如果对楼主有帮助记得给个最佳答案,谢谢

  1. print('输入一个3位数判断是不是水仙花数')
  2. num = input('请输入一个三位数:')
  3. while (not num.isdigit()) or (3 > len(num)) or (len(num) > 3:)
  4.     num = input('输入错误,请重新输入:')
  5. num_1 =int(num)
  6. text = num_1
  7. sum = 0
  8. while text:
  9.     sum = sum + (text%10) ** 3
  10.     text //= 10
  11. if sum == num_1:
  12.     print('%d是水仙花数哦'%(num_1))
  13. else:
  14.     print('%d不是水仙花数哦'%(num_1))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-13 10:10:23 | 显示全部楼层
i是int类型的,不支持下标呀,所以i[1]这种的表示是错误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-13 10:12:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 coolliqing 于 2020-9-13 11:03 编辑

你那i的值是一个整形(int),是不能切片的,提供两个思路吧。
1.你可以把100转换成字符串 str(i) 或者列表list(i)这样就可以使用切片的方式分解这个数字了。
2.用100%10可以的到100的个位,同样再用10%10可以得到100的十位,再次用1%10可以得到100的百位,那么100,10,1可以用地板除法得到,用100//10得到10,再用10//10得到1.
这两个思路都可以解这道题。

按照楼主想法用切片方法实现的代码,把直接定义i的值换成了自己输入,可以参考一下(我也是菜鸟写的不好别喷 )。
  1. print('输入一个3位数判断是不是水仙花数')
  2. num = input('请输入一个三位数:')
  3. while (not num.isdigit()) or (len(num) > 3):
  4.     num = input('输入错误,请重新输入:')
  5. num_1 = []
  6. for i in num:
  7.     num_1.append(i)            
  8. first_num = int(num_1[0])
  9. second_num = int(num_1[1])
  10. third_num = int(num_1[2])
  11. add_in = first_num**3 + second_num**3 + third_num**3
  12. if add_in == int(num):
  13.     print(num,'是水仙花数哦')
  14. else:
  15.     print(num,'不是水仙花数哦')
复制代码


用整除和地板除的思路又写了一个代码,如果对楼主有帮助记得给个最佳答案,谢谢

  1. print('输入一个3位数判断是不是水仙花数')
  2. num = input('请输入一个三位数:')
  3. while (not num.isdigit()) or (3 > len(num)) or (len(num) > 3:)
  4.     num = input('输入错误,请重新输入:')
  5. num_1 =int(num)
  6. text = num_1
  7. sum = 0
  8. while text:
  9.     sum = sum + (text%10) ** 3
  10.     text //= 10
  11. if sum == num_1:
  12.     print('%d是水仙花数哦'%(num_1))
  13. else:
  14.     print('%d不是水仙花数哦'%(num_1))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-13 10:21:40 | 显示全部楼层
coolliqing 发表于 2020-9-13 10:12
提供两个思路吧。
1.你可以把100转换成字符串 str(i) 或者列表list(i)这样就可以使用切片的方式分解这个数 ...
  1. def special():
  2.     '寻找水仙花数如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。,'
  3.     i = 100
  4.     while 100<=i<=999:
  5.         i1 = (i // 100) ** 3
  6.         i2 = ((i // 10) % 10) ** 3
  7.         i3 = (i % 10) ** 3
  8.         if i == i1 + i2 + i3:
  9.             print(i)
  10.         i += 1

  11. if __name__ == '__main__':
  12.     special()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-13 16:01:10 | 显示全部楼层
弱弱的佳佳 发表于 2020-9-13 10:10
i是int类型的,不支持下标呀,所以i[1]这种的表示是错误的

好滴,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-23 01:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表