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
相关产品推荐
相关产品推荐

