0

コードが長すぎてここを通過できなかったので、PasteBinにあります:http://pastebin.com/UDPFYsLJ

私がやりたいのは、「555-GET-FOOD」のようなものを入れて「555-438-3663」を取得できるようにすることです。

文字を数字に変更するコードがあります...まったく異なる行にあります。ここに小さな抜粋があります:

Number:  555-GET-FOO3
Number:  555-4ET-FOOD
Number:  555-GET-3OOD

文字を正しく変更し、数字をそのままにしますが、すべて別の行にあります。forループで実行していることはわかっていますが、前のループに加えた変更を現在のループのままにしておきたいです。

たとえば、最初のループが555-GET-FOO3を返す場合、次のループがそれを取得して555-4ET-FOO3を返すようにします。

どうすればいいのかわかりません。

どんなヒントも素晴らしいでしょう。私もこのスレッドを見てきました:文字列内の文字のリストを削除する

ただし、私はtranslate関数をあまり使用しておらず(または、何もしていません)、PythonDocsの外部で適切なウォークスルーを見つけるのに苦労しています。

これは学校向けで、Python 3は使用できません。Python2.7を使用する必要があるため、maketranslateは機能しないと思います。

4

3 に答える 3

4

あなたがしなければならないのはこれを変えることだけです

for i, j in dict.iteritems():
    newNumber = phoneNum.replace(i, j)
    print "Number: ",newNumber

これに:

for i, j in dict.iteritems():
    phoneNum = phoneNum.replace(i, j)
    print "Number: ",newNumber

説明

このメソッドでは、元の電話番号の一部の文字を置き換え、その結果を。という新しい変数に割り当てますnewNumber。しかし、その後、あなたは何もしないnewNumberので、それは捨てられます。

代わりに、入力(phoneNum)を翻訳の結果で上書きすると、新しく上書きされた値で新しい翻訳が行われるため、phoneNumすべての変更が累積されます。

于 2012-11-23T20:49:44.000 に答える
1

文字から数字へのマッピングがあると仮定すると、これを試すことができます:

In [1]: s = '555-GET-FOOD'

In [2]: num_map = {'D': 3, 'F': 3, 'O': 6}

In [3]: reduce(lambda x, y: x.replace(y, str(num_map[y])), num_map, s)
Out[3]: '555-GET-3663'

これは、文字から数字へのマッピング(num_map)を取得し、を使用reduceしてマッピングの各キー(文字)を反復処理し、文字を対応する数字に置き換えることで機能します。

ただし、これは学校向けであるため、このアプローチはおそらく少しあいまいです(悪い意味で:))。@inspectorG4dgetの答えは私が使用するものです。

于 2012-11-23T20:54:01.857 に答える
0

別の方法を試してください。文字を置き換えるのではなく、入力文字列から、翻訳された文字を使用して新しい文字列を作成します。次のように、文字列の文字を繰り返すことができます。

for ch in a_string:
    print ch

それができたら、文字から数字へのマッピングを作成するだけで、文字を検索して対応する数字を見つけることができます。マッピングで一致する場合はそれを使用し、一致しない場合は元の文字を使用します。

# Map of letters to digits: you'd pad this out.
letter_map = {'G': 4, 'E': 3, 'T': 7, 'D': 3}
def remap_phone_number(original):
    result = []
    for ch in original:
        result.append(letter_map[ch] if ch in letter_map else ch)
    return ''.join(result)
于 2012-11-23T20:59:14.977 に答える