江湖散人 发表于 2021-6-25 22:31:11

字典嵌套问题

def isvalidchessboard(board):
    lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    for k in board.keys():
      if k in range(1, 9) and k in lst:
            return True
      else:
            return False


b = {'1h': 'bking', '6c': 'wqueen', '2g': 'bbisshop', '5h': 'bqueen', '3e': 'wking'}
s = isvalidchessboard(b)
print(s)


哪位前辈帮忙看一下,为啥我这运行结果返回的是False啊?不应该是True嘛

Twilight6 发表于 2021-6-25 22:43:42


因为你 k 属于字符串类型,而 range(1,9) 是生成 1~8 整数整型

这当然始终不成立,你把 range(1,9) 改成 '12345678' 即可

另外你这里使用直接使用 return ,会导致直接结束程序,后续的 for 循环就不会被遍历到,若你本意就是如此可以无视

建议 else 的 return 放到 for 循环外,否则若第一次不符合 if 条件,那么直接执行 else 导致 for 循环无意义了

参考代码:

def isvalidchessboard(board):
    lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    for k in board.keys():
      if k in '12345678' and k in lst:
            return True
    else:
      return False


b = {'1h': 'bking', '6c': 'wqueen', '2g': 'bbisshop', '5h': 'bqueen', '3e': 'wking'}
s = isvalidchessboard(b)
print(s)

江湖散人 发表于 2021-6-26 10:50:23

Twilight6 发表于 2021-6-25 22:43
因为你 k 属于字符串类型,而 range(1,9) 是生成 1~8 整数整型

这当然始终不成立,你把 range(1,9) 改 ...

谢谢,已经解决
页: [1]
查看完整版本: 字典嵌套问题