Задать вопрос
Keste
@Keste
test1

Что не так с моим кодом(Будильник)?

import time # Для работы с временем
import re # Для работы с регулярными выражениями
import threading # Модуль для работы с потоками

def thread(my_func):
	def wrapper(*args, **kwargs):
		my_thread = threading.Thread(target=my_func, args=args, kwargs=kwargs)
		my_thread.start()
	return wrapper

z = input("> ")

if 'поставь' in z and 'будильник' in z or 'установи' in z and 'будильник' in z or 'будильник' in z and 'на' in z:
	@thread
	def Alarm(t1, t2):
		while t1 != t2:
			time.sleep(1)
		print("Проснись!!!")
	def time_to(text):
		datex = re.findall(r'\d{2}[.-:]\d{2}',text)
		if datex:
			date = datex[0].replace('-','').replace('.','').replace(':','')
			whattime = date
		return f"{whattime}"
	def what_time():
		time_list = time.localtime()
		hours = time_list[3]
		minut = time_list[4]
		return f"{hours}{minut}"
	print("Будильник установлен!")
	Alarm(time_to(z), what_time())
  • Вопрос задан
  • 639 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Он выведет "Проснись!!!", если установить будильник на текущее время (т.е. чтобы он сработал сразу). А все потому, что надо в каждой итерации заново узнавать текущее время через what_time(), вместо сравнения с переменной t2

def Alarm(t1, t2):
    while t1 != what_time():
      time.sleep(1)  
    print("Проснись!!!")


И еще: хранить время в строках и все время сравнивать их не самое лучшее решение. Гораздо быстрее и удобнее хранить и сравнивать время как число.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы