如何在不使用Python库函数的情况下将“String”转换为“Int”

问题描述:

我需要它做一个家庭作业,我们有一位新老师说我们应该谷歌它,但我没有找到有用的答案。如何在不使用Python库函数的情况下将“String”转换为“Int”

我尝试,例如转换:A =“546”发送= 546,没有任何库函数

感谢您的帮助提前!

+4

据推测 “库函数” 包括像'int'内建函数,是吗?考虑到这是家庭作业,我们希望看到你迄今为止所考虑过的/发现/尝试的内容,以及你所困扰的内容。 –

+2

也许你应该问一下你的老师认为你会发现有用的谷歌词汇,并分享你搜索的内容,这样我们知道你看过的内容对你没有帮助吗?除此之外 - 您对“图书馆功能”的理解是什么? –

+1

看看技术上正确的答案的最终版本,并且需要2-3次迭代才能消除所有内置函数,但我必须说这是一个相当艰难的任务。 – luk32

的 “最纯净” 我能想到的:

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

您可以保留一个存储数字键的字符串和整数值的字典,然后迭代该字符串。虽然遍历字符串,可以使用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

诀窍是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,这会产生良好的,可读的,有教育意义的代码。我认为这个答案更符合任务的精神,而不是试图从你的代码中打出任何内建的单词。 –

您可以遍历字符串并使用ord对每个字符执行操作。

例如:

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

'ord'显然是一个库函数,因此不被允许。 –