簡體   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