求水仙花数,代码没有报错但是出不来结果,求大神!!!!
本帖最后由 小马爱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!')
呜呜呜呜呜 新手求大神解决! 代码给你改好了:
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!")
至于会重复打印的问题,那就是你的问题了。。。 python中输入数字自动识别为整型,length = len(num)这里没法用吧{:10_275:}
你是不是用内置数了 dlnb526 发表于 2020-3-22 10:45
python中输入数字自动识别为整型,length = len(num)这里没法用吧
emmmm但是在定义的函数体里他还是str格式的。。 qiuyouzhi 发表于 2020-3-22 10:43
代码给你改好了:
至于会重复打印的问题,那就是你的问题了。。。
难道是我vscode的问题。。。我把你最后的else去掉了但是还是输出不了水仙花数 就还是跟我上面运行图结果一样。。。。。 wangka 发表于 2020-3-22 10:49
你是不是用内置数了
没有欸。。代码就是上面那些{:10_266:} 小马爱python 发表于 2020-3-22 10:54
难道是我vscode的问题。。。我把你最后的else去掉了但是还是输出不了水仙花数 就还是跟我上面运行图结果 ...
你用IDLE?
我这里IDLE没有问题
或者命令行也行 qiuyouzhi 发表于 2020-3-22 10:57
你用IDLE?
我这里IDLE没有问题
或者命令行也行
你输出的结果是一直跳10000吧。。。 小马爱python 发表于 2020-3-22 11:08
你输出的结果是一直跳10000吧。。。
是的 本帖最后由 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)
错误总结一下:
一、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: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]