【问题标题】:"Typewriter"-like printing not working in CMD or py.exe, but works in VS Code Terminal类似“打字机”的打印在 CMD 或 py.exe 中不起作用,但在 VS Code 终端中起作用
【发布时间】:2021-11-10 20:19:45
【问题描述】:

我正在学习软件开发,我们已经开始使用 python,作为练习,我想制作一种“花哨”的打印风格。在互联网的一些帮助下,我设法让它在我一直在使用的 VS Code 的终端中工作-但是当单独运行 .py 文件或通过 CMD 运行时,循环运行的次数与它一样多应该,然后才一次打印所有输出。

from time import *
from random import *
from numbers import *

# Slow printing function- prints 1 character at a time
def slowPrint(line):
    for char in line: # For every character (char) in the string (line)
        t = uniform(0.03, 0.3)
        print(char,end="") # Print the character, end on nothing to ensure no spaces between characters
        sleep(t) # Sleep for t amount of seconds

# Conversation
slowPrint("Message 1."), sleep(0.5), slowPrint(" Message 2.\n")


input("Press enter;")

我认为它应该做的,以及它在 VS 代码终端中所做的,是它自己打印每个字符,每个字符之间有一个随机延迟。我无法弄清楚 VS Code 和 CMD 之间的差异是什么。

我希望这里有人知道这一点:>提前谢谢!

【问题讨论】:

  • 进口任何东西的最糟糕的方式。抱歉,您不应该在导入时使用*,尤其是在这种情况下,您需要从多个库中执行此操作。这已经是不好的做法,但不仅如此。你不知道这些库中的所有函数,所以你可以覆盖一些,可能会导致一些非常难以调试的问题,此外这根本不利于可读性

标签: python python-3.x loops random


【解决方案1】:

在打印函数中添加flush=True

print(char, end="", flush=True)

基本上flush 好吧...立即刷新数据而不是缓冲它(w3schools reference to print function

还有:
我强烈建议在导入某些内容时不要使用通配符 (*),您应该导入您需要的内容,例如from module import Class1, func_1, var_2 等等或导入整个模块:import module 然后你也可以使用别名:import module as md 或类似的东西,关键是不要导入所有内容,除非你真的知道你在做什么;名称冲突是问题所在。

【讨论】:

  • 谢谢!这行得通。关于进口,我不知道——这是我在课堂上学到的。
  • @pinkflameinthepan 好吧,这不是很好,这只是一种糟糕的编程习惯,对于你的情况,你可以简单地做from time import sleepfrom random import uniform,就是这样,你占用的命名空间很少,函数的来源有点清楚(而且您没有使用numbers 库,因此在您给定的示例中导入是无用的)。一个例子是(尤其是在不了解软件包的情况下)是from tkinter import *from tkinter.ttk import *,它们都有相同的类但它们的参数不同,因此错误令人困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
相关资源
最近更新 更多