有什么方法可以通过if语句来询问问题,以及在几秒钟后如果用户没有给出任何答案,或者状态是否使用默认答案?
inp = input("change music(1) or close the app(2)")
if inp = '1':
print("Music changed)
elif inp = '2':
print("good by")
在这种情况下,如果语句默认选择3,则用户默认在30秒后不给出任何答案
答案 0 :(得分:0)
from threading import Timer
out_of_time = False
def time_ran_out():
print ('You didn\'t answer in time') # Default answer
out_of_time = True
seconds = 5 # waiting time in seconds
t = Timer(seconds,time_ran_out)
t.start()
inp = input("change music(1) or close the app(2):\n")
if inp != None and not out_of_time:
if inp == '1':
print("Music changed")
elif inp == '2':
print("good by")
else:
print ("Wrong input")
t.cancel()
计时器对象
此类表示仅在经过一定时间(计时器)后才应执行的操作。计时器是一个 Thread的子类,因此也可以作为Thread的示例 创建自定义线程。
与线程一样,通过调用其start()方法来启动计时器。 可以通过调用计时器来停止计时器(在其动作开始之前) cancel()方法。计时器在执行之前等待的间隔 动作可能与设定的时间间隔不完全相同 用户。
例如:
def hello(): print("hello, world") t = Timer(30.0, hello) t.start() # after 30 seconds, "hello, world" will be printed
类线程。计时器(间隔,函数,args = None,kwargs = None)
创建一个计时器,该计时器将使用参数args和关键字运行函数 在间隔秒过去之后,参数kwargs。如果args为None (默认),然后将使用一个空列表。如果kwargs为None( 默认),那么将使用一个空字典。
cancel()
停止计时器,并取消执行计时器的操作。仅当计时器仍在等待时,这才有效 阶段。
答案 1 :(得分:0)
这是使用多重处理的另一种方法(python 3)。请注意,要使stdin在子进程中正常工作,必须先重新打开它。我还将输入的内容从字符串转换为int以便与多处理值一起使用,因此您可能也要在此处进行错误检查。
import multiprocessing as mp
import time
import sys
import os
TIMEOUT = 10
DEFAULT = 3
def get_input(resp: mp.Value, fn):
sys.stdin = os.fdopen(fn)
v = input('change music(1) or close the app (2)')
try:
resp.value = int(v)
except ValueError:
pass # bad input, maybe print error message, try again in loop.
# could also use another mp.Value to signal main to restart the timer
if __name__ == '__main__':
now = time.time()
end = now + TIMEOUT
inp = 0
resp = mp.Value('i', 0)
fn = sys.stdin.fileno()
p = mp.Process(name='Get Input', target=get_input, args=(resp, fn))
p.start()
while True:
t = end - time.time()
print('Checking for timeout: Time = {:.2f}, Resp = {}'.format(t, resp.value))
if t <= 0:
print('Timeout occurred')
p.terminate()
inp = DEFAULT
break
elif resp.value > 0:
print('Response received:', resp.value)
inp = resp.value
break
else:
time.sleep(1)
print()
if inp == 1:
print('Music Changed')
elif inp == 2:
print('Good Bye')
else:
print('Other value:', inp)