【问题标题】:Typing effect in PythonPython中的打字效果
【发布时间】:2013-12-16 15:04:56
【问题描述】:

我想制作这样的程序,它从字符串中读取字符并在延迟后打印每个字符,使其看起来像打字效果。

现在我的问题是睡眠功能无法正常工作。它在长时间延迟后打印整个句子。

import sys
from time import sleep

words = "This is just a test :P"
for char in words:
    sleep(0.5)
    sys.stdout.write(char)

我使用“sys.stdout.write”来删除字符之间的空格。

【问题讨论】:

    标签: python python-2.7 sleep


    【解决方案1】:

    我对@Jon Vorcak 有类似的回答,

    我们用一个函数,用他的代码

    #you can also call it whatever you want
    def type(text):
      words = text
      for char in words:
        time.sleep(0.2)
        sys.stdout.write(char)
        sys.stdout.flush()
    type("hi")
    

    【讨论】:

      【解决方案2】:

      为了更容易,你应该放一个 sys.stdout.flush 和一个 def 函数。例如:

          import sys
          import time
      
          def print_slow(str):
              for char in str:
                  time.sleep(.1)
                  sys.stdout.write(char)
                  sys.stdout.flush()
      
      print_slow('Hello')
      

      这应该可以工作,因为我已经测试过了。 def 让你更容易写出你的字符串,你可以随心所欲地自定义它。 (:

      【讨论】:

        【解决方案3】:

        长答案:

        import sys
        import time
        
        variable_name = 'Words'
        
        for char in variable_name:
            time.sleep(0)
            sys.stdout.write(char)
        

        为什么需要flush方法?我的代码没有它也能工作。

        简答:

        import time
        
        variable_name = 'Words'
        
        for char in variable_name:
            time.sleep(0)
            print(char, end = '')
        

        如果你想让单词垂直打印,那么你应该省略 end 参数。

        如果您希望单词水平打印,那么您应该使用 end 参数。

        无论哪种方式,代码都可以在没有 flush 方法的情况下工作。

        【讨论】:

          【解决方案4】:

          python 3 中,您可以将对 sys.stdout 的调用替换为标准的 print 调用:

          for char in words:
              sleep(0.1)
              print(char, end='', flush=True)
          

          【讨论】:

            【解决方案5】:
            import sys
            from time import sleep
            
            words = "Welcome to CB#SA.NET.CO"
            for char in words:
            sleep(0.1)
            sys.stdout.write(char)
            sys.stdout.flush()
            

            【讨论】:

              【解决方案6】:

              你应该在每次迭代后使用sys.stdout.flush()

              问题是标准输出被换行符刷新或手动使用sys.stdout.flush()

              所以结果是

              import sys
              from time import sleep
              
              words = "This is just a test :P"
              for char in words:
                  sleep(0.5)
                  sys.stdout.write(char)
                  sys.stdout.flush()
              

              您的输出被缓冲的原因是需要执行系统调用才能进行输出,系统调用既昂贵又耗时(因为上下文切换等)。因此,用户空间库会尝试缓冲它,如果需要,您需要手动刷新它。

              只是为了完整起见...错误输出通常是非缓冲的(调试会很困难)。所以以下也可以。重要的是要意识到它被打印到错误输出中。

              import sys
              from time import sleep
              
              words = "This is just a test :P"
              for char in words:
                  sleep(0.5)
                  sys.stderr.write(char)
              

              【讨论】:

                【解决方案7】:

                您必须在每个循环中刷新标准输出,以清空缓冲区:

                import sys
                
                from time import sleep
                
                words = "This is just a test :P\n"
                for char in words:
                    sleep(0.5)
                    sys.stdout.write(char)
                    sys.stdout.flush()
                

                如果没有这个,它只会将您的字符串存储在缓冲区中并等待 \n(或打印足够数量的字符),这会在您的循环结束时出现......

                更多信息:

                【讨论】:

                  猜你喜欢
                  • 2018-03-14
                  • 2016-08-31
                  • 1970-01-01
                  • 2012-01-30
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-04-02
                  • 1970-01-01
                  相关资源
                  最近更新 更多