我正试图用Python制作一个文本到莫尔斯的转换器(在vs代码中使用Python 3.8(,但行运行顺序有问题。这是我的代码(问题在代码后面(:
import winsound
import time
def beep(char):
sound = {
'-': 500,
'.': 150,
}
for dashdot in item_dict[char]:
winsound.Beep(500, sound[dashdot])
time.sleep(.05)
item_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': '--..',
'0': '-----',
'1': '.----',
'2': '..---',
'3': '...--',
'4': '....-',
'5': '.....',
'6': '-....',
'7': '--...',
'8': '---..',
'9': '----.',
'.': '.-.-.-',
',': '--..--',
'?': '..--..',
'-': '-...-',
'/': '-..-.'
}
def morse():
x = input("?n")
name_list = list(x)
for x in name_list:
print(item_dict[f"{x}"], end=' ')
beep(x)
time.sleep(.5)
morse()
print('''text to morse-text
enter the text you want''')
morse()
正如你在这部分看到的:
for x in name_list:
print(item_dict[f"{x}"], end=' ')
beep(x)
time.sleep(.5)
元素print
在函数beep
之前。所以它应该先打印,然后发出噪音。但它会发出噪音,然后在为所有字符发出噪音后,打印代码。它怎么了?
将flush=True
添加到print
语句中,如下所示:
print(item_dict[f"{x}"], end=' ', flush=True)
这将强制控制台上的输出。当您指定自定义";"线的末端";论点当它不是换行符时,它不会按原样自动打印。
我不太确定我是否完全理解你的问题,但你的程序目前首先将字母的莫尔斯值打印到控制台,然后发出相应的声音。所以,如果这是你想要的,你不必改变任何事情。
否则,如果你想打印整个句子的莫尔斯电码,然后发出所有相应的声音,你只需要使用两个循环:
def morse():
x = input("?n")
for char in x:
print(item_dict[char], end=' ')
for char in x:
beep(char)
time.sleep(.5)
morse()
而不是像那样列出字符串输入
name_list = list(x)
for x in name_list:
你可以刚好通过for循环中的输入字符串,它会自动循环到字符串中的每个字符:
for char in x:
其中x
是您的输入字符串