我已经制作了一个莫尔斯代码转换器,您可以在其中输入一个字母来打印出相应的代码,反之亦然。但是,该程序仅限于一次接受一个字母。我怎么能让它接受一个字?这是我的代码:
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'时它打印出来:-... --- -.--但是当我试图输入-... --- -.--时,它会一直打印出来“不好”。
任何人都可以告诉我哪里出错了?
答案 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)
这段代码诡异多了:
>>> 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"))
-...----.-- .----..---...--