該函數假定在兩種情況下輸入都是可以接受的(即)當str執行爲int時,假定str包含實際的int,反之亦然始終可以正常工作如何在不使用任何內置python函數的情況下將str更改爲int並反之亦然?
該函數也不能使用易於使用內置在python函數中,如int()或str()。只能使用基本編碼和def頭文件,例如(for in in in)()和條件句,以及不能。)請參閱幫助。 :)
該函數假定在兩種情況下輸入都是可以接受的(即)當str執行爲int時,假定str包含實際的int,反之亦然始終可以正常工作如何在不使用任何內置python函數的情況下將str更改爲int並反之亦然?
該函數也不能使用易於使用內置在python函數中,如int()或str()。只能使用基本編碼和def頭文件,例如(for in in in)()和條件句,以及不能。)請參閱幫助。 :)
這只是爲int
更換,並沒有處理所有的事情,但它是作業,所以我會讓你休息。如果您使用ord
,它可能會變得更簡單。
def myint(s):
x = 0
for ch in s:
if ch == '0': x = x * 10 + 0
if ch == '1': x = x * 10 + 1
if ch == '2': x = x * 10 + 2
if ch == '3': x = x * 10 + 3
if ch == '4': x = x * 10 + 4
if ch == '5': x = x * 10 + 5
if ch == '6': x = x * 10 + 6
if ch == '7': x = x * 10 + 7
if ch == '8': x = x * 10 + 8
if ch == '9': x = x * 10 + 9
return x
即使上面的醜陋功能比這更醜陋。 – ch3ka 2012-04-18 00:16:17
@ ch3ka,_overove_不是一個非常有用的概念時,答案的順序不斷變化:) – 2012-04-18 00:23:17
if的鏈條的缺點是,你正在做每個數字10比較 – 2012-04-18 00:24:50
def str2int(s):
i = 0
chr2digit = {`j`:j for j in (0,1,2,3,4,5,6,7,8,9)}
for c in s:
i = i*10 + chr2digit[c]
return i
def int2str(i): # rather easy in Python2
return `i`
def int2str(i): # works in Python2 and Python3
return "%s"%i
這裏有一個方法,你可以考慮:
x = "1"
print type(x)
<type 'str'>
import string
if x in string.digits:
# Now you know that x is a number
print x
你可以做同樣的string.ascii_letters了。不是一個完整的答案,但應該指出你在正確的方向。
它可能很醜,但它的工作原理。看到這個函數:
>>> def strint(val):
digits = ''
try:
# Trying to treat it as a string-to-int conversion
result = 0
for l in val:
result = result * 10 + digits.index(l)
except (TypeError,):
# There was a type error - we have int instead of string
result = ''
while val:
digit = val % 10
result = digits[digit] + result
val = val // 10
else:
if not val and not result:
result = '0'
return result
>>> strint('123')
123
>>> strint(123)
'123'
>>> strint('0')
0
>>> strint(0)
'0'
哇。這*是醜陋的。但是..工作,顯然。 – ch3ka 2012-04-18 00:14:56
我不認爲你可以使用'digits.index' – 2012-04-18 00:15:41
@gnibbler:如果'digits.index'確實不被允許,我可能會使用像'[我爲我在xrange(len(數字))如果digits [i] == 1] [0]'。我相信'xrange' /'range'是允許的,因爲如果沒有它,你就不會有像'for'循環這樣的基本解決方案從其他語言中知道。如果'len'也是不允許的,我會用'10'而不是'len(digits)',因爲十進制數字的數量是相當恆定的;) – Tadeck 2012-04-18 00:24:55
這是很好的,你這個標記作爲家庭作業,但你仍需要證明你已經嘗試什麼或問你能不能找出一個具體的問題。 – agf 2012-04-17 23:53:58
'range()'是一個內建函數,所以你不能使用它?還是有一堆例外? – 2012-04-17 23:55:41
@gnibbler:在我看來,'range()'(或至少是'xrange()')是因爲它_does_屬於基本編碼。沒有它,你可能不會有能力做其他語言的基本'for'循環(例如'for(var i = 0; i <10; i ++)')。或者你需要在[0,1,2,3,4]中列出'i'的所有值,而不是'for xrange(5)'中的i'。 – Tadeck 2012-04-18 00:34:47