是否有更好的方法使用if语句不编写此代码?
NameVirtualHost *:80
鉴于上述变量表示的当前时间和截止时间,请确定如果current_hour = 12
current_minute = 37
current_section = "PM"
due_hour = 9
due_minute = 0
due_section = "AM"
,current_hour
和current_minute
表示的时间早于表示的时间,则该分配是否合格由current_section
,due_hour
和due_minute
编写。我创建了它,但它并不总是有效:
due_section
答案 0 :(得分:0)
在没有以下情况的情况下,您会遇到以下情况:
from datetime import datetime
def to24(h: int, m: int, s: str) -> datetime:
m: str = str(h) + ':' + str(m) + " " + s;
return datetime.strptime(m, '%I:%M %p');
def is_valid(h1: int, m1: int, s1: str, h2: int, m2: int, s2: str) -> bool:
return to24(h1, m1, s1) <= to24(h2, m2, s2);
def main() -> int:
current_hour = 1;
current_minute = 0;
current_section = "AM";
due_hour = 12;
due_minute = 0;
due_section = "PM";
print(
is_valid(
current_hour,
current_minute,
current_section,
due_hour,
due_minute,
due_section,
)
);
return 0;
__name__ == "__main__" and main(); # See how this avoids `if` :D
答案 1 :(得分:0)
利用bool
和tuple
对象的比较优势,这很容易编写为
(current_section=="PM",current_hour%12,current_minute)<(due_section=="PM",due_hour%12,due_minute)
当然,从午夜开始规范化到几分钟通常是更普遍的:
s=(hour%12+12*(section=="PM"))*60+minute
…可以做成可以多次使用的功能。
答案 2 :(得分:-1)
首先,您要检查'AM'和'PM'
print(current_section < due_section)
然后您想将时间转换为分钟并进行比较
current_time = current_hour*60+current_minute
due_time = due_hour*60+due_minute
print(current_time < due_time)
合并其中两个:
print(current_section < due_section or current_time < due_time)
如果
current_section < due_section
为True,它将忽略第二条语句。