Python打印元素发生在下一个元素之后



我正试图用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是您的输入字符串

相关内容

最新更新