繁体   English   中英

有人可以向我解释为什么python 3.4在没有我明确要求的情况下将字符串解析为int

[英]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()函数。

这些步骤是:

  1. a, b, n = '1', '100', '3'
  2. 调用prod('100') + prod('1') ,产生101 + 23 ,是整数。
  3. a, b = '100', 3 ,所以现在b是整数,转到下一个迭代。
  4. 调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM