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
相关产品推荐
相关产品推荐

