Python字母电话号码转纯数字代码输出异常问题求助
问题排查结论
你的条件判断写法存在语法逻辑错误,这是导致字母映射不全的根本原因:
Python中"A" or "B" or "C"这类表达式不会实现「匹配三个值中任意一个」的效果,or属于短路逻辑运算符,会返回运算中第一个为真的值,非空字符串永远为真,所以这个表达式的计算结果永远是每组的第一个字符:
"A" or "B" or "C"结果永远是"A""D" or "E" or "F"结果永远是"D""G" or "H" or "I"结果永远是"G"- 其余分组同理,仅每组第一个字母能进入对应数字映射分支,同组其他字母全部匹配失败,直接走else分支保留原始字符,和你遇到的异常现象完全吻合:
- 输入
1800FLOWERS时,仅W是WXYZ分组的首字符,被转为9,其余F/L/O/E/R/S都不是对应分组首字符,原样保留,输出1800FLO9ERS - 输入
1800GOTJUNK时,G(GHI首字符)转4、T(TUV首字符)转8、J(JKL首字符)转5,其余字母原样保留,输出18004O85UNK - 输入
1800BIGFISH时,仅G(GHI首字符)转4,其余字母原样保留,输出1800BI4FISH
- 输入
修复方法
把所有等值判断改为成员判断,用in关键字判断字符是否属于对应字母元组即可,修复后完整代码如下:
phonenumber = input("Please input the number you would like to translate, starting with 1800 now, no hyphens:") def FindNumber(phonenumber): number = "" for char in phonenumber: if char in ("A", "B", "C"): number = number + "2" elif char in ("D", "E", "F"): number = number + "3" elif char in ("G", "H", "I"): number = number + "4" elif char in ("J", "K", "L"): number = number + "5" elif char in ("M", "N", "O"): number = number + "6" elif char in ("P", "Q", "R", "S"): number = number + "7" elif char in ("T", "U", "V"): number = number + "8" elif char in ("W", "X", "Y", "Z"): number = number + "9" else: number = number + char return number print("The number you want to call is", FindNumber(phonenumber))
测试验证:
- 输入
1800FLOWERS输出18003569377 - 输入
1800GOTJUNK输出18004685865 - 输入
1800BIGFISH输出18002443474
转换结果完全符合预期。
内容的提问来源于stack exchange,提问作者Codapt
相关产品推荐
相关产品推荐

