3

だから私はPythonに不慣れで、XXX-XXX-XXXXの形式の電話番号を受け入れ、文字を対応する番号に変更するプログラムを書いています。エントリをチェックして、正しい形式であることを確認する必要があります。そうでない場合は、再入力できるようにします。新しい番号の入力を求めるメッセージを表示するのに苦労しています。それが時々機能する場合でも、元の間違った電話番号が変換されます。

これはこれまでの私のコードです:

def main():
    phone_number= input('Please enter a phone number in the format XXX-XXX-XXXX: ')
    validNumber(phone_number)
    translateNumber(phone_number)

def validNumber(phone_number):
    for i,c in enumerate(phone_number):
        if i in [3,7]:
            if c != '-':
                phone_number=input('Please enter a valid phone number: ')
            return False
        elif not c.isalnum():
            phone_number=input('Please enter a valid phone number: ')
        return False
    return True

def translateNumber(phone_number):
    s=""
    for char in phone_number:
        if char is '1':
            x1='1'
            s= s + x1
       elif char is '-':
            x2='-'
            s= s + x2
       elif char in 'ABCabc':
           x3='2'
           s= s + x3

.....etcこの部分は重要ではありません

4

2 に答える 2

3

whileループを使用して、ユーザーに有効な数値を入力させることをお勧めします。何かのようなもの:

def main():
    phone_number = ""
    while not validNumber(phone_number):
        phone_number = input('Please enter a phone number in the format XXX-XXX-XXXX: ')
    translateNumber(phone_number)

( Python 2.7を使用inputしている場合は、に置き換える必要がある場合があります)raw_input

于 2013-03-06T23:37:10.623 に答える
1

これが完全で実用的なソリューションです。

import re
from string import maketrans

phone_match = re.compile("^(\w{3}-\w{3}-\w{4})$")


def validPhone(number):
    match = phone_match.match(number)
    if match:
        return match.groups(0)[0]
    return None

phone_number = ''
while not validPhone(phone_number):
    phone_number = raw_input("Give me your digits!: ")

phone_in = "abcdefghijklmnopqrstuvwxyz"
phone_out = "22233344455566677778889999"
transtab = maketrans(phone_in, phone_out)

print phone_number.lower().translate(transtab)

例:

Give me your digits!: 949-POO-PTOO
949-766-7866

Give me your digits!: 555-HOT-KARL
555-468-5275
于 2013-03-06T23:37:23.200 に答える