【问题标题】:Input with time limit/countdown [closed]输入时间限制/倒计时[关闭]
【发布时间】:2012-12-25 09:52:34
【问题描述】:

我对 Python 很陌生,想为我的学生编写一个(不是计算机)语言培训师。就像计时器在后台运行并且学生必须快速输入单词以减慢/恢复倒计时一样 - 否则倒计时达到零并显示一些“游戏结束”消息。 (就像特工必须在计时器趋向零时拆除炸弹一样。)

有很多关于线程的解释听起来像是正确的方法,当然,但到目前为止,我还没有发现任何将计时器与(限时)raw_input 结合使用的东西。你们中的任何一个专业人士可以给我一个指向我忽略的教程/讨论的指针吗?

【问题讨论】:

    标签: python multithreading input


    【解决方案1】:
    import threading
    import time
    import os
    
    def ask():
        """
        Simple function where you ask him his name, if he answers
        you print message and exit
        """
        name = raw_input("Tell me your name, you have 5 seconds: ")
        exit_message = "Wohoho you did it..Your name is %s" % name
        exit(exit_message)
    
    def exit(msg):
        """
        Exit function, prints something and then exits using OS
        Please note you cannot use sys.exit when threading..
        You need to use os._exit instead
        """
        print(msg)
        os._exit(1)
    
    def close_if_time_pass(seconds):
        """
        Threading function, after N seconds print something and exit program
        """
        time.sleep(seconds)
        exit("Time passed, I still don't know your name..")
    
    def main():
        # define close_if_time_pass as a threading function, 5 as an argument
        t = threading.Thread(target=close_if_time_pass,args=(5,))
        # start threading
        t.start()
        # ask him his name
        ask()
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

    • 感谢十亿!有史以来最好的 IT 圣诞礼物!
    • 哈哈哈,不客气,满意请采纳并投票。
    • N00b 回答:当然,我会完全赞成你的回答——一旦我有足够的“声誉”......
    • 有 threading.Timer 和 sys.exit 可以简化你的代码。
    • @塞巴斯蒂安+1,谢谢。我想向他展示线程是如何工作的,因为在他的项目中似乎需要的不仅仅是简单的计时器
    【解决方案2】:

    您不必通过线程来执行此操作,您可以在单个线程中以特定频率运行您的“逻辑”,并且每次迭代都通过时间增量方法重新计算倒计时。这就是制作了多少视频游戏。

    假设您以 60hz 运行此伪代码方法:

    delta = timenow-timelast;
    countdown -= delta;
    if(input)
        processInputHere;
    

    您应该能够将伪代码转换为 python 代码以使其工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多