Python. 如何输入正确的电话号码
我刚开始学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
.....等等,这部分不重要
2 个回答
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
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
。)