Python 中满足条件时如何停止要求输入?

问题描述 投票:0回答:1

我正在开发一个接受用户输入的Python程序。我希望程序要求输入,如果用户没有输入任何内容并且满足条件(如果是某个时间),我希望程序停止询问

每当您要求输入时,整个程序就会停止并等待。有没有办法在检查程序其他部分的同时要求输入?例如,

from datetime import datetime
now = datetime.now()
formatted_time = now.strftime('%H:%M:%S')
time_list = formatted_time.split(":")
hour = int(time_list[0])
name = input("Your name: ")
if hour > 12:
    print("Too late")

它永远不会到达

if hour > 12
,因为它仍在等待输入。有什么办法可以让 Windows 上不出现这个问题吗?我知道有一些方法可以进行倒计时,但我不知道如何做到这一点。

python datetime input conditional-statements
1个回答
0
投票

由于

input
将冻结执行,任何依赖于
input
调用后代码的解决方案都将很困难。使用原始倒计时可能行不通。

如果您不需要在后台运行任何内容,则 pytimedinput 包即可解决问题。它包括

timedInput
函数,该函数返回
(input: str, timed_out: bool)

的元组
from pytimedinput import timedInput

seconds: int = 15 # Number of seconds you want to wait
name, timed_out = timedInput("Your name: ", timeout=seconds)
if timed_out:
    print("Too late!")

如果您在等待输入时需要发生其他事情,您可以考虑使用 asyncio 或类似的东西。 这个问题问的是在等待输入的同时在后台执行任务,但不一定是输入超时。如果您两者都需要,请考虑将

async def
解决方案之一与
pytimedinput
结合起来。像这样的事情可能会成功:

import asyncio
from pytimedinput import timedInput

async def aTimedInput(message: str, seconds: int) -> tuple[str, bool]:
    return (await asyncio.to_thread(timedInput, message, seconds))

一旦定义了

aTimedInput
,你如何使用它将在很大程度上取决于你到底想要做什么。

© www.soinside.com 2019 - 2024. All rights reserved.