多条件布尔逻辑Python



我能得到关于Python中布尔条件逻辑的更好方法的提示吗?我试图基于CCD_ 1在CCD_;endtime以及其他布尔逻辑来检查作为日期时间工作日编号的current_day是周末还是工作日。

一个函数似乎最适合这个吗?任何提示都有助于我遇到这样的问题:如果WeekendsWeekdays都是False,则意味着事件被禁用,或者如果current_time不在starttime&current_time0事件也将被禁用,因此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

最新更新