不使用IF语句的Python作业问题

时间:2019-03-23 21:01:06

标签: python

是否有更好的方法使用if语句编写此代码?

NameVirtualHost *:80

鉴于上述变量表示的当前时间和截止时间,请确定如果current_hour = 12 current_minute = 37 current_section = "PM" due_hour = 9 due_minute = 0 due_section = "AM" current_hourcurrent_minute表示的时间早于表示的时间,则该分配是否合格由current_sectiondue_hourdue_minute编写。我创建了它,但它并不总是有效:

due_section

3 个答案:

答案 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)

利用booltuple对象的比较优势,这很容易编写为

(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,它将忽略第二条语句。