【发布时间】:2021-07-07 23:43:57
【问题描述】:
我能否获得有关 Python 中布尔条件逻辑的更好方法的提示?我正在尝试根据current_time 介于starttime 和endtime 之间以及其他布尔逻辑返回True 或False,以检查日期时间工作日编号的current_day 是周末还是工作日。
一个函数似乎最适合这个吗?任何提示都可以帮助我遇到一个问题,如果 Weekends 或 Weekdays 都是 False,这意味着该事件被禁用,或者如果 current_time 不在 starttime 和 endtime 之间,该事件也将被禁用,所以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
data1 似乎可以正常工作:
# True weekend/weekdays and on start/end times
condition_checker(data1,current_time,current_day)
返回
disabled is False
True
data2 似乎可以正常工作:
# True on Weekends and start/end times
condition_checker(data2,current_time,current_day)
返回
disabled is False
True
data3 似乎可以正常工作:
# 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
【问题讨论】:
-
我很难理解您真正想要什么。你能澄清一下
weekday_rules和weekend_rules应该做什么吗? -
请注意,您的
if ...条件似乎缺少括号。你的意思是(between_time and not disabled and weekday_rules) or (between_time and not disabled and weekend_rules)?如果是这样,(而 AFAIUweekday_rules只是not weekend_rules),这将归结为if (between_time and not disabled): return True; else: return False或return between_time and not disabled -
您的字典有“True”和“False”作为字符串。您的
disabled语句将这些与布尔值True和False进行比较。 -
@PranavHosangadi 我只是想验证当前的工作日数字是周末还是工作日,以及字典键是否也是 True。如果它们是 False,则返回 False
-
@not_speshal 有没有更好的方法来做到这一点?我意识到它的弦
标签: python