我試圖在Python中實現add2strings
,sub2strings
,mult2strings
函數。如果你只是做int(string)
,他們都非常簡單,但是我想在沒有這個的情況下完成它們,並且不需要導入另一個作弊行爲,比如Decimal
。我目前的想法是使用bytes
。將字符串轉換爲不帶int的int()
是否有另一種方法可以做到這一點?
我試圖在Python中實現add2strings
,sub2strings
,mult2strings
函數。如果你只是做int(string)
,他們都非常簡單,但是我想在沒有這個的情況下完成它們,並且不需要導入另一個作弊行爲,比如Decimal
。我目前的想法是使用bytes
。將字符串轉換爲不帶int的int()
是否有另一種方法可以做到這一點?
請參閱基本atoi
在C:
int myAtoi(char *str)
{
int res = 0; // Initialize result
// Iterate through all characters of input string and update result
for (int i = 0; str[i] != '\0'; ++i)
res = res*10 + str[i] - '0';
// return result.
return res;
}
它轉換到Python:
def atoi(s):
rtr=0
for c in s:
rtr=rtr*10 + ord(c) - ord('0')
return rtr
測試:
>>> atoi('123456789')
123456789
如果要容納可選的符號並以空格int
的方式:
def atoi(s):
rtr, sign=0, 1
s=s.strip()
if s[0] in '+-':
sc, s=s[0], s[1:]
if sc=='-':
sign=-1
for c in s:
rtr=rtr*10 + ord(c) - ord('0')
return sign*rtr
現在添加例外,你在那裏!
這實在是低效的,但是:
>>> zero = ord("0")
>>> s = "1234"
>>> sum([x * 10**i for i, x in enumerate(map(lambda x: x - zero, map(ord, s))[::-1])])
1234
這是稍微好一點:
>>>> sum([x * 10**i for i, x in enumerate([ord(x) - zero for x in s[::-1]])])
1234
>>> atoi = lambda s: sum([x * 10**i for i, x in enumerate([ord(x) - zero for x in s[::-1]])])
>>> atoi("1234")
1234
import exceptions
MAX_INT = 1000
MIN_INT = -1000
def str2int(s):
for i in range(MIN_INT,MAX_INT):
if s == str(i):
return i
raise exceptions.OverflowError
def add2strings(s,t):
return str(str2int(s)+str2int(t))
print add2strings("170","-300")
print add2strings("170","-1001")
這給:
"-170"
Traceback (most recent call last):
Line 15, in <module>
print add2strings("170","-1001")
Line 12, in add2strings
return str(str2int(s)+str2int(t))
Line 9, in str2int
raise exceptions.OverflowError
OverflowError
回家吧,你醉了。 –
你不能告訴我何時編碼和* hic *何時不編碼。 * hic *這就是爲什麼*免費* maaaaan ... *免費在啤酒*。 –
我很*很想知道你爲什麼要這樣做。 –
你可以拆分字符串來獲取字符,然後你可以用'0'來比較字符以獲得數字'0'等。 – furas
編碼實踐。我比Python更喜歡Python,而不是C/C++ ATM。 –