2013-03-06 84 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