1

文字を電話番号シーケンスに変換するコードを完成させようとしています。私が必要とするのは、たとえば JeromeB を 537-6632 にすることです。また、最後の可能な桁の後に文字の翻訳を切り取るプログラムが必要です。たとえば、1-800-JeromeB の後に 1-800-JeromeBrigham と書いても、それはコーディングされません。問題は、それを自分のコードに組み込む方法がわかりません。最後の文字を切り取り、ダッシュを入れる意味がわかりません。私が現在持っているのはこれです

alph = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',\
        'q','r','s','t','u','v','w','x','y','z']
num =[2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9]


phone = raw_input('enter phone number ').lower()

s = ""
for index in range(len(phone)):
    if phone[index].isalpha():
        s = s + str(num[alph.index(phone[index])])
    else:
        s = s + phone[index]
print s  
4

5 に答える 5

1
# define a dictionary
alph_num_dict = {'a': '2', 'b': '2', 'c': '2',\
                 'd': '3', 'e': '3', 'f': '3',\
                 'g': '4', 'h': '4', 'i': '4',\
                 'j': '5', 'k': '5', 'l': '5',\
                 'm': '6', 'n': '6', 'o': '6',\
                 'p': '7', 'q': '7', 'r': '7', 's': '7',\
                 'u': '8', 'w': '9', 'v': '8',\
                 'w': '9', 'x': '9', 'y': '9', 'z': '9'}

更新: 7文字目以降の文字を切り取り、4文字目にダッシュを挿入

# define a generator for converting string and cutting off it
def alph_to_num(phone):
    for index in range(len(phone)):
        if index >= 7:
            return

        if index == 4:
            yield '-'

        p = phone[index]

        if p in alph_num_dict:
            yield alph_num_dict[p]
        else:
            yield p

updated : 終了する場合は「end」と入力してください

# get input and join all converted char from generator
while True:
    phone = raw_input('enter phone number in the format xxxxxxx, or enter "end" for termination ').lower()

    if phone == 'end':
        break

    print ''.join(list(alph_to_num(phone)))

入力: ジェローム・ブリガム

出力: 5376-632

于 2014-10-23T07:48:48.583 に答える
0

アルファをキーとして、対応する数字を値として持つ辞書を使用してみてください。次に、最初の 10 個のインデックスを繰り返します。

phone = {'A' : 2, 'B' : 2, 'C' : 2, 'D' : 3, ....}

number = input("Enter a phone number")
counter = 1
for index in number:
  if counter < 10:
    print phone[number]
  counter += 1

入力の部分文字列を取得することもできます

number[:10]
于 2014-10-23T07:17:59.107 に答える
0

固定長を使用するだけです。これはPythonicではありません。以下はよりエレガントな書き直しです

# please complete this map
phone_map = {'a':'2','b':'2','c':'2','d':'3','e':'3','f':'3'} 
"".join([ phone_map[digit] if digit.isalpha() else digit for digit in "abc123abc"])
于 2014-10-23T07:23:38.717 に答える