2013-10-30 107 views
3

有人可以帮我弄清楚如何将字符串转换为数字吗?比方说,用户输入“1-800 - 鲜花”我想蟒蛇显示“1-800-3569377”Python转换字母数字

所有我至今是:

userInput = input("Please enter a phone number (e.g. 1-800-Flowers): ") 
phoneNum = userInput.replace('-','') 

这真的是我的一切。任何帮助,将不胜感激

回答

3

使用str.translate

>>> pad = ['qz', 'abc', 'def', 'ghi', 'jkl', 'mno', 'prs', 'tuv', 'wxy'] 
>>> letter_to_numbers = { 
...  ord(ch): ord(str(i)) 
...  for i, chs in enumerate(pad, 1) 
...  for ch in chs 
... } # Map ord('f') to ord('3'), ... 
>>> "1-800-Flowers".lower().translate(letter_to_numbers) 
'1-800-3569377' 
+0

哇,感谢一吨! –

+1

@WhooCares,[接受答案](http://meta.stackexchange.com/a/5235)如果这解决了你的问题。 – falsetru

1

有一个for循环,通过用户,然后为每个字母或数字输入的字符串循环,使用ord把它转换成字符的ASCII值()函数。

other=[] 
userInput = input("Please enter a phone number (e.g. 1-800-Flowers): ") 
for i in userInput: 
other+=[ord(i)] 

print(other) 

什么你说没有意义,我虽然为"1-800-Flowers"如果你把它转换成ASCII并不等同于"1-800-3569377",你甚至可以在ASCII converter site检查自己。如果我说的不对,请纠正我。

0

这是我如何与一个更直接的做翻译:

letters  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
letter_digits = "22233344455566677778889999" 
letter_to_digit = string.maketrans(letters+letters.lower(),letter_digits+letter_digits) 

# convert letters to digits 
new_phone = raw_phone.translate(letter_to_digit)