You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python中if语句在30秒后生效?无需threading实现需求

问题分析与解决方案

你的原代码逻辑完全错误:input()会阻塞程序直到用户输入完成,之后才会执行time.sleep(30),根本无法实现“30秒内未输入就触发关机”的需求。

下面是符合需求的代码(基于Windows系统,适配你使用的shutdown /s命令):

import os
import time
import msvcrt

print('你的电脑会在以下两种情况下关机:不参与游戏,或者游戏失败')

timeout = 30
start_time = time.time()
user_input = ''

print(f'12乘以13等于多少?你有{timeout}秒时间输入。')

while time.time() - start_time < timeout:
    # 检测是否有按键输入
    if msvcrt.kbhit():
        # 读取输入内容直到回车,模拟input()的交互体验
        user_input = ''
        while True:
            char = msvcrt.getch().decode('utf-8')
            if char == '\r':  # 回车代表输入结束
                print()  # 换行对齐后续输出
                break
            user_input += char
            print(char, end='', flush=True)  # 实时显示输入的字符
        break  # 有输入就跳出超时等待循环

# 根据输入结果执行对应逻辑
if user_input == '156':
    print('回答正确,程序退出')
    exit()
elif not user_input:
    print('你甚至都没尝试输入')
    os.system("shutdown /s /t 1")
else:
    print('回答错误')
    os.system("shutdown /s /t 1")

代码说明

  • 用msvcrt.kbhit()检测按键输入,避免input()的阻塞问题,实现限时等待
  • 通过时间差计算30秒超时时间,到点自动进入判断逻辑
  • 实时回显输入字符,和原生input()的交互体验一致
  • 完全匹配需求逻辑:
    • 30秒无输入:打印提示并执行关机
    • 输入正确答案“156”:直接退出程序
    • 输入其他内容:立即执行关机

内容的提问来源于stack exchange,提问作者NielsNL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:00:53