【发布时间】:2020-05-15 02:05:43
【问题描述】:
PFB 程序。我们有一个条件块if curr > max_v or max_v == None:。这是一个错误
TypeError: '>' not supported between instances of 'int' and 'NoneType'
但是,如果我将条件更改为max_v == None or curr > max_v:,它就可以正常工作。这里有什么问题。请指教。
arr_ele = []
for arr_i in range(6):
arr_t = [int(arr_temp) for arr_temp in input().strip().split()]
arr_ele.append(arr_t)
length = len(arr_ele[0])
max_v = None
curr = 0
for i in range(length-2):
for j in range(length-2):
curr = arr_ele[i][j] + arr_ele[i][j+1] + arr_ele[i][j+2] + \
arr_ele[i+1][j+1] + \
arr_ele[i+2][j] + arr_ele[i+2][j+1] + arr_ele[i+2][j+2]
if curr > max_v or max_v == None:
max_v = curr
print(max_v)
【问题讨论】:
-
以相反的顺序写入以利用短路:
if max_v is None or curr > max_v:。 -
问题只是您无法将整数与
None进行比较。除非您知道列表的最小值是多少,否则None是初始化max_v的绝佳方式;您只需使用max_v is None正确检查它。 -
这能回答你的问题吗? Does Python evaluate if's conditions lazily?
-
关于
or的行为:"表达式x or y首先计算x;如果x为真,则返回其值;否则,计算y并返回结果值。” 请注意,仅当第一部分为假时才评估第二部分。 docs.python.org/3/reference/expressions.html#boolean-operations -
@kaya3 另外值得注意的是,
and运算符的作用正好相反。一旦返回一个条件False,表达式的其余部分就不会被计算。
标签: python if-statement