为何Python将不成立条件判定为True?row/col为0时异常排查
问题分析与解决建议
当row和col均为0时,conditions列表中第二个条件col >=3 and col <=9本应返回False,但实际被Python判定为True,添加col !=0也无法得到预期结果,可能的原因和排查方法如下:
可能的原因
- 变量值/类型不符:
row或col可能并非你预期的整数0,比如被意外赋值为字符串"0"、其他数值,或在代码执行到条件判断前被修改。 - 作用域冲突:如果
row/col是全局变量,可能在其他代码块被修改,导致当前判断时的值不是0。 - 测试场景错误:调用该代码时,可能实际传入的
row/col并非(0,0),或者测试逻辑有误。
排查与解决步骤
- 直接打印变量信息:在生成
conditions列表前,添加打印语句确认变量的实际值和类型:print(f"当前row值:{row},类型:{type(row)}") print(f"当前col值:{col},类型:{type(col)}") - 单独测试目标条件:把两个有问题的条件单独拎出来执行,看返回结果:
cond_row = row >= 0 and row <=9 cond_col = col >=3 and col <=9 print(f"行条件结果:{cond_row},列条件结果:{cond_col}") - 检查变量修改记录:查看当前代码块之前的逻辑,确认
row和col是否被重新赋值,比如循环、函数调用等操作是否改变了它们的值。 - 替换条件写法:可以把条件写得更明确,避免潜在的逻辑歧义,比如:
# 替换原条件 0 <= row <=9, 3 <= col <=9,
整理后的代码(修正HTML转义符号)
conditions = [ # 检查是否有空间放置长度为4的船 row >= 0 and row <= 9, # 问题所在 col >= 3 and col <= 9, # 这里也有问题 # 检查当前位置是否已有船 not (self.get_value(row, col).lower() == 'r' and\ self.get_value(row, col - 1).lower() == 'm' and\ self.get_value(row, col - 2).lower() == 'm' and\ self.get_value(row, col - 3).lower() == 'l'), not (self.get_value(row, col).lower() == 'r' and\ self.get_value(row, col - 1).lower() == 'm' and\ self.get_value(row, col - 2).lower() == 'l'), not (self.get_value(row, col).lower() == 'r' and\ self.get_value(row, col - 1).lower() == 'l'), not (self.get_value(row, col).lower() == 'c'), # 检查提示信息 self.get_hint(row, self.size) >= 4, self.get_hint(self.size, row) >= 1, self.get_hint(self.size, row - 1) >= 1, self.get_hint(self.size, row - 2) >= 1, self.get_hint(self.size, row - 3) >= 1, # 检查右侧是否有船 self.get_value(row - 1, col + 2).lower() != 'r', self.get_value(row, col + 2).lower() != 'r', self.get_value(row + 1, col + 2).lower() != 'r', # 检查上方是否为水域 self.get_value(row - 1, col + 1).lower() == 'w' or self.get_value(row - 1, col + 1) == '0' or self.get_value(row - 1, col + 1) == None, self.get_value(row - 1, col).lower() == 'w' or self.get_value(row - 1, col) == '0' or self.get_value(row - 1, col) == None, self.get_value(row - 1, col - 1).lower() == 'w' or self.get_value(row - 1, col - 1) == '0' or self.get_value(row - 1, col - 1) == None, self.get_value(row - 1, col - 2).lower() == 'w' or self.get_value(row - 1, col - 2) == '0' or self.get_value(row - 1, col - 2) == None, self.get_value(row - 1, col - 3).lower() == 'w' or self.get_value(row - 1, col - 3) == '0' or self.get_value(row - 1, col - 3) == None, self.get_value(row - 1, col - 4).lower() == 'w' or self.get_value(row - 1, col - 4) == '0' or self.get_value(row - 1, col - 4) == None, # 检查上方是否没有船 self.get_value(row - 2, col + 1).lower() != 't', self.get_value(row - 2, col).lower() != 't', self.get_value(row - 2, col - 1).lower() != 't', self.get_value(row - 2, col - 2).lower() != 't', self.get_value(row - 2, col - 3).lower() != 't', self.get_value(row - 2, col - 4).lower() != 't', # 检查下方是否为水域 self.get_value(row + 1, col + 1).lower() == 'w' or self.get_value(row + 1, col + 1) == '0' or self.get_value(row + 1, col + 1) == None, self.get_value(row + 1, col).lower() == 'w' or self.get_value(row + 1, col) == '0' or self.get_value(row + 1, col) == None, self.get_value(row + 1, col - 1).lower() == 'w' or self.get_value(row + 1, col - 1) == '0' or self.get_value(row + 1, col - 1) == None, self.get_value(row + 1, col - 2).lower() == 'w' or self.get_value(row + 1, col - 2) == '0' or self.get_value(row + 1, col - 2) == None, self.get_value(row + 1, col - 3).lower() == 'w' or self.get_value(row + 1, col - 3) == '0' or self.get_value(row + 1, col - 3) == None, self.get_value(row + 1, col - 4).lower() == 'w' or self.get_value(row + 1, col - 4) == '0' or self.get_value(row + 1, col - 4) == None, # 检查下方是否没有船 self.get_value(row + 2, col + 1).lower() != 'b', self.get_value(row + 2, col).lower() != 'b', self.get_value(row + 2, col - 1).lower() != 'b', self.get_value(row + 2, col - 2).lower() != 'b', self.get_value(row + 2, col - 3).lower() != 'b', self.get_value(row + 2, col - 4).lower() != 'b', # 检查左右两侧是否为水域 self.get_value(row, col - 4).lower() == 'w' or self.get_value(row, col - 4) == '0' or self.get_value(row, col - 4) == None, self.get_value(row, col + 1).lower() == 'w' or self.get_value(row, col + 1) == '0' or self.get_value(row, col + 1) == None, # 检查左侧是否没有船 self.get_value(row - 1, col - 5).lower() != 'l', self.get_value(row, col - 5).lower() != 'l', self.get_value(row + 1, col - 5).lower() != 'l', # 检查左侧位置的数值 self.get_value(row, col).lower() == '0' or self.get_value(row, col).lower() == 'r', self.get_value(row, col - 1).lower() == '0' or self.get_value(row, col - 1).lower() == 'm', self.get_value(row, col - 2).lower() == '0' or self.get_value(row, col - 2).lower() == 'm', self.get_value(row, col - 3).lower() == '0' or self.get_value(row, col - 3).lower() == 'l' ] return all(conditions)
内容的提问来源于stack exchange,提问作者Zeccc
相关产品推荐
相关产品推荐

