2013-03-06 100 views
3

所以我是新来的python,我正在写一个程序,接受XXX-XXX-XXXX格式的电话号码,并将任何字母更改为相应的号码。我需要检查条目并确保它的格式正确,如果没有,请允许它重新输入。我很难让它提示我输入一个新的号码,即使有时它有效,它仍然会翻译原始的,错误的电话号码。Python。搞清楚如何输入正确的电话号码

这是我到目前为止的代码:

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 

.....等这部分不是很重要

+0

首先,你绝对不希望'elif's的那么长,罗嗦链。更好的做法是创建一个将字符映射到它们的等价字典(如{“A”:“1”,“B”:“1”...}) – 2013-03-06 23:27:35

+0

您的缩进似乎存在问题。 – placeybordeaux 2013-03-06 23:28:16

+0

'str.translate'将在这里帮助 – wim 2013-03-06 23:30:52

回答

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,与raw_input更换input

+0

'raw_input'已被Python3 +中普通的'input'取代。 – sberry 2013-03-06 23:37:56

+0

@sberry这是真的。修好了,谢谢你提醒我:) – HodofHod 2013-03-06 23:38:26

+0

太好了,非常感谢你! – tinydancer9454 2013-03-06 23:40:13

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 
+0

问题允许将字符作为手机#的一部分。 – Dave 2013-03-06 23:41:40

+0

好的。固定。 – sberry 2013-03-06 23:58:41