この関数は、どちらの場合も入力が受け入れ可能であると想定します(つまり、str to intを実行する場合、strには実際のintが含まれていると想定し、その逆も常に機能します。
また、この関数は、int()やstr()などの使いやすい組み込みのPython関数を使用してはなりません。基本的なコーディングと、(rang()のiの場合や条件文などの)defヘッダーと一緒にのみ使用できます。Plsヘルプ。:)
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
醜いかもしれませんが、うまくいきます。この関数を参照してください。
>>> def strint(val):
digits = '0123456789'
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'
これは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
検討できるアプローチの 1 つを次に示します。
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でも同じことができます。完全な答えではありませんが、正しい方向に向ける必要があります。