@yanelox

Почему не работает?

Сделал программу для смены обоев, которая меняет обои в зависимости от времени года и суток:

import datetime
import time
import ctypes

time_now = datetime.datetime.now().hour  
time_month = datetime.datetime.now().month

print(time_now)
print(time_month)

wallpaper_night = 'C:\\Users\\andriy\\Desktop\\wallpaper\\night.jpg'
wallpaper_obed = 'C:\\Users\\andriy\\Desktop\\wallpaper\\obed.jpg'
wallpaper_morning = 'C:\\Users\\andriy\\Desktop\\wallpaper\\morning.jpg'
wallpaper_evening = 'C:\\Users\\andriy\\Desktop\\wallpaper\\late_evening.jpg'

while True:

	time_now = datetime.datetime.now().hour  

	if time_month == 12 or 1 or 2:		#зима														
			
		if  17 <= time_now <= 7:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_night, 0) #смена обоев
		if  12 <= time_now <= 13:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_obed, 0)
		if  8 <= time_now <= 9:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_morning, 0)
		if  14 <= time_now <= 16:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_evening, 0)

	if time_month == 3 or 4 or 5:		#весна											
		
		if  21 <= time_now <= 5:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_night, 0)
		if  12 <= time_now <= 17:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_obed, 0)
		if  6 <= time_now <= 12:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_morning, 0)
		if  18 <= time_now <= 20:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_evening, 0)

	if time_month == 6 or 7 or 8:		#лето
		
		if  21 <= time_now <= 4:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_night, 0)
		if  13 <= time_now <= 17:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_obed, 0)
		if  5 <= time_now <= 12:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_morning, 0)
		if  18 <= time_now <= 20:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_evening, 0)

	if time_month == 9 or 10 or 11:	    #осень
		if  17 <= time_now <= 6:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_night, 0)
		if  11 <= time_now <= 13:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_obed, 0)
		if  7 <= time_now <= 10:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_morning, 0)
		if  14 <= time_now <= 16:
			ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_evening, 0)
	
	time.sleep(1800)

Если попробовать сделать то же самое без if, то все работает. Если что, у меня windows x64.
  • Вопрос задан
  • 213 просмотров
Решения вопроса 3
MinTnt
@MinTnt
Условия проверки неправильно поставлены
if time_month == 9 or 10 or 11: можно сказать проверяет значение bool каждого элемента на соответствие True.
Т.е. это можно записать как:
if bool(time_month == 9) or bool(10) or bool(11):
А так как число, если оно не равняется 0, имеет значение bool автоматически True, имеем:
if bool(time_month == 9) or True or True:
Т.е., каждое из 4рёх общих условий выполняется всегда и в цикле

Лучше уже записывать так
if time_month in [9, 10, 11]:

Update: мне на мысль сошла идея запихнуть весь код выше в однострочный код. И что же я скажу.. мне это удалось) Для питонистов код ниже прочитать наверное адом будет.
import datetime
import time
import ctypes

while True: [[[[[[[ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['night'], 0) if time_now >= 17 or time_now <= 7 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['obed'], 0) if 12 <= time_now <= 13 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['morning'], 0) if 8 <= time_now <= 9 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['evening'], 0) if 14 <= time_now <= 16 else []] if time_month in [1,2,12] else [ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['night'], 0)  if time_now >= 21 or time_now <= 5 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['obed'], 0) if 12 <= time_now <= 17 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['morning'], 0) if 6 <= time_now <= 12 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['evening'], 0) if 18 <= time_now <= 20 else []] if time_month in [3, 4, 5] else [ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['night'], 0)  if time_now >= 21 or time_now <= 4 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['obed'], 0) if 13 <= time_now <= 17 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['morning'], 0) if 5 <= time_now <= 12 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['evening'], 0) if 18 <= time_now <= 20 else []] if time_month in [6, 7, 8] else [ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['night'], 0)  if time_now >= 17 or time_now <= 6 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['obed'], 0) if 11 <= time_now <= 13 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['morning'], 0) if 7 <= time_now <= 10 else ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper['evening'], 0) if 14 <= time_now <= 16 else []] if time_month in [9, 10, 11] else [], time.sleep(1800)] for time_month in [datetime.datetime.now().month]] for time_now in [datetime.datetime.now().hour]] for wallpaper in [{'night': wallpaper_place+'night.jpg', 'obed': wallpaper_place+'obed.jpg', 'morning': wallpaper_place+'morning.jpg', 'evening': wallpaper_place+'late_evening.jpg'}]]] for wallpaper_place in ['C:\\Users\\andriy\\Desktop\\wallpaper\\']]
Ответ написан
if time_month == 12 or 1 or 2:
или что 1 или что 2?
if time_month == 12 or time_month == 1 or time_month == 2:
Ответ написан
Комментировать
samodum
@samodum
Какой вопрос - такой и ответ
у тебя как минимум не работают эти условия:
if 21 <= time_now <= 5:

if 17 <= time_now <= 6:

и т.д.

А это вообще бред:

if time_month == 12 or 1 or 2:
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alexbprofit
Junior SE
if time_month == 12 or 1 or 2:		#зима														
      
    if  17 <= time_now <= 7:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_night, 0) #смена обоев
    elif  12 <= time_now <= 13:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_obed, 0)
    elif  8 <= time_now <= 9:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_morning, 0)
    elif  14 <= time_now <= 16:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_evening, 0)

  elif time_month == 3 or 4 or 5:		#весна											
    
    if  21 <= time_now <= 5:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_night, 0)
    elif  12 <= time_now <= 17:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_obed, 0)
    elif  6 <= time_now <= 12:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_morning, 0)
    elif  18 <= time_now <= 20:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_evening, 0)

  elif time_month == 6 or 7 or 8:		#лето
    
    if  21 <= time_now <= 4:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_night, 0)
    elif  13 <= time_now <= 17:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_obed, 0)
    elif  5 <= time_now <= 12:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_morning, 0)
    elif  18 <= time_now <= 20:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_evening, 0)

  elif time_month == 9 or 10 or 11:	    #осень
    if  17 <= time_now <= 6:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_night, 0)
    elif  11 <= time_now <= 13:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_obed, 0)
    elif  7 <= time_now <= 10:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_morning, 0)
    elif  14 <= time_now <= 16:
      ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_evening, 0)


Как минимум так
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект