You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:18:01