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

Python实现30秒无输入自动退出程序的计时器需求求助

给《谁想成为百万富翁》梗向游戏添加30秒超时退出功能

问题描述

我是Python新手,正在制作一个模仿《谁想成为百万富翁》的梗向小游戏,需要添加一个计时器——如果30秒内未输入答案,程序自动退出。尝试过多种教程和同类问题的解决方案但无效,附上代码寻求帮助:

import time
import pygame
from tkinter import ttk
from playsound import playsound
import winsound
from pygame import mixer
mixer.init()
pygame.mixer.Channel(0).play(pygame.mixer.Sound('bgsong.mp3'))
print('Я устроил ВИКТОРИНУ людей нуждающихся в деньгах!И победитель сегодняшеного шоу получит 100,000$!!!!')
time.sleep(6)
print('Также сегодня я хочу порекомендовать свою шоколадку ФИСТБЛСТ!!!')
time.sleep(2)
print('кароч викторина поехали')
pygame.mixer.Channel(0).play(pygame.mixer.Sound('intrques.mp3'))
time.sleep(3)
print('сколько будет 9+10?')
time.sleep(1.5)
print('ответ а-19')
time.sleep(1)
print('ответ b-21')
time.sleep(3)
pygame.mixer.Channel(0).play(pygame.mixer.Sound('ques.mp3'))
time.sleep(1)
print('на ответ дается 30 секунд') #'You got 30 seconds to answer'
#Тут нужен Таймер/I need timer here
a=int(input())
if a<=19:
    pygame.mixer.Channel(0).play(pygame.mixer.Sound('lost.mp3'))
    time.sleep(2)
    print('неправильно, ты проиграл, нужно было взять ответ того ребенка из того самого мема')
    time.sleep(2)
    exit() #wrong answer
elif a>=21:
    print('Проверка верного ответа') #correct answer
    #доделай/ill make other part in future

解决方案

Python原生的input()是阻塞式函数,会一直等待用户输入,单独用time.sleep()无法实现超时检测。这里用多线程拆分计时和输入逻辑:主线程负责等待用户输入,子线程单独计时,超时直接终止程序。

修改后的完整代码:

import time
import pygame
import threading
import sys
from playsound import playsound
import winsound
from pygame import mixer

mixer.init()
pygame.mixer.Channel(0).play(pygame.mixer.Sound('bgsong.mp3'))
print('Я устроил ВИКТОРИНУ людей нуждающихся в деньгах!И победитель сегодняшеного шоу получит 100,000$!!!!')
time.sleep(6)
print('Также сегодня я хочу порекомендовать свою шоколадку ФИСТБЛСТ!!!')
time.sleep(2)
print('кароч викторина поехали')
pygame.mixer.Channel(0).play(pygame.mixer.Sound('intrques.mp3'))
time.sleep(3)
print('сколько будет 9+10?')
time.sleep(1.5)
print('ответ а-19')
time.sleep(1)
print('ответ b-21')
time.sleep(3)
pygame.mixer.Channel(0).play(pygame.mixer.Sound('ques.mp3'))
time.sleep(1)
print('на ответ дается 30 секунд') #'You got 30 seconds to answer'

# 超时计时器函数
def timeout_timer():
    time.sleep(30)
    print("\nВремя вышло! Вы проиграли.")
    pygame.mixer.Channel(0).play(pygame.mixer.Sound('lost.mp3'))
    time.sleep(2)
    sys.exit()

# 启动计时守护线程
timer_thread = threading.Thread(target=timeout_timer)
timer_thread.daemon = True  # 主线程结束时自动终止该线程
timer_thread.start()

# 获取用户输入并处理异常
try:
    a = int(input())
except ValueError:
    print("Некорректный ввод!")
    pygame.mixer.Channel(0).play(pygame.mixer.Sound('lost.mp3'))
    time.sleep(2)
    sys.exit()

# 原有逻辑保留
if a <= 19:
    pygame.mixer.Channel(0).play(pygame.mixer.Sound('lost.mp3'))
    time.sleep(2)
    print('неправильно, ты проиграл, нужно было взять ответ того ребенка из того самого мема')
    time.sleep(2)
    sys.exit()
elif a >= 21:
    print('Проверка верного ответа')
    # 后续逻辑可在这里补充

关键说明

  • 新增threading和sys模块:前者用于创建独立的计时线程,后者用于安全退出程序
  • 守护线程设置:daemon=True确保用户输入完成后,计时线程会随主线程自动结束,不会残留后台线程
  • 异常处理:用try-except捕获用户输入非数字的情况,避免程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:35:36