Python嵌套for循环中数组无法正确匹配:国际象棋方格颜色判断问题
问题根因
- 条件判断逻辑错误:代码中使用
x == partall_svart/x == partall_hvit对比单个字符和列表,永远返回False,需要改用in关键字判断字符是否属于列表 - 冗余循环:
bokstav是取的输入的第一个字符(单个字母)、tall是输入的第二个字符转的数字,双层for循环完全没有必要,属于无效逻辑 - 重复判断:两组if/elif分支可以合并简化,减少冗余代码
修复后代码
# 输入棋盘位置,原提示语为挪威语:棋子在哪个位置? pos = input(f'Hvilken posisjon står brikken på? ') bokstav = pos[0].lower() # 兼容用户输入大写字母的情况 tall = int(pos[1]) partall_svart = ['b','d','f','h'] partall_hvit = ['a','c','e','g'] if bokstav in partall_svart: if tall % 2 == 0: print(f'Posisjon: {bokstav}{tall}\nSvart') else: print(f'Posisjon: {bokstav}{tall}\nHvit') else: # 属于partall_hvit的情况 if tall % 2 == 0: print(f'Posisjon: {bokstav}{tall}\nHvit') else: print(f'Posisjon: {bokstav}{tall}\nSvart')
可选优化(增加输入合法性校验)
如果需要避免用户输入非法值(比如z9这种不存在的棋盘位置),可以增加校验逻辑:
pos = input(f'Hvilken posisjon står brikken på? ').strip() # 校验输入格式 if len(pos) != 2: print("输入错误,请输入类似a1、h8的合法棋盘位置") else: bokstav = pos[0].lower() if bokstav not in ['a','b','c','d','e','f','g','h']: print("输入错误,第一位必须是a-h之间的字母") elif not pos[1].isdigit() or int(pos[1]) not in range(1,9): print("输入错误,第二位必须是1-8之间的数字") else: tall = int(pos[1]) partall_svart = ['b','d','f','h'] res = "Svart" if (bokstav in partall_svart and tall%2 ==0) or (bokstav not in partall_svart and tall%2 ==1) else "Hvit" print(f'Posisjon: {bokstav}{tall}\n{res}')
内容的提问来源于stack exchange,提问作者needhelpwithcoding
相关产品推荐
相关产品推荐

