如何在输入命令中的puthon中一次打印一个字符?

时间:2018-01-16 12:14:26

标签: python python-3.x

所以我知道如何一次打印一个字符,我的基本代码是:

import time
import sys

def delay_print(s):
    for c in s:
        sys.stdout.write(c)
        sys.stdout.flush()
        time.sleep(0.2)

delay_print("hello world")

但是我正在制作一款游戏,并且我在所有代码中都使用了delay_print,并且需要一种方法在用户输入中运行它而不会得到这个结果(没有错误,但我没有'我真的想要一个随机的"无"那里。

GetUp=input (delay_print("\nGET UP? Y/N: "))

运行时会显示:

GET UP? Y/N: NoneN

这不是我想要的。

所以我需要的是有人告诉我如何在没有"无"的情况下使用delay_print。出现。除此之外它运行正常。

4 个答案:

答案 0 :(得分:3)

只需将其制成两行,然后在没有提示的情况下离开input()

delay_print("\nGET UP? Y/N: ")
GetUp = input()

这样,您的print将按您希望的方式运行,input将无阻碍地读取用户输入。

当你不必要时,不要使你的生活复杂化;)

如果您坚持在一行中执行此操作,则必须通过添加delay_print语句来修改return ''的定义。这样,它将返回而不是默认的None,而是返回空字符串。

但请注意,GetUp=input(delay_print("\nGET UP? Y/N: "))不是非常干净的编码样式。在我看来是。

答案 1 :(得分:1)

您可以从""返回delay_print,因此input(delay_print("whatever"))会慢慢打印,然后在该行的末尾打印一个空输入提示,这似乎就是您想要的。< / p>

当前的行为发生是因为delay_print返回None,并且input打印出来作为提示。

答案 2 :(得分:0)

出现,因为delay_print没有返回任何值。

import time
import sys

def delay_print(s):
    for c in s:
        if c:
            sys.stdout.write(c)
            sys.stdout.flush()
            time.sleep(0.50)
    return ''

#delay_print("hello world")

GetUp=input(delay_print("\nGET UP? Y/N: "))

答案 3 :(得分:0)

请参阅built-in function input

  

如果存在prompt参数,则将其写入标准输出而不带尾随换行符。

你给它一个参数(None)(作为提示)。因此,解释器首先评估参数。此时,程序执行写入,刷新和休眠。然后它返回input()(在运行到函数末尾时隐含)。然后将其作为temp = delay_print("\nGET UP? Y/N: ") # assert temp is None GetUp = input(temp) # Same as input(None) 的提示提供。

您的代码就像这样:

delay_print("\nGET UP? Y/N: ")
GetUp = input()

所以,这就是错误。

正确应该是:

  var oTable = $('#example').DataTable(
                  {
                    "sScrollY":  200,
                    // "bScrollCollapse": true,
                    // "bAutoWidth": true,
                    // "sScrollX": "100%",
                    // "sScrollXInner": "100%"
   });