2017-01-06 89 views
-4

我一直在试图制作一个python摩斯密码翻译器,并将其复杂化,我想继续沿用我为摩尔斯电码翻译器开发的路径,但是我遇到了一个问题。为什么这个变量在Python中没有定义?

Traceback (most recent call last): 
    File "python", line 114, in <module> 
NameError: name 'firstletter' is not defined 

我找不出为什么这个变量没有被定义。下面的代码

wordinput = input("What do you want to convert") 
word = str(wordinput.upper) 

if word[0] == 'A': 
    firstletter = ".-" 
elif word[0] == "B": 
    firstletter = "-..." 
elif word[0] == 'C': 
    firstletter = '-.-.' 
elif word[0] == 'D': 
    firstletter = '-..' 
elif word[0] == 'E': 
    firstletter = '.' 
elif word[0] == 'F': 
    firstletter = '..-.' 
elif word[0] == 'G': 
    firstletter = '--.' 
elif word[0] == "H": 
    firstletter = '....' 
elif word[0] == "I": 
    firstletter = '..' 
elif word[0] == 'J': 
    firstletter = ".." 
elif word[0] == 'K': 
    firstletter = '-.-' 
elif word[0] == 'L': 
    firstletter = '.-..' 
elif word[0] == 'M': 
    firstletter = '--' 
elif word[0] == 'N': 
    firstletter = '-.' 
elif word[0] == 'O': 
    firstletter = '---' 
elif word[0] == 'P': 
    firstletter = '.--.' 
elif word[0] == 'Q': 
    firstletter = '--.-' 
elif word[0] == 'R': 
    firstletter = '.-.' 
elif word[0] == 'S': 
    firstletter = '...' 
elif word[0] == 'T': 
    firstletter = '-' 
elif word[0] == 'U': 
    firstletter = '..-' 
elif word[0] == 'V': 
    firstletter = '...-' 
elif word[0] == 'W': 
    firstletter = '.--' 
elif word[0] == 'X': 
    firstletter = '-..-' 
elif word[0] == 'Y': 
    firstletter = '-.--' 
elif word[0] == 'Z': 
    firstletter = '--..' 

if word[1] == 'A': 
    secondletter = ".-" 
elif word[1] == "B": 
    secondletter = "-..." 
elif word[1] == 'C': 
    secondletter = '-.-.' 
elif word[1] == 'D': 
    secondletter = '-..' 
elif word[1] == 'E': 
    secondletter = '.' 
elif word[1] == 'F': 
    secondletter = '..-.' 
elif word[1] == 'G': 
    secondletter = '--.' 
elif word[1] == "H": 
    secondletter = '....' 
elif word[1] == "I": 
    secondletter = '..' 
elif word[1] == 'J': 
    secondletter = ".." 
elif word[1] == 'K': 
    secondletter = '-.-' 
elif word[1] == 'L': 
    secondletter = '.-..' 
elif word[1] == 'M': 
    secondletter = '--' 
elif word[1] == 'N': 
    secondletter = '-.' 
elif word[1] == 'O': 
    secondletter = '---' 
elif word[1] == 'P': 
    secondletter = '.--.' 
elif word[1] == 'Q': 
    secondletter = '--.-' 
elif word[1] == 'R': 
    secondletter = '.-.' 
elif word[1] == 'S': 
    secondletter = '...' 
elif word[1] == 'T': 
    secondletter = '-' 
elif word[1] == 'U': 
    secondletter = '..-' 
elif word[1] == 'V': 
    secondletter = '...-' 
elif word[1] == 'W': 
    secondletter = '.--' 
elif word[1] == 'X': 
    secondletter = '-..-' 
elif word[1] == 'Y': 
    secondletter = '-.--' 
elif word[1] == 'Z': 
    secondletter = '--..' 





print(firstletter + secondletter) 
import os 
os.system("pause") 
+8

好主啊,用字典!和一个循环! – kindall

+0

不确定所有执行的代码都会*创建*(提示)该变量。 – usr2564301

+4

这伤害了我的眼睛。使用字典! – dawg

回答

3

你的问题是与分配:

word = str(wordinput.upper) 

您未能通话功能;相反,您将功能描述符分配给。当转换描述符的字符串,字值

"<built-in method upper of str object at 0x7f377ea143e8>" 

因此,无论输入的,你想转换“<”和“b”;第一个没有覆盖你的列表,所以你的程序崩溃。

更改行来调用例程:

word = str(wordinput.upper()) 

下一步工作

The problem will still occur if the user enters any input other than pure letters. Add a line before your long **if** to give a default value, whatever you'd like to see printed if the input isn't a letter. I use a space here: 

firstletter = ' ' 

的改进

使用参考词典:

code = { 'A': ".-", 'B': "-...", etc. 
     } 

的添加了一个循环来通过串并转换单个字母:

for c in word: 
    if c in code: 
     morse_char = code[c] 
    else: 
     morse_char = ' ' 
    print(morse_char) 

这是否保存您的手指肌肉?

+1

大写字母已经是一个字符串了,不是吗? – Li357

+1

只用'upper'修复,我仍然得到'NameError:name'首字母未定义'(对于不在OP列表中的所有输入)。解决方案是(仍然)在可怕的“if”之前定义“firstletter”。我看到你提出了一个更好的解决方案 - 但最好指出为什么OP首先得到这个错误。 – usr2564301

+0

我不明白这个问题;该行直接从我的工作示例中粘贴,这是唯一的变化。你输入了纯alpha输入吗?如果没有,那么你*仍然会得到我在文中所述的错误。 – Prune

0

我同意, 我有两个小技巧为你 第一: 定义firstletter和第二个字母上面的if语句 或 第二

使用for循环转换像下面

wordinput = input("") 
word = str(wordinput.upper) 

for letter in range(0,len(word)+1): 
    if word[letter] == A: 
     convertedword.append(.-) 
... 
... 
... 
相关问题