获取输入时为NameError

时间:2013-10-04 17:55:45

标签: python

  

字母电话号码翻译

     

很多公司都使用像555-GET-FOOD这样的电话号码   让客户更容易记住。在标准电话上,   字母字母按以下方式映射到数字:

A, B, and C  2
D, E, and F  3
G, H, and I  4
J, K, and L  5
M, N, and O  6
P, Q, R, and S  7
T, U, and V  8
W, X, Y, and Z  9
     

编写一个程序,要求用户输入一个10个字符的电话   数字格式为XXX-XXX-XXXX。应用程序应显示   带有任何字母字符的电话号码   原始翻译成他们的数字等价物。例如,如果   用户输入555-GET-FOOD,应用程序应显示555-438-3663。

这是我的工作:

phoneNum = input('Enter the number in the format of 555-XXX-XXXX\n')

phoneNum = phoneNum.split('-')

for var in phoneNum[1:2]:
    for char in var:
        if char == 'A' or char == 'B' or char == 'C':
            char = '2'
        elif char == 'D' or char == 'E' or char == 'F':
            char = '3'
        elif char == 'G' or char == 'H' or char == 'I':
            char = '4'
        elif char == 'J' or char == 'K' or char == 'L':
            char = '5'
        elif char == 'M' or char == 'N' or char == 'O':
            char = '6'
        elif char == 'P' or char == 'Q' or char == 'R' or char == 'S':
            char = '7'
        elif char == 'T' or char == 'U' or char == 'V':
            char = '8'
        elif char == 'W' or char == 'X' or char == 'Y' or char == 'Z':
            char = '9'

print(phoneNum)

运行它,系统会提示您输入一个字符串,例如555-GET-FOOD。然后您将收到一条错误消息:

  

NameError:名称'GET'未定义

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

你说你正在使用Python 3,但你确定吗?如果您使用的是Python 2,则必须使用raw_input而不是input。在Python 2中,input尝试eval生成的字符串,因此它尝试执行555减去名为GET的变量减去名为FOOD的变量。

答案 1 :(得分:0)

在您的代码中,char只是变量phoneNum中字符的副本。更改char后,您不会更改phoneNum。解决此问题的一种方法是创建一个新变量newPhoneNumber

phoneNum = input('Enter the number in the format of 555-XXX-XXXX\n')
print(phoneNum)
newPhoneNumber = ''
for char in phoneNum:
    if char == 'A' or char == 'B' or char == 'C':
        char = '2'
    elif char == 'D' or char == 'E' or char == 'F':
        char = '3'
    elif char == 'G' or char == 'H' or char == 'I':
        char = '4'
    elif char == 'J' or char == 'K' or char == 'L':
        char = '5'
    elif char == 'M' or char == 'N' or char == 'O':
        char = '6'
    elif char == 'P' or char == 'Q' or char == 'R' or char == 'S':
        char = '7'
    elif char == 'T' or char == 'U' or char == 'V':
        char = '8'
    elif char == 'W' or char == 'X' or char == 'Y' or char == 'Z':
        char = '9'
    newPhoneNumber = newPhoneNumber + char

print(newPhoneNumber)

讨论

  • 我认为这是一个家庭作业问题,因此我避免使用列表理解或设置等高级构造。
  • 关于命名约定的一个词。大多数Python脚本使用小写和下划线,例如phone_number - 这不是必需的,但许多人遵循此约定。
  • 此外,作为个人喜好,我拼写单词而不是缩写。因此,我更喜欢phoneNumber而不是phoneNumphone_number而不是phone_num。当然,总有例外。