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 phone_number
elif not c.isalnum():
phone_number=input('Please enter a valid phone number: ')
return phone_number
return phone_number
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
elif char in 'DEFdef':
x4='3'
s= s + x4
elif char in 'GHIghi':
x5='4'
s= s + x5
elif char in 'JKLjkl':
x6='5'
s= s + x6
elif char in 'MNOmno':
x7='6'
s= s + x7
elif char in 'PQRSpqrs':
x8='7'
s= s + x8
elif char in 'TUVtuv':
x9='8'
s= s + x9
elif char in 'WXYZwxyz':
x10='9'
s= s + x10
print(s)
6 个回答
3
- 你应该使用正则表达式来匹配文本。
- 字符串模块里有一个
translate
函数,可以替代你大部分的逻辑。
下面是代码示例。注意我把所有内容都转换成小写,这样可以简化正则表达式和替换的过程。
import string
import re
RE_phone = re.compile("^[a-z0-9]{3}-[a-z0-9]{3}-[a-z0-9]{4}$")
map_in = 'abcdefghijklmnprstuvwxyz'
map_out = '222333444555667778889999'
mapped = string.maketrans( map_in , map_out )
def main():
while True:
phone_number= raw_input('Please enter a phone number in the format XXX-XXX-XXXX: ')
phone_number = phone_number.lower()
if RE_phone.match(phone_number):
break
print "Error. Please try again"
print translateNumber(phone_number)
def translateNumber(phone_number):
return phone_number.translate( mapped )
main()
12
import re
def validNumber(phone_nuber):
pattern = re.compile("^[\dA-Z]{3}-[\dA-Z]{3}-[\dA-Z]{4}$", re.IGNORECASE)
return pattern.match(phone_nuber) is not None
好的,下面是你提供的内容的通俗易懂的中文解释:
这段代码主要是用来处理一些特定的任务。它可能涉及到数据的获取、处理和展示。具体来说,代码块中的每一部分都有它自己的功能,比如说读取文件、计算数据、或者是输出结果。
如果你是编程小白,可以把这段代码想象成一个食谱。每一步都是为了完成一道菜,而最终的结果就是你想要的美味。代码的每一行就像是食谱中的每一步,缺一不可。
总之,这段代码的目的是为了让计算机完成一些自动化的工作,减少我们手动操作的麻烦。
希望这个解释能帮助你更好地理解代码的作用!
4
如果你不想使用正则表达式的话,可以用 isalnum
来检查某个东西是不是数字或者字母。你可以通过 mystr[n]
来访问字符串中的第 n
个字符,所以你可以试试这样:
def validNumber(phone_number):
if len(phone_number) != 12:
return False
for i in range(12):
if i in [3,7]:
if phone_number[i] != '-':
return False
elif not phone_number[i].isalnum():
return False
return True
想看看 phone_number[i]
在干什么,可以试试这个:
for i in range(len(phone_number)):
print i, phone_number[i]
使用 enumerate
:
def validNumber(phone_number):
for i,c in enumerate(phone_number):
if i in [3,7]:
if c != '-':
return False
elif not c.isalnum():
return False
return True
一旦你搞定了这个,之后在 main
里面可以这样使用:
def main():
phone_number = '' # an invalid number to initiate while loop
while not validNumber(phone_number):
phone_number = input('Please enter a phone number in the format XXX-XXX-XXXX: ')
translated_number = translateNumber(phone_number)