小马爱python 发表于 2020-3-22 10:35:29

求水仙花数,代码没有报错但是出不来结果,求大神!!!!

本帖最后由 小马爱python 于 2020-3-22 10:54 编辑

求1-x区间满足水仙花数规律的数,python代码
def issuper(num):
    t = int(num)
    length = len(num)
    sum = 0
    while(t>0):
      a = t%10
      sum += a**length
      t = t/10
    if sum == int(num):
      return True
    else:
      return False

i = input("Enter an integer:")
for number in range(1,int(i)+1):
    if issuper(i):
      print(i + 'is SuperWaterFlowers!')


呜呜呜呜呜 新手求大神解决!

qiuyouzhi 发表于 2020-3-22 10:43:10

代码给你改好了:
def issuper(num):
    t = int(num)
    length = len(str(num))
    sum = 0
    while(t>0):
      a = t%10
      sum += a**3
      t = t//10
    if sum == int(num):
      return True
    return False

i = input("Enter an integer:")
for number in range(1, int(i)+1):
    if issuper(i):
      print(i + 'is SuperWaterFlowers!')
    else:
      print(i+"is not a SuperWaterFlowers!")
至于会重复打印的问题,那就是你的问题了。。。

dlnb526 发表于 2020-3-22 10:45:27

python中输入数字自动识别为整型,length = len(num)这里没法用吧{:10_275:}

wangka 发表于 2020-3-22 10:49:18

你是不是用内置数了

小马爱python 发表于 2020-3-22 10:53:00

dlnb526 发表于 2020-3-22 10:45
python中输入数字自动识别为整型,length = len(num)这里没法用吧

emmmm但是在定义的函数体里他还是str格式的。。

小马爱python 发表于 2020-3-22 10:54:10

qiuyouzhi 发表于 2020-3-22 10:43
代码给你改好了:

至于会重复打印的问题,那就是你的问题了。。。

难道是我vscode的问题。。。我把你最后的else去掉了但是还是输出不了水仙花数 就还是跟我上面运行图结果一样。。。。。

小马爱python 发表于 2020-3-22 10:55:33

wangka 发表于 2020-3-22 10:49
你是不是用内置数了

没有欸。。代码就是上面那些{:10_266:}

qiuyouzhi 发表于 2020-3-22 10:57:50

小马爱python 发表于 2020-3-22 10:54
难道是我vscode的问题。。。我把你最后的else去掉了但是还是输出不了水仙花数 就还是跟我上面运行图结果 ...

你用IDLE?
我这里IDLE没有问题
或者命令行也行

小马爱python 发表于 2020-3-22 11:08:53

qiuyouzhi 发表于 2020-3-22 10:57
你用IDLE?
我这里IDLE没有问题
或者命令行也行

你输出的结果是一直跳10000吧。。。

qiuyouzhi 发表于 2020-3-22 11:13:40

小马爱python 发表于 2020-3-22 11:08
你输出的结果是一直跳10000吧。。。

是的

jackz007 发表于 2020-3-22 11:23:18

本帖最后由 jackz007 于 2020-3-22 11:34 编辑

      issuper() 函数问题非常大!
      试试我修改的版本
def issuper(num):
    s , t = 0 , num
    while t :
      s += (t % 10) ** 3
      t //= 10
    if num == s : return True
    else return False
      下面是我写的水仙花数
for n in range(2 , int(input("Enter an integer:"))):
    if sum() == n : print(n)

Hoiste 发表于 2020-3-22 11:29:40

错误总结一下:
一、for循环里面循环因子是number,而i的值是你输入的,比如输入1000,结果你在for循环里用i代入函数,那么i永远是1000,应该用number。
二、水仙花数专指百位数,所以用你的方法从100开始才不会出现个位及十位
三、根据上面的问题,一些数据类型就需要响应的更改。
def issuper(num):
    t = int(num)
    length = len(str(num))
    sum = 0
    while(t>0):
      a = t%10
      sum += a**length
      t = t//10
    if sum == int(num):
      return True
    else:
      return False

i = input("Enter an integer:")
for number in range(100, int(i)+1):
    if issuper(number):
      print(number,'is SuperWaterFlowers!')

爱林可可可 发表于 2020-3-22 11:45:46

本帖最后由 爱林可可可 于 2020-3-22 11:49 编辑

注意你定义的issuper函数后面的本身就是int类型 而int类型是不能够直接用len函数的,必须先用str变成字符串才能用len函数
在最后输出的时候print中的number和" "中不能用加号,因为类型是不同的 所以要用,隔开 用+会报错

修改后的代码如下def issuper(num):
    t = num
    length = len(str(num))
    sum = 0
    while t:
      a = t%10
      sum += a**length
      t = t//10
    if sum == num:
      return True
    else:
      return False

i = int(input("Enter an integer:"))
for number in range(1 , i+1):
    if issuper(number):
      print(number,'is SuperWaterFlowers!')
页: [1]
查看完整版本: 求水仙花数,代码没有报错但是出不来结果,求大神!!!!