超时后python到期输入提示

时间:2016-04-01 06:14:29

标签: python python-3.x

如何在python中提出要约/问题,例如

import time
print("Hey there man.")
test = input()
if test == "Hey" or test == "Hi":
    print("Hey there dude.")
elif test == "Go away" or test == "Bye":
    print("Cya dude.")

我如何提出此优惠说我不知道​​最后10秒才会忽略if和elif语句并打印一些全新的内容,如同类似的内容...

import time
print("Hey there.")
test = input()
if test == "Hey" or test == "Hi":
    print("Hey there dude.")
elif test == "Go away" or test == "Bye":
    print("Cya dude.")
else time.sleep == >5:
    print("Nah your time has expired I'm out anyways.")

2 个答案:

答案 0 :(得分:3)

编辑#2

抓好一切。我认真地过分复杂了这个问题。 Sci Prog刚刚发布了一个更简单的解决方案。虽然我会改变一些类似的东西。

import time

expires_in = 5 #in seconds    

start = time.time()
test = input("Hey there.\n") #\n is a newline character
end = time.time()

if end - start > expires_in:
    print("Nah your time has expired I'm out anyways.")
elif test == "Hey" or test == "Hi":
    print("Hey there dude.")
elif test == "Go away" or test == "Bye":
    print("Cya dude.")

原始答案

这种伎俩。如果用户响应的时间超过了超时时间,那么当他们开始输入输入时,我会打印出一条消息,说明它花了很长时间。

但是,因为输入命令会暂停脚本的执行,直到我们从用户那里得到一些输入,否则我们不能轻易插入消息,直到他们输入内容为止。有两种方法可以解决这个问题。 1)我们使用一些较低级别的函数而不是使用输入,我们直接使用sys.stdout。 2)我们多线程脚本。这两种方法都很复杂,可能比你想要的更多工作。

import time

def get_input():
    start_time = time.time()
    expires_in = 5 #in seconds
    got = ""

    while (time.time() - start_time < expires_in):
        if got: 
            print("you entered", got)
            return got
        got = input("enter something: ")

    print("You took to long")

修改 OP问了一个更好地遵循他想要完成的事情的例子,所以在这里。我也在代码之后添加了一个解释。

import time

print("Hey there.")

def get_input():
    start_time = time.time()
    expires_in = 5 #in seconds
    user_input = ""

    while (time.time() - start_time < expires_in): #keep looping if the time limit has not expired
        if user_input:
            return user_input
        user_input = input()
    print("Nah your time has expired I'm out anyways.")

test = get_input()
if test == "Hey" or test == "Hi":
    print("Hey there dude.")
elif test == "Go away" or test == "Bye":
    print("Cya dude.")

time.time()会抓住当前时间。 (作为一个代表自公元前0年以来的秒数的大讨厌数字返回)。

一旦我们进入while循环,我们还没有任何用户输入,所以我们可以直接跳到输入语句。然后,根据用户的速度有多快,我们可以得到两个结果。

a)用户及时回应。在这种情况下,我们再次执行while循环。这次我们输入if user_input: if子句,我们立即返回用户输入的内容

b)用户没有及时回复。在这种情况下,我们不会重新执行while循环,因此我们将继续使用print("Nah your time has expired I'm out anyways.") print语句。

我想指出,我们将输入语句放在我们所做的位置非常重要。如果我们在用户使用后检查用户输入,我们最终会遇到以下情况:问题过期,但用户仍然给我们一些输入。我们看到用户给了我们一些输入,所以我们返回输入。然后我们永远不会有机会告诉用户时间已过期。

您也可以实施一个不错的小技巧。您可以使用input().lower()代替input()来使输入不区分大小写。然后,您必须将if语句更改为小写。然后用户可以输入Heyhey或类似hEy的奇怪内容,如果他们真的想要的话。

答案 1 :(得分:3)

您可以使用datetime个对象(来自具有相同名称的模块)。计算差异会得到timedelta个对象。

最后,您必须在检查答案之前测试延迟。

from datetime import datetime
print("Hey there.")
dt1 = datetime.now()
test = input()
dt2 = datetime.now()
difference = dt2 - dt1  # this is a timedelta

if difference.seconds > 10 or difference.days > 0:
    print("Nah your time has expired I'm out anyways.")
elif test == "Hey" or test == "Hi":
    print("Hey there dude.")
elif test == "Go away" or test == "Bye":
    print("Cya dude.")

(在你的问题中指定的python 3中运行)

当然,.days部分可以省略,因为人们不太可能等待那么久:)