我能得到关于Python中布尔条件逻辑的更好方法的提示吗?我试图基于CCD_ 1在CCD_;endtime
以及其他布尔逻辑来检查作为日期时间工作日编号的current_day
是周末还是工作日。
一个函数似乎最适合这个吗?任何提示都有助于我遇到这样的问题:如果Weekends
或Weekdays
都是False
,则意味着事件被禁用,或者如果current_time
不在starttime
¤t_time
0事件也将被禁用,因此Return False
from datetime import datetime
now = datetime.now()
current_time = now.strftime("%H:%M")
print("Current Time is ", current_time)
# To Get the Week Number
current_day = datetime.today().weekday()
print("Current Weekday Number is ", current_day)
data1 = {'setpoint': '366', 'Weekdays': 'True', 'Weekends': 'True', 'starttime': '02:40', 'endtime': '22:40'}
data2 = {'setpoint': '366', 'Weekdays': 'False', 'Weekends': 'True', 'starttime': '02:40', 'endtime': '22:40'}
data3 = {'setpoint': '366', 'Weekdays': 'True', 'Weekends': 'False', 'starttime': '02:40', 'endtime': '03:40'}
data4 = {'setpoint': '366', 'Weekdays': 'False', 'Weekends': 'False', 'starttime': '02:40', 'endtime': '22:40'}
def condition_checker(data,current_time,current_day):
between_time = data['starttime'] <= current_time <= data['endtime']
#print("between_time", between_time)
disabled = data['Weekends'] == False and data['Weekdays'] == False
print("disabled is", disabled)
weekday_rules = current_day in [0,1,2,3,4]
#print("weekday_rules", weekday_rules)
weekend_rules = current_day in [5,6]
#print("weekend_rules", weekend_rules)
if between_time and not disabled and weekday_rules or between_time and not disabled and weekend_rules:
return True
else:
return False
数据1似乎工作正常:
# True weekend/weekdays and on start/end times
condition_checker(data1,current_time,current_day)
返回
disabled is False
True
数据2似乎工作正常:
# True on Weekends and start/end times
condition_checker(data2,current_time,current_day)
返回
disabled is False
True
数据3似乎工作正常:
# False on times
condition_checker(data3,current_time,current_day)
返回
disabled is False
False
这就是我的逻辑不起作用的地方,在disabled
上应该是错误的data4不工作
# False on disabled
condition_checker(data4,current_time,current_day)
返回
disabled is False
True
您正在将字符串与函数中的布尔值进行比较。我会将字典更改为包含布尔True
/False
,如下所示:
data1 = {'setpoint': '366', 'Weekdays': True, 'Weekends': True, 'starttime': '02:40', 'endtime': '22:40'}
data2 = {'setpoint': '366', 'Weekdays': False, 'Weekends': True, 'starttime': '02:40', 'endtime': '22:40'}
data3 = {'setpoint': '366', 'Weekdays': True, 'Weekends': False, 'starttime': '02:40', 'endtime': '03:40'}
data4 = {'setpoint': '366', 'Weekdays': False, 'Weekends': False, 'starttime': '02:40', 'endtime': '22:40'}
或者(不太可取,但也有效(,您可以更改函数以检查string
值:
def condition_checker(data,current_time,current_day):
between_time = data['starttime'] <= current_time <= data['endtime']
disabled = data['Weekends'] == "False" and data['Weekdays'] == "False"
print("disabled is", disabled)
weekday_rules = current_day in [0,1,2,3,4]
weekend_rules = current_day in [5,6]
if between_time and not disabled and weekday_rules or between_time and not disabled and weekend_rules:
return True
else:
return False