【问题标题】:How to replace characters that have already been printed in a previous line如何替换上一行已经打印的字符
【发布时间】:2023-03-06 14:52:01
【问题描述】:

我正在尝试在 Python 中制作类似于 this 的游戏(Windows 上为 3.3.2)。我认为大多数编程都是相当基础的,所以对于初学者来说很容易。我无法理解的是如何让一行代码在保持在同一位置的同时不断更改(我试图描述您拥有的糖果数量[如果您看起来该行仍然在同一个地方物理强度变化])。我知道您必须执行以下操作:

candiesNbrDisplay = 'You have ' + str(candiesNbrOwned) + ' candies!'
candiesNbrOwned = candiesNbrOwned + 1
time.sleep( 1)

但是没有this怎么改号码啊!

【问题讨论】:

  • 在 Unix 上,您可以使用不带换行符(LF 或 NL)的 CR(回车)将光标移回行首,以便下一个输出覆盖前一个输出。这可能也适用于 Windows。
  • 代码示例?并没有真正拿起你放下的东西......ELI5刚刚开始编程......

标签: python function printing replace


【解决方案1】:

这适用于 Unix(Mac OS X 10.8.5,使用 Python 2.7.2):

import time
import sys

for i in xrange(1, 10):
    print "\rThe number of candies is %d and the pile is growing" % i,
    sys.stdout.flush()
    time.sleep(1)
print ""

我不知道它是否适用于 Windows 或 Python 3。

【讨论】:

    【解决方案2】:

    Jonathan 建议在每行末尾使用 CR。您可以通过向print 传递一个额外的参数来做到这一点:

    candies = 0
    while True:
        print('You have', candies, 'candies!', end='\r')
        time.sleep(1)
        candies += 1
    

    通常,print 使用 NL (\n) 字符,表示“跳到下一行”。

    但是在这里,我们告诉它使用 CR (\r),这意味着“回到当前行的开头”。这就是我们想要的。

    不幸的是,这种技术只适用于命令行,不适用于 IDLE。因此,您必须直接运行脚本(双击其图标)才能使其正常工作。

    【讨论】:

    • 非常感谢!!真的钉了ELI5哈哈。有什么办法让它与 IDLE 兼容?
    • imgur.com/O2QRoWL 顺便谢谢你。他们是否可以在游戏的其余部分运行时将其作为后台过程,因为我希望在游戏的其余部分仍在进行时发生这种情况(再次像Candy Box
    • 我不这么认为。 IDLE 中的提示不是控制台,它只是一个伪装成控制台的文本框。所以它不会支持这些控制代码。但是你的用户无论如何都会在控制台中运行你的程序,所以这不是一个大问题。
    • 请查看对第二条评论的编辑。 + 代码如果它没有意义 candiesNbrOwned = 0 while repeat
    • 您可以使用multithreading 做到这一点,但我建议您在尝试之前了解更多。对于初学者项目,我会推荐一些更简单的东西,比如猜谜游戏。
    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多