我正在尝试编写一个程序,该程序接受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)
答案 0 :(得分:11)
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
答案 1 :(得分:3)
如果您不想使用正则表达式:您可以使用isalnum
检查某些内容是否为数字或字母。您可以使用n
访问字符串中的mystr[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)
答案 2 :(得分:2)
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()
答案 3 :(得分:1)
你可以去找: -
def contact_validate(s):
try:
int(s)
return True
except ValueError:
return False
>>> print contact_validate("+12345")
True
>>> print contact_validate("75.0")
False
>>> print contact_validate("hello")
False
答案 4 :(得分:0)
在我看来,这是一种相当pythonic的方式
def validNumber(phone_number):
return all([x.isdigit() for x in phone_number.split("-")])
它将输入拆分为“ - ”,检查每个剩余项是否为数字并返回单个True或False值。
all() - returns True if bool(x) is True for all x in iterable
答案 5 :(得分:0)
我认为这会有所帮助
ProjectEmployee