Всякий раз, когда вы хотите использовать переменные переменные, вероятно, лучше использовать словарь. Поэтому вместо записи
$foo = "bar"
$$foo = "baz"
вы пишете
mydict = {}
foo = "bar"
mydict[foo] = "baz"
Таким образом, вы не будете случайно перезаписывать ранее существовавшие переменные (что является аспектом безопасности), и вы можете иметь разные " Пространства имен». [/ д2]
Используя преимущества сравнения объектов bool
и tuple
, это легко записать как
(current_section=="PM",current_hour%12,current_minute)<(due_section=="PM",due_hour%12,due_minute)
. Конечно, канонизация числом минут с полуночи является более общей: 111]
... который можно сделать функцией, которая будет применяться любое количество раз.
Сначала вы хотите проверить «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)
Если
BLOCKQUOTE>current_section < due_section
истинно, оно игнорирует второе утверждение.
Вот как вы делаете это без единого, если:
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