2017-09-25 67 views
0

我需要它做一個家庭作業,我們有一位新老師說我們應該谷歌它,但我沒有找到有用的答案。如何在不使用Python庫函數的情況下將「String」轉換爲「Int」

我嘗試,例如轉換:A =「546」發送= 546,沒有任何庫函數

感謝您的幫助提前!

+4

據推測 「庫函數」 包括像'int'內建函數,是嗎?考慮到這是家庭作業,我們希望看到你迄今爲止所考慮過的/發現/嘗試的內容,以及你所困擾的內容。 –

+2

也許你應該問一下你的老師認爲你會發現有用的谷歌詞彙,並分享你搜索的內容,這樣我們知道你看過的內容對你沒有幫助嗎?除此之外 - 您對「圖書館功能」的理解是什麼? –

+1

看看技術上正確的答案的最終版本,並且需要2-3次迭代才能消除所有內置函數,但我必須說這是一個相當艱難的任務。 – luk32

回答

2

的 「最純淨」 我能想到的:

>>> a = "546" 
>>> result = 0 
>>> for digit in a: 
     result *= 10 
     for d in '': 
      result += digit > d 

>>> result 
546 

或者使用@ Ajax1234的詞典主意,如果允許的話:

>>> a = "546" 
>>> value = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9} 
>>> result = 0 
>>> for digit in a: 
     result = 10 * result + value[digit] 

>>> result 
546 
1

您可以保留一個存儲數字鍵的字符串和整數值的字典,然後迭代該字符串。雖然遍歷字符串,可以使用enumerate以保證指數的跟蹤,然後從字典上的相應鍵提高10到功率減去1,然後乘以:

a = "546" 
length = 0 
for i in a: 
    length += 1 
d = {'1': 1, '0': 0, '3': 3, '2': 2, '5': 5, '4': 4, '7': 7, '6': 6, '9': 9, '8': 8} 
count = 0 
counter = 0 
for i in a: 
    count += (10**(length-counter-1)*d[i]) 
    counter += 1 
print(count) 

輸出:

546 
+1

您在這裏使用sum,pow和len? – Evan

+1

and'enumerate' :) – dabadaba

+0

我完全忘記了OP的要求,除了'int'之外,不僅限於所有的內建函數。請參閱我最近的編輯。 – Ajax1234

1

訣竅是546 = 500 + 40 + 65*10^2 + 4*10^1 + 6*10^0

請注意指數如何纔是指數(反向)。利用這一點,你可以概括這種方法成一個函數:

def strToInt(number): 
    total = 0        # this is where we accumulate the result 
    pwr = len(number) - 1     # start the exponent off as 2 
    for digit in number:     # digit is the str "5", "4", and "6" 
     digitVal = ord(digit) - ord('0') # using the ascii table, digitVal is the int value of 5,4, and 6. 
     total += digitVal * (10 ** pwr) # add 500, then 40, then 6 
     pwr -= 1       # make sure to drop the exponent down by one each time 
    return total 

而且你可以使用它像這樣:

>>> strToInt("546") 
546 
+4

您在這裏使用len和ord ... – Evan

+1

@Evan,這會產生良好的,可讀的,有教育意義的代碼。我認爲這個答案更符合任務的精神,而不是試圖從你的代碼中打出任何內建的單詞。 –

0

您可以遍歷字符串並使用ord對每個字符執行操作。

例如:

a="546" 
num=0 
for i in a: 
    num = num * 10 + ord(i) - ord('0') 
+0

'ord'顯然是一個庫函數,因此不被允許。 –

相關問題