[英]Can someone explain to me why python 3.4 is parsing a string to an int without me explicitly asking for it
我很困惑,这令人难以置信,这可能是一个愚蠢的错误,但是我对此行为完全迷住了。 这是小算法(我认为应该如此):
a, b, n = input().split()
x = 0
def prod(num):
x=1
for y in range(len(num)):
if int(num[y])>0:
x*=int(num[y])
x+=int(num)
return x
while x < int(n):
a, b = b, prod(b)+prod(a)
print(b, end=' ')
x+=1
这显然是我必须要做的才能使它起作用:
a, b, n = input().split()
x = 0
def prod(num):
x=1
for y in range(len(str(num))):
if int(str(num)[y])>0:
x*=int(str(num)[y])
x+=int(num)
return x
while x < int(n):
a, b = b, prod(b)+prod(a)
print(b, end=' ')
x+=1
因此,如果不清楚,我的问题出在prod函数中。 似乎没有明显的原因将字符串转换为int。
我给它的输入是1 100 3
,应该是这种格式。
Python不会将您的字符串隐式转换为整数,不。 而是给函数一个整数。
您要从prod()
返回一个整数,然后在下一个操作中,将该整数传递给prod()
函数。
这些步骤是:
a, b, n = '1', '100', '3'
prod('100') + prod('1')
,产生101 + 2
是3
,是整数。 a, b = '100', 3
,所以现在b
是整数,转到下一个迭代。 prod(3) + prod('100')
; 您正在向函数传递整数。 也许您需要转换总和以从prod()
返回字符串? 将您的退货单更改为:
return str(x)
或者prod()
结果的总和应该是一个字符串:
a, b = b, str(prod(b) + prod(a))
您可以将函数简化为直接迭代num
,并使用单个字符也具有顺序的事实:
def prod(num):
x = 1
for digit in num:
if digit > '0':
x *= int(digit)
x += int(num)
return x # or `str(x) if a string is expected
您的while
循环应该只是带有range()
的for
循环:
for iteration in range(int(n)):
a, b = b, str(prod(b) + prod(a))
print(b, end=' ')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.