|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jcpython2 于 2022-7-2 16:06 编辑
- #求水仙花数
- def flow(s):
- while s <= 999:
- s = str(s)
- sa = list(s)
- k = (int(sa[0])**3 + int(sa[1])**3 + int(sa[2])**3)
- if k == int(s):
- print(s,'非水仙花数')
- int[s] += 1
- else:
- print(s,'非水仙花数')
- int[s] += 1
- flow(153)
复制代码
报错 TypeError: 'type' object is not subscriptable
int str chr开始有点混乱了
另外如果我用
- for i in range(999):
- if 100 >= i <= 999:
复制代码
这样求水仙花会否更高效? 但第一个报错我先不想这个了。。。。。。
附
老哥我的思路是用while循环
只要是len =3的都进入循环 (代码修改过这一步没写)
s是循环数 范围100-999 (代码修改过这一步没写)
然后把s转成list,再从list拆分后立方求和
k = (int(sa[0])**3 + int(sa[1])**3 + int(sa[2])**3)
如果求和等于当前循环数则为水仙花数
是否水仙花数都+=1 (这步错了)
当我发帖的时候才突然想起rangge(999)这个也行,但是不熟悉range连range(100,999)都忘记了
我知道有很多更加高效的方法解决这个问题,但我想从我自己的代码错误中找出我的错误,而不是单纯的知道怎么生成水仙花数,因为我感觉有时候同样的效果,我写的效率不高,但是我能理解,优化效率现在不是我优先考虑的,我想先熟记代码使用逻辑
- #求水仙花数
- def Number_of_daffodils():
- for n in range(100,1000):#循环n从100开始自加到999
- i = n // 100 #//可以在求商的同时自动去掉小数,例如153//100 == 1
- #因为i是百位数,去掉小数避免出现百位数为1.53的尴尬问题
- j = n // 10 % 10#j为十位数 例如153//10 == 15 若要求十位数 则15%10余5便为十位数
- k = n % 10 #同上
- if n == i ** 3 + j ** 3 + k ** 3:#判断如果n为个十百的3次方相加则print
- print (n)
- Number_of_daffodils()
复制代码
|
|