将单词拆分为字母,使字母成为字典中的键。 [蟒蛇]

时间:2016-11-07 11:45:51

标签: python string dictionary

我已经制作了一个莫尔斯代码转换器,您可以在其中输入一个字母来打印出相应的代码,反之亦然。但是,该程序仅限于一次接受一个字母。我怎么能让它接受一个字?这是我的代码:

MorseCode = {'.-':'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',
            '.----':1,
            '..---':2,
            '...--':3,
            '....-':4,
            '.....':5,
            '-....':6,
            '--...':7,
            '---..':8,
            '----.':9,
            '-----':0
}

letters_to_morse = {letter: code for code, letter in MorseCode.items()}

print "Type 'help' for the morse code."
print "Type 'end' to exit the program.\n"
while True:
    code = raw_input("Enter code:")
    if code in MorseCode:
        print MorseCode[code]
    elif code in letters_to_morse:
        print letters_to_morse[code]

问题是:有没有办法放入一个单词并将该单词分成每个字母,这样每个字母都会成为字典打印出来的关键字? 示例:单词'boy'将分为'b','o','y',然后程序将打印出来:-... --- -.--

到目前为止我尝试了什么:

MorseCode = {'.-':'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',
            '.----':1,
            '..---':2,
            '...--':3,
            '....-':4,
            '.....':5,
            '-....':6,
            '--...':7,
            '---..':8,
            '----.':9,
            '-----':0
}

Inverse_Dictionary = {v:k for k,v in Dictionary.iteritems()}

while True:
    x = raw_input("Enter:")
    for letter in list(x):
        if letter in Dictionary:
            print (Dictionary[letter])
        elif letter in Inverse_Dictionary:
            print(Inverse_Dictionary[letter])
        else:
            print("Not good")

有效。当我输入'BOY'时它打印出来:-... --- -.--但是当我试图输入-... --- -.--时,它会一直打印出来“不好”。

任何人都可以告诉我哪里出错了?

4 个答案:

答案 0 :(得分:0)

更改

Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {   Toast.makeText(MainActivity.this,"RunAPP",Toast.LENGTH_LONG).show();
        }
    });

for letter in list(x):

您还有for letter in x.split(): ,但Inverse_Dictionary = {v:k for k,v in Dictionary.iteritems()}未定义,应为Dictionary

答案 1 :(得分:0)

list(x)返回一个字符类型的列表。所以

list(' -... --- -.--,')

将返回

[' ', '-', '.', '.', '.', ' ', '-', '-', '-', ' ', '-', '.', '-', '-', ',']

您需要一种方法来使您的输入多样化。例如,在每个字母/摩尔斯电码之间留一个空格,然后执行:

while True:
    x = raw_input("Enter:")
    for letter in x.split(' '):
        if letter in Dictionary:
            print (Dictionary[letter])
        elif letter in Inverse_Dictionary:
            print(Inverse_Dictionary[letter])
        else:
            print("Not good")

答案 2 :(得分:0)

我会尝试类似的事情:

letters_to_morse = {letter: code for code, letter in MorseCode.items()}

string_to_convert = raw_input('Enter message you want to translate to morse...')

trans = ''
for char in string_to_convert:
    if char.isdigit():
        trans = trans + letters_to_morse[int(char)]
    elif char == ' ':
        trans = trans + ' '
    else:
        trans = trans + letters_to_morse[str.upper(char)]


print trans

答案 3 :(得分:0)

这段代码诡异多了:

morse.py

>>> def translate(word):
...    inverse_morse = dict({str(v): k for k, v in MorseCode.items()},**{" ":" "})
...    return "".join([inverse_morse[letter.upper()] for letter in word])
>>> print(translate("boy 123"))
-...----.-- .----..---...--