2017-01-06 11 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

良い以下のように変換するforループを使用している場合firstletterと上記第二の手紙を定義します主よ、辞書を使ってください!そしてループ! – kindall

+0

実行されたすべてのコードがその変数を作成(ヒント)するかどうかは不明です。 – usr2564301

+4

これは私の目を傷つける。辞書を使う! – dawg

答えて

3

あなたの問題を割り当てているコードです:あなたはコール機能に障害が発生した

word = str(wordinput.upper) 

アッパー。代わりに、関数ディスクリプタをという単語に割り当てました。あなたは文字列にその記述を変換すると、単語の値は、あなたが「B」「を<」を変換しようとしている入力に関わらず、このよう

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

です。最初のものはあなたのリストにカバレッジがないので、あなたのプログラムはクラッシュします。

変更ルーチンを呼び出すためのライン:

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 = ' ' 

に対して改善

は参照辞書を使用します。

文字列を通過し、個々の文字を変換するためのループを追加します。

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

んあなたの指の筋肉を保存していますか?

+1

大文字の文字列はすでに文字列ですか? – Li357

+1

あなたの 'upper'の修正だけで、' NameError:name 'firstletter' is not defined '(OPのリストにないすべての入力に対して)が得られます。そして、その解決策は、その恐ろしい 'if'sの前に' firstletter'を定義することです(まだ)。私は、あなたがより良い解決策を提案したのを見ています - しかし、なぜOPが最初にそのエラーを起こしたのかを指摘する方が良いでしょう。 – usr2564301

+0

問題は発生しません。その行は私の実際の例から直接ペーストされ、それが唯一の変更です。アルファ専用入力を入力しましたか?もしそうでなければ、あなたはまだ*エラーを受け取ります。 – Prune

0
私は同意

、 私はあなたのための2つのヒント 最初の持っている: 文 または 二

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

for letter in range(0,len(word)+1): 
    if word[letter] == A: 
     convertedword.append(.-) 
... 
... 
... 
関連する問題