2017-03-25 6 views
-2

注:組み込み型キャストを使用することはできません。

def str2int(s): 
    result = 0 
    if s[0] == '-': 
     sign = -1 
     i = 1 
     while i < len(s): 
      num = ord(s[i]) - ord('0') 
      result = result * 10 + num 
      i += 1 
     result = sign * result 
     return result 
    else: 
     i = 0 
     while i < len(s): 
      num = ord(s[i]) - ord('0') 
      result = result * 10 + num 
      i += 1 
     return result 

NB:あなたが使用することはできません組み込みのSTR()または文字列テンプレート。これをコードしてください。

def int2str(i): 
    strng = "" 
    if i > 0: 
     while i != 0: 
      num = i % 10 
      strng += chr(48+num) 
      i = i/10 
     return strng[::-1] 
    else: 
     while i != 0: 
      num = abs(i) % 10 
      strng += chr(48+num) 
      i = abs(i)/10 
     return '-' + strng[::-1] 

私は初心者であり、基本的なコードを書く必要があります。私は自分でこれらの機能を書いていますが、これらは奇妙に見えます。コードを改善する手助けはできますか?ありがとうございます組み込み型キャストを使用せずにstrとintを変換する

答えて

0

https://codereview.stackexchange.com/の方が良いかもしれません。
エラーチェックがないことにもかかわらず、1つの明らかなコメントは、共通のコードを取り除くことができるということです。一般的指標ではなく、リストを反復処理するためにPythonでより良いフォームを考えられている

def str2int(s): 
    if s[0] == '-': 
     sign = -1 
     i = 1 
    else: 
     sign = 1 
     i = 0 
    result = 0 
    while i < len(s): 
     num = ord(s[i]) - ord('0') 
     result = result * 10 + num 
     i += 1 
    return sign * result 

def str2int(s): 
    sign = 1 
    if s[0] == '-': 
     sign = -1 
     s = s[1:] 

    result = 0 
    for c in s: 
     num = ord(c) - ord('0') 
     result = result * 10 + num 
    return sign * result 

これらの最後の行だけifに取り込む、elsewhileループを繰り返すのではなく、ユニークなものです標準mapおよびreduce(は、py3の場合、functoolsにあります)に相当します。いくつかは、それに対して主張するだろうけど:

from functools import reduce # Py3 

def str2int(s): 
    sign = 1 
    if s[0] == '-': 
     sign = -1 
     s = s[1:] 

    return sign * reduce(lambda x,y: x*10+y, map(lambda c: ord(c) - ord('0'), s)) 

int2str()のために同じことを行うには同様の機会があります。

関連する問題