【问题标题】:Python print element happens after the next elementPython打印元素发生在下一个元素之后
【发布时间】:2021-03-20 15:26:53
【问题描述】:

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

【问题讨论】:

  • 我无法重现您的错误描述。每个声音都与每个莫尔斯电码字母的印刷相吻合。不错的应用程序。
  • 谢谢,也许是 vs code 终端有问题,但它仍然会发出所有的声音,然后将单词全部打印出来。 @Mr.T

标签: python python-3.x morse-code


【解决方案1】:

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

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

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

【讨论】:

  • 顺便说一句,这只适用于 Python 3.3 版本:docs.python.org/3/library/functions.html#print
  • 如我所说,我正在使用 python 3.8。
  • 我写它是为了提醒其他可能遇到同样问题的人。很高兴它有帮助!
【解决方案2】:

我不太确定我完全理解你的问题,但你的程序目前 首先将字母的莫尔斯值打印到控制台,然后发出相应的声音。因此,如果这是您想要的,您无需进行任何更改。

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

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

【讨论】:

  • 了解字符串,我想按顺序打印它们,而不是孔句。但似乎我应该改变一些东西,因为它首先发出所有的声音,然后把所有的词都打印在一起。完全糊涂了。
猜你喜欢
  • 1970-01-01
  • 2011-11-20
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多