关于“if 在编程中做了什么”这一通用术语已经有很多答案,所以让我为你编写代码。
def valid_day(day):
if day and day.isdigit():#if day
if 表示if 块的开始,并按照其他答案指出的那样工作。接下来是布尔表达式day and day.isdigit()。 and 是一个布尔运算符,它要求两个操作数(等式的两边,用外行的话来说)都是 True 才能评估为 True。在这种情况下,day 和 day.isdigit() 都必须评估为 True 才能运行 if 块。
在 Python 中,我们将事物视为“真”和“假”。用“Falsey”来定义“Truthy”更容易,因为后者的列表要短得多:
其他一切都是“真实的”。如果你输入while -1: print("This loops forever"),它实际上会永远循环。所有非零数字、所有非空容器(字符串、列表、字典、集合、元组等),任何未明确设置为False 或None 的内容都将评估为True。在这种情况下,代码会检查以确保day 不是None,因为如果是,那么day.isdigit() 将抛出AttributeError 并破坏代码。你可以自己试试:在 IDLE 中输入None.isdigit()。请注意,这可能不是最简单的实现,因为执行valid_day(31) 也会抛出AttributeError。 valid_day 需要一个字符串,即使它正在检查数字。
day = int(day)
if day > 0 and day <= 31:
return day
这实际上是重复代码,因为执行int(day) 确认day.isdigit()。如果这是您的代码,或许可以考虑使用 try: except 块,例如:
def valid_day(day):
try: int(day)
except ValueError as e:
return False #this means whatever you passed to it can't be converted
#into an integer: maybe a floating point string?
if day in range(1,32): return True
else: return False
这将使您避免检查您知道可能失败的所有内容的陷阱。相反,请检查以确保您的检查能够运行,并让您的程序处理您传递给它的任何内容。这也将允许您设计一个Day 类,该类包含比整数更多的信息,但仍将使用self.__int__(): return self.calendarday 返回其日历日,而valid_day(Day()) 将返回True。此外,当您应该返回 False 时,您当前的代码返回 None——正如我上面提到的,None 是 Falsey,所以在大多数情况下这会起作用(例如 if not valid_day: do_something_drastic())但在某些情况下你可能想直接处理布尔值。
好的,有话要给你。
TL;DR:if 启动 if 块,day and day.isdigit() 仅当 day 是包含整数的非空字符串时才为真,其余部分按照它所说的那样做。