如何在不使用Python库函数的情况下将“String”转换为“Int”
我需要它做一个家庭作业,我们有一位新老师说我们应该谷歌它,但我没有找到有用的答案。如何在不使用Python库函数的情况下将“String”转换为“Int”
我尝试,例如转换:A =“546”发送= 546,没有任何库函数
感谢您的帮助提前!
的 “最纯净” 我能想到的:
>>> 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
诀窍是546 = 500 + 40 + 6
或5*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
您在这里使用len和ord ... – Evan
@Evan,这会产生良好的,可读的,有教育意义的代码。我认为这个答案更符合任务的精神,而不是试图从你的代码中打出任何内建的单词。 –
您可以遍历字符串并使用ord对每个字符执行操作。
例如:
a="546"
num=0
for i in a:
num = num * 10 + ord(i) - ord('0')
'ord'显然是一个库函数,因此不被允许。 –
据推测 “库函数” 包括像'int'内建函数,是吗?考虑到这是家庭作业,我们希望看到你迄今为止所考虑过的/发现/尝试的内容,以及你所困扰的内容。 –
也许你应该问一下你的老师认为你会发现有用的谷歌词汇,并分享你搜索的内容,这样我们知道你看过的内容对你没有帮助吗?除此之外 - 您对“图书馆功能”的理解是什么? –
看看技术上正确的答案的最终版本,并且需要2-3次迭代才能消除所有内置函数,但我必须说这是一个相当艰难的任务。 – luk32