我必须创建一个向用户询问输入文件的程序,然后创建一个包含以摩尔斯电码编码的消息的输出文件。当我运行程序时,“翻译的+ =字母[单词]”行中有类型错误,它说这是不可散列的类型:“列表”。打开输入后,如何将输入文件中的文本转换为莫尔斯电码?
函数后的代码是否有问题?
inputFileName = input("Enter the input file name:")
outputFileName = input("Enter the output file name:")
def morseCode(inputFileName):
inputFileName = inputFileName.upper()
translated = ""
# Open the input and output files
with open(inputFileName) as inputFile, open (outputFileName, "w") as outputFile:
for line in inputFile:
words = line.split()
# Translate letters in dictionary
translated += alphabet[line]
for word in words:
if word in inputFileName:
outputFile.write(inputFile[word])
else:
outputFile.write(word)
outputFile.write(' ')
outputFile.write('\n')
return (outputFile, inputFile, inputFileName, translated)
translated = morseCode(inputFileName)
print(translated)
答案 0 :(得分:1)
MORSE_CODE_DICT = { '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':'-----', ', ':'--..--', '.':'.-.-.-',
'?':'..--..', '/':'-..-.', '-':'-....-',
'(':'-.--.', ')':'-.--.-'}
def encrypt(message):
cipher = ''
message_upper=message.upper()
for letter in message_upper:
if letter != ' ':
if letter in MORSE_CODE_DICT:
cipher += MORSE_CODE_DICT[letter] + ' '
else:
cipher+=letter
else:
cipher += ' '
return cipher
O/P:-
>>> encrypt('I like apples + bananas!')
'.. .-.. .. -.- . .- .--. .--. .-.. . ... + -... .- -. .- -. .- ... !'
答案 1 :(得分:0)
一旦您要输入莫尔斯字符,就可以使用简单的列表理解和dict.get()
功能将其翻译为莫尔斯。请注意,这会将所有非字母数字字符转换为空格。正如您在其他答案中看到的那样,您可以轻松地将这些字符添加到字典中。您需要注意的一个关键是str.upper()
方法。由于Morse不区分大小写,因此可以确保所有字符都匹配。
def txt_2_morse(msg):
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':'--..', '1':'.----', '2':'..---', '3':'...--', '4':'....-',
'5':'.....', '6':'-....', '7':'--...', '8':'---..', '9':'----.',
'0':'-----'}
return "".join([morse.get(c.upper(), ' ') for c in msg])
print(txt_2_morse("Hello World"))
# ......-...-..--- .-----.-..-..-..
因此,如果您想将文件逐行读取到输出文件中,则只需简单地逐行解析。
with open('inputfile.txt') as infile:
with open('outputfile.txt', 'w') as outfile:
for line in infile:
outfile.write("{}\n".format(txt_2_morse(line)))
输入:
this is a file
with a few lines in it
to demonstrate code
输出:
-......... ..... .- ..-....-...
.--..-.... .- ..-...-- .-....-..... ..-. ..-
---- -...------....-.-..--. -.-.---.