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

Python print element happens after the next element

我正在尝试用 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 之前。所以它应该先打印然后发出噪音。但它会发出声音,然后在为所有字符发出声音后,打印代码。怎么了?

我不太确定我完全理解你的问题,但你的程序目前 首先将一个字母的莫尔斯值打印到控制台,然后发出相应的声音。所以如果那是你想要的,你不需要改变任何东西。

否则如果你想打印整个句子的莫尔斯,然后发出所有相应的声音,你可以使用两个循环:

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 是您的输入字符串

flush=True 添加到您的 print 语句中,如下所示:

print(item_dict[f"{x}"], end=' ', flush=True)

这会强制在控制台上输出。当您指定自定义“行尾”参数时,这对您的情况很有用。当它不是换行符时,它不会按原样自动打印。