2

だから、これが私の英語-モールス翻訳者のために持っているものです(これはうまくいきます):

english = {'.-': 'a',     '-...': 'b',   '-.-.': 'c', 
    '-..': 'd',    '.': 'e',      '..-.': 'f',
    '--.': 'g',    '....': 'h',   '..': 'i',
    '.---': 'j',   '-.-': 'k',    '.-..': 'l',
    '--': 'm',     '-.': 'n',     '---': 'o',
    '.--.': 'p',   '--.-': 'q',   '.-.': 'r',
    '...': 's',    '-': 't',      '..-': 'u',
    '...-': 'v',   '.--': 'w',    '-..-': 'x',
    '-.--': 'y',   '--..': 'z',

    '-----': '0',  '.----': '1',  '..---': '2',
    '...--': '3',  '....-': '4',  '.....': '5',
    '-....': '6',  '--...': '7',  '---..': '8',
    '----.': '9', ' ': '          '}

    print ("""


================================================================================
                      English to Morse Code Translator
================================================================================""")
time.sleep(2)
while True:  
    msg = input('''What would you like translated? please use lower-case letters.\n   :''')
    print ("")
    for i in msg:
        print(morse[i])
    userstatus = input('Would you like to go again?(y or n): ').lower().strip(' ')
    if userstatus not in('y', 'yes'):
        print ("Have a nice day!")
        break

これで問題なく動作します。私が問題を抱えているのは、モールス英語の翻訳者です。

morse = {'a': '.-',     'b': '-...',   'c': '-.-.', 
    'd': '-..',    'e': '.',      'f': '..-.',
    'g': '--.',    'h': '....',   'i': '..',
    'j': '.---',   'k': '-.-',    'l': '.-..',
    'm': '--',     'n': '-.',     'o': '---',
    'p': '.--.',   'q': '--.-',   'r': '.-.',
    's': '...',    't': '-',      'u': '..-',
    'v': '...-',   'w': '.--',    'x': '-..-',
    'y': '-.--',   'z': '--..',

    '0': '-----',  '1': '.----',  '2': '..---',
    '3': '...--',  '4': '....-',  '5': '.....',
    '6': '-....',  '7': '--...',  '8': '---..',
    '9': '----.', ' ': '          '}


    print ("""
================================================================================
                      Morse to English Code Translator
================================================================================""")
time.sleep(2)
while True:  



    msg = input('''What would you like translated?
:''')
    print ("")
    for i in msg:
        print(english[i])
    userstatus = input('Would you like to go again?(y or n): ').lower().strip(' ')
    if userstatus not in('y', 'ye', 'yes'):
        print ("Have a nice day!")
        break

ans = input('''英語からモールス語にするには 1 を押してください\nモリスから英語にするには 2 を押してください:''')

これで私が抱えている問題は、「-- --- .-. ... .」などのモールス符号の行を入力すると、次のように出力されることです。

    What would you like translated?
    :-- --- .-. ... .

t
t

t
t
t

e
t
e

e
e
e

e
Would you like to go again?(y or n): 

これを修正して、tまたはeだけでなく、この場合はモールスという単語を出力する方法を知っている人はいますか?

4

2 に答える 2

0

ここで 2 つの問題があります。最初の問題は、英語では文字が 1 文字幅であるため、素朴なfor letter in messageアプローチが機能することです。

ただし、モールスでは、「文字」は任意の数の文字幅です。したがって、モールス文字ポイントの終わりを表す区切り文字の前後で入力メッセージをトークン化する必要があります。この場合、それが' 'キャラクターのように見えます。幸いなことに、Python にはそのためのメソッドがありstr.split(delimiter)ます。そして、デフォルトの区切り文字はたまたまです' '。したがって、次のようにします。

tokens = msg.split()
letters = [english[token] if token else '' for token in tokens]

しかし、別の問題があります。文字を翻訳した後、文字を単語に再結合する必要があります。幸いなことに、Python には の逆split、つまり がありstr.joinます。この場合、次のようにします。

translated = ' '.join(letters)
print(translated)

より凝ったものにしたい場合は、次のように 2 つのステップを実際に 1 つに組み合わせることができます。

translated = ' '.join(english[token] if token else '' for token in msg.split())
于 2016-06-03T00:55:39.957 に答える