2016-10-29 7 views
1

私はプログラミングにかなり新しいです。そして、Pythonは私の最初の言語です。私は自分自身で学習しているので、何かが足りないかもしれません。申し訳ありませんが、私は問題を正しく言えませんでした。Python - 再帰を使用しているときに、後続の空白文字列を削除するにはどうすればよいですか?

私は、0から99までの任意の数を受け入れ、それを辞書に基づいてマンダリンに変換する関数を書いています。

trans = {'0':'ling', '1':'yi', '2':'er', '3':'san', '4': 'si','5':'wu', '6':'liu', '7':'qi', '8':'ba', '9':'jiu', '10': 'shi'} 

def convert_to_mandarin(us_num, flag = True): 
''' 
us_num, a string representing a US number 0 to 99 
returns the string mandarin representation of us_num 
''' 
    if len(us_num) == 1: 
     if us_num != '0': 
      return trans[us_num] 
     elif flag: 
      return trans[us_num] 
     else: 
      return '\b' 
    elif len(us_num) > 1: 
     if us_num[0] == '1': 
      return trans['10'] +' '+ convert_to_mandarin(us_num[1:], False) 
     else: 
      return trans[us_num[0]] + ' ' + trans['10'] + ' ' + convert_to_mandarin(us_num[1:], False) 
    else: 
     return convert_to_mandarin(us_num[:-1], False) + trans[us_num[-1]] 

数字が0で終わる場合、文字列は末尾にスペースが返されています。たとえばn = convert_to_mandarin('10 ')なら、n =' shi 'を返す しかし、それはn =' shi 'にしたい それでは、どうやって末尾のスペースを取り除くことができますか?

答えて

1

スペースを挿入し、バックスペースを使用して削除しようとしました。しかし、それはファイルやデバッグではうまくいかない。

あなたがバックスペースを返されたものを返し、str.rstripを使用して、その後、末尾のスペースを取り除くために追加の文字列を削除しないでください。

trans = {'0':'ling', '1':'yi', '2':'er', '3':'san', '4': 'si','5':'wu', '6':'liu', '7':'qi', '8':'ba', '9':'jiu', '10': 'shi'} 

def convert_to_mandarin(us_num, flag = True): 
    ''' 
    us_num, a string representing a US number 0 to 99 
    returns the string mandarin representation of us_num 
    ''' 
    if len(us_num) == 1: 
     if us_num != '0': 
      return trans[us_num] 
     elif flag: 
      return trans[us_num] 
     else: 
      return '' 
    elif len(us_num) > 1: 
     if us_num[0] == '1': 
      return (trans['10'] +' '+ convert_to_mandarin(us_num[1:], False)).rstrip() 
     else: 
      return (trans[us_num[0]] + ' ' + trans['10'] + ' ' + convert_to_mandarin(us_num[1:], False)).rstrip() 
    else: 
     return convert_to_mandarin(us_num[:-1], False) + trans[us_num[-1]] 

(時々、補正後は把握しようとするよりも簡単ですどのように再帰を使用して問題を回避するかを指定します。rstripは、置換が行われていない場合は同じ文字列を返しますので、オーバーヘッドが無視されます)

+0

ありがとう。私はrstripについて知らなかった。私は実際にストリップで同じことを試みましたが、私の代わりに「 '」を返していたので動作しませんでした。 –

+0

'strip'も動作しますが、右側にスペースしかないので不要です。あなたは 'strip/rstrip'で取り除かれていない' \ b'を返していました –

+0

ああ。私はバックスペースの前でそれを試しましたが、空の文字列の代わりにスペースを返していたので動作しませんでした。私の間違った推論。 –

関連する問題