2017-01-06 90 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(.-) 
... 
... 
... 
相關問題