Python:正在尝试检查有效的电话号码
我正在尝试编写一个程序,该程序接受格式为Python:正在尝试检查有效的电话号码,python,Python,我正在尝试编写一个程序,该程序接受格式为XXX-XXX-XXXX的电话号码,并将条目中的任何字母转换为相应的号码 现在我有了这个,它将允许您重新输入正确的数字,如果它不正确的开始,但它会转换原始输入的数字。我该如何解决这个问题 def main(): phone_number= input('Please enter a phone number in the format XXX-XXX-XXXX: ') validNumber(phone_number) transl
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)
如果不想使用正则表达式:可以使用
isalnum
检查某个内容是数字还是字母。您可以使用mystr[n]
访问字符串中的n
th个字符,因此您可以尝试:
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
要查看电话号码[i]正在做什么,请尝试以下操作:
for i in range(len(phone_number)):
print i, phone_number[i]
使用枚举
:
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
中)使用它,如:
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()
在我看来,这是一种相当类似于蟒蛇的方式
def validNumber(phone_number):
return all([x.isdigit() for x in phone_number.split("-")])
它在“-”处拆分输入,检查每个剩余项是否为数字,并返回单个True或False值
all()-如果bool(x)对iterable中的所有x都为真,则返回真值
您可以选择:-
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
我认为这会有帮助
def checkvalidNumber(phone_number):
T={"-":0,"+":0,"_":0}
for i in str(phone_number):
if i in list(T.keys()):
if (i=="_" or i=="-") and (T["-"]>=1 or T['_']>=1):
return False
elif i=="+" and T[i]>=1:
return False
else:
T[i]+=1
elif not i.isdigit():
return False
return True
谢谢你能详细说明一下访问第n个字符吗?我以前从未这样做过对不起,我的代码中有一个输入错误:
enumerate
返回phone\u number
的所有值,但也返回它们的位置号I
我只是在enumerate之后添加了一个长度检查,但我遇到的问题是,即使我输入了一个新的有效电话号码,它仍然会翻译原来不正确的电话号码validNumber
只需获取一个电话号码并返回True
或False
。不要期望它执行与translateNumber
函数相关的任何操作。请参阅我的编辑。因为有些人将-
放在他们的号码中,如00-000-0000
这是错误的,所以对电话号码有限制,例如长度,并且不能是负数
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
def checkvalidNumber(phone_number):
T={"-":0,"+":0,"_":0}
for i in str(phone_number):
if i in list(T.keys()):
if (i=="_" or i=="-") and (T["-"]>=1 or T['_']>=1):
return False
elif i=="+" and T[i]>=1:
return False
else:
T[i]+=1
elif not i.isdigit():
return False
return True