【问题标题】:Output ends in none when delaying text延迟文本时输出无结束
【发布时间】:2018-09-27 22:04:33
【问题描述】:

我正在尝试制作基于文本的冒险游戏。我是 Python 新手 我正在尝试像旧游戏一样延迟文本。

from time import sleep
import sys
def de(string):
    for c in string:
        print(c, end='')
        sys.stdout.flush()
        sleep(0.1)

在整个代码中,执行以下操作:

print(de("\nPlayer health: "), player_health,)

user_fighter = input(de("what is the name of your fighter?"))

输出总是以“None”结尾

例如
Player health: None 100

我该如何解决这个问题?

【问题讨论】:

  • 你到底想做什么?您能否向我们提供有关您的程序输出和一些示例的更多信息?
  • 请确认在您的问题中的 de() 函数定义之后添加一行,例如print de(“Player Health:“) 将打印 Player Health:None 吗?请检查此内容,然后将其编辑到您的问题中,以使您的问题成为最小完整的可验证示例stackoverflow.com/help/mcve
  • 什么?你展示的代码如何产生**None** 或者@d_kennetz 你在做什么来改变这个问题的重要方面?
  • 您的de() 函数返回的值是None,这就是您看到该值被打印的原因。只需直接调用de()(即,不作为print() 调用中的参数)。
  • 这能回答你的问题吗? Random None when printing from raw_input

标签: python delay


【解决方案1】:

您的de 函数不返回任何内容,因此返回值为None。此外,您已经在函数中有一个 print 来执行您想要执行的操作。因此,您可以直接调用de 函数,而不是在print 中调用它。

代码

from time import sleep
import sys
def de(string):
    for c in string:
        print(c, end='')
        sys.stdout.flush()
        sleep(0.1)
# ...
# Code
# ...

de("\nPlayer health: ")
print(player_health)

输出

Player health: 100

“玩家生命值”逐个字母显示,之后立即显示数值。

【讨论】:

    【解决方案2】:

    拥有两个功能怎么样。一个输出文本,另一个输出文本但返回用户的条目。

    from time import sleep
    import sys
    
    def de(string, end='\n'):
        for c in string:
            print(c, end='')
            sys.stdout.flush()
            sleep(0.1)
        print(end,end='')
    
    def de_input(string):
        de(string, end='')
        return input()
    
    de("Welcome to game")
    name = de_input("What is your name?")
    
    de("Welcome %s" % name)
    

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多