2016-11-13 15 views
1

私のコードはPython 2.xバージョンで正常に動作していますが、Python 3.xバージョンで実行しようとするとエラーになります。TypeError:translate()はちょうど1つの引数をとります(2が指定されています)

件名:smsエンコードでメッセージを省略する必要があります。

コード:

def sms_encoding(data): 
    #start writing your code here 
    print(data) 
    data.split(" ") 
    data_list=data.split(" ") 
    sms_encd=[] 
    final_sms="" 
    for i in range(len(data_list)): 
     if data_list[i].lower() in ['a','e','i','o','u']: 
      sms_encd.append(data_list[i]) 
     elif len(data_list[i])>1: 
      a = data_list[i].translate(None,'aeiouAEIOU') 
      sms_encd.append(a) 
    for j in range(len(sms_encd)): 
     final_sms += str(sms_encd[j])+" " 
    return final_sms[:-1] 
data="I will not repeat mistakes" 
print(sms_encoding(data)) 

出力:

2.xのバージョン:

I will not repeat mistakes 
I wll nt rpt mstks 

3.xバージョン:なぜtranslate()動作しない

I will not repeat mistakes 
Traceback (most recent call last): 
    File "python", line 18, in <module> 
    File "python", line 12, in sms_encoding 
TypeError: translate() takes exactly one argument (2 given) 

?代わりの回避策はありますか?

+0

謝罪の人々、私は既存の質問を見つけることができませんでした。それを指摘してくれてありがとう。 –

答えて

4

Python 3のstr.translate()とPython 2のunicode.translate()を比較する必要があります。どちらものコードポイント(整数)から置換(別の整数または1文字のUnicode e文字列)に変換されます。

strタイプは、このようなマップを生成するために、第3引数として削除する文字(Python 2のstr.translate()の第2引数)を取り除く静的メソッドstr.maketrans()を持っています。

map = str.maketrans('', '', 'aeiouAEIOU') 
a = data_list[i].translate(map) 

これはNoneに対応付ける辞書母音コードポイントのそれぞれを出力します:ここにいることを使用し

>>> str.maketrans('', '', 'aeiouAEIOU') 
{97: None, 101: None, 105: None, 111: None, 117: None, 65: None, 69: None, 73: None, 79: None, 85: None} 
+0

ありがとう、@Martijn Pieters。 –

関連する問題