Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:正在尝试检查有效的电话号码_Python - Fatal编程技术网

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