anhaozi 发表于 2020-9-13 10:05:15

i=100 怎么提取i中的三个数字

def special():
    '寻找水仙花数如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。,'
    i = 100
    while 100<=i<=999:
      if i == i**3 +i**3 +i**3:
            print ('水仙花数为:'+str(i))
            i += 1
      else:
            i += 1
报错了,错误是TypeError: 'int' object is not subscriptable

弱弱的佳佳 发表于 2020-9-13 10:10:23

i是int类型的,不支持下标呀,所以i这种的表示是错误的

coolliqing 发表于 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的值换成了自己输入,可以参考一下(我也是菜鸟写的不好别喷{:10_312:} )。
print('输入一个3位数判断是不是水仙花数')
num = input('请输入一个三位数:')
while (not num.isdigit()) or (len(num) > 3):
    num = input('输入错误,请重新输入:')
num_1 = []
for i in num:
    num_1.append(i)            
first_num = int(num_1)
second_num = int(num_1)
third_num = int(num_1)
add_in = first_num**3 + second_num**3 + third_num**3
if add_in == int(num):
    print(num,'是水仙花数哦')
else:
    print(num,'不是水仙花数哦')

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

print('输入一个3位数判断是不是水仙花数')
num = input('请输入一个三位数:')
while (not num.isdigit()) or (3 > len(num)) or (len(num) > 3:)
    num = input('输入错误,请重新输入:')
num_1 =int(num)
text = num_1
sum = 0
while text:
    sum = sum + (text%10) ** 3
    text //= 10
if sum == num_1:
    print('%d是水仙花数哦'%(num_1))
else:
    print('%d不是水仙花数哦'%(num_1))

弱弱的佳佳 发表于 2020-9-13 10:21:40

coolliqing 发表于 2020-9-13 10:12
提供两个思路吧。
1.你可以把100转换成字符串 str(i) 或者列表list(i)这样就可以使用切片的方式分解这个数 ...

def special():
    '寻找水仙花数如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。,'
    i = 100
    while 100<=i<=999:
      i1 = (i // 100) ** 3
      i2 = ((i // 10) % 10) ** 3
      i3 = (i % 10) ** 3
      if i == i1 + i2 + i3:
            print(i)
      i += 1

if __name__ == '__main__':
    special()

anhaozi 发表于 2020-9-13 16:01:10

弱弱的佳佳 发表于 2020-9-13 10:10
i是int类型的,不支持下标呀,所以i这种的表示是错误的

好滴,谢谢啦
页: [1]
查看完整版本: i=100 怎么提取i中的三个数字