为何range(9)包含0,get_chess_square_color(0,8)却返回空值?
问题解析
你困惑的核心不是range的用法,而是函数里的条件判断写岔了!
先看原函数里的判断逻辑:if not (column and row in range(9)),这里的运算顺序是先判断column的布尔值(Python里0会被视为False),再判断row in range(9),然后把两个结果做逻辑与。当你传column=0时,column本身是False,所以整个column and row in range(9)的结果就是False,取反后变成True,函数直接返回空字符串,这就是那条断言能成立的原因。
range(9)确实包含0到8的所有整数,和你举的字符串索引用法没关系。你预期的逻辑应该是同时检查column和row都在合法范围内,所以正确的条件写法应该是:
if not (column in range(9) and row in range(9)):
另外还要提一句,原函数里column == row返回white的逻辑也不符合国际象棋棋盘的规则——正确的颜色判断应该是(column + row) % 2 == 0,这样相邻格子才会交替颜色。修正后的完整函数可以写成:
def get_chess_square_color(column, row): if not (column in range(9) and row in range(9)): return '' return 'white' if (column + row) % 2 == 0 else 'black'
内容的提问来源于stack exchange,提问作者Frizanon
相关产品推荐
相关产品推荐

