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

3x3幻方Python代码问题:循环验证及正确解展示实现求助

3x3幻方验证程序问题与修复

我编写了一段Python代码实现3x3表格功能,允许用户自行选择每行数字,之后程序验证输入是否正确。目前代码存在以下问题:

  • 需确保每行输入恰好3个数字
  • 当行、列、对角线和为15的验证条件不满足时,要终止流程并展示3x3幻方的正确解
  • 尝试用while循环解决但未成功,也不清楚如何同时满足列表长度为3且和为15的要求

原代码

rad1=[]
rad2=[]
rad3=[]          
while len(rad1)<3:  
    första_rad=int(input("Vad är sifror i första rad (vänster till höger)?"))
    rad1.append(första_rad)

while len(rad2)<3:
    andra_rad=int(input("Vad är sifror i andra rad (vänster till höger)?"))
    rad2.append(andra_rad)

while len(rad3)<3: 
    tredje_rad=int(input("Vad är sifror i tredje rad (vänster till höger)?"))
    rad3.append(tredje_rad)

diagonal_vänster=rad1[0]+rad2[1]+rad3[2] 
diagonal_höger=rad1[2]+rad2[1]+rad3[0] 

#sum of column from left to right

column1=rad1[0]+rad2[0]+rad3[0]
column2=rad1[1]+rad2[1]+rad3[1]
column3=rad1[2]+rad2[2]+rad3[2]


print(rad1)
print(rad2)
print(rad3)

#here it controls everything
if sum(rad1)!=15:
    print("första raden är fel")
    while len(rad1)
elif sum(rad2)!=15:
    print("andra raden är fel")
elif sum(rad3) != 15:
    print("tredje raden är fel")
elif diagonal_höger != 15:
    print("Diagonalen i höger är fel")
elif diagonal_vänster != 15:
    print("Diagonalen i vänster är fel")
elif column1!= 15:
    print("Det är fel med vänster column")
elif column2!= 15:
    print("Det är fel med mitt column")
elif column3!= 15:
    print("Det är fel med höger column")

修复后的代码

def get_valid_row(row_num):
    """获取符合要求的行:3个数字,和为15"""
    while True:
        row_input = input(f"Vad är sifror i {row_num} rad (vänster till höger)? 用空格分隔: ")
        try:
            row = list(map(int, row_input.split()))
            if len(row) != 3:
                print("每行必须输入3个数字,请重新输入")
                continue
            if sum(row) != 15:
                print(f"第{row_num}行的和不是15,请重新输入")
                continue
            return row
        except ValueError:
            print("请输入有效的整数,用空格分隔")

# 获取三行输入
rad1 = get_valid_row("första")
rad2 = get_valid_row("andra")
rad3 = get_valid_row("tredje")

# 验证所有条件
def is_magic_square(r1, r2, r3):
    # 验证行(输入时已确保,此处二次校验)
    if sum(r1) !=15 or sum(r2)!=15 or sum(r3)!=15:
        return False
    # 验证列
    col1 = r1[0]+r2[0]+r3[0]
    col2 = r1[1]+r2[1]+r3[1]
    col3 = r1[2]+r2[2]+r3[2]
    if col1!=15 or col2!=15 or col3!=15:
        return False
    # 验证对角线
    diag1 = r1[0]+r2[1]+r3[2]
    diag2 = r1[2]+r2[1]+r3[0]
    if diag1!=15 or diag2!=15:
        return False
    return True

# 打印用户输入的表格
print("\n你输入的表格:")
print(rad1)
print(rad2)
print(rad3)

# 验证并处理结果
if is_magic_square(rad1, rad2, rad3):
    print("\n恭喜!这是一个正确的3x3幻方")
else:
    print("\n输入不符合幻方要求,正确的3x3幻方如下:")
    correct_square = [[8,1,6], [3,5,7], [4,9,2]]
    for row in correct_square:
        print(row)

关键修复点

  • 封装行输入逻辑为get_valid_row函数,通过循环确保每行输入3个整数且和为15,解决原代码只检查长度不检查和的问题
  • 新增is_magic_square函数统一验证所有幻方条件(行、列、对角线)
  • 当验证不通过时,直接终止流程并展示标准3x3幻方的正确解
  • 优化输入方式,允许用户一次性输入一行的3个数字(用空格分隔),提升操作效率

内容的提问来源于stack exchange,提问作者ching_bing bong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:42:03