Python Lo She Magic Square

时间:2017-04-27 17:47:04

标签: python

首先,如果我的格式不正确,我想道歉。这是我在这个网站上的第一篇文章。我已经查看过有关此内容的其他帖子,但似乎没有一个符合我的代码需要输出的方式。我的代码必须不仅仅是说广场是一个魔方。我必须显示一个随机数为1-9的3x3表,并且它们必须在所有方面都等于15。目前我正在尝试设置我的表并将其与我的其余代码相关联,这将决定广场是什么。目前我在设置表时遇到问题,而不是3x3,它显示为6x3。再次,我为没有正确格式化我的帖子而道歉。

def main(): #Parent Function

    import random
#****************************************************



    square_1 = random.randint(1, 9)
    square_2 = random.randint(1, 9) 
    square_3 = random.randint(1, 9)
    square_4 = random.randint(1, 9) 
    square_5 = random.randint(1, 9)
    square_6 = random.randint(1, 9) 
    square_7 = random.randint(1, 9)
    square_8 = random.randint(1, 9)
    square_9 = random.randint(1, 9)

    Grid_1 = [square_1 ,'\t', square_2 ,'\t', square_3]
    Grid_2 = [square_4 ,'\t', square_5 ,'\t', square_6]
    Grid_3 = [square_7 ,'\t', square_8 ,'\t', square_9]

    for i in range(1):
        print (','.join(str(i) for i in Grid_1))
    for i in range(2):
        print (','.join(str(i) for i in Grid_2))
    for i in range(3):
        print (','.join(str(i) for i in Grid_3))

main()

2 个答案:

答案 0 :(得分:1)

<强>分析

您的代码完全按照您的要求执行操作:打印第一行一次,第二行打印两次,第三行打印3次。另请注意,您使用变量 i 作为循环索引,但 mis 再次将其用作print语句中的索引。

立即修复

根本不要使用这些循环:每行打印一次:

Grid_1 = [square_1 ,'\t', square_2 ,'\t', square_3]
Grid_2 = [square_4 ,'\t', square_5 ,'\t', square_6]
Grid_3 = [square_7 ,'\t', square_8 ,'\t', square_9]

print (','.join(str(i) for i in Grid_1))
print (','.join(str(i) for i in Grid_2))
print (','.join(str(i) for i in Grid_3))

总体维修

将您的电路板开发为3x3嵌套列表(将其视为二维矩阵)。看到答案Ajax1234发布了一个很好的方法来处理它。使用此组织,您可以轻松地通过行或列迭代(运行 for 循环),例如

for row in range(3):
    if sum([board[row][col] for col in range(3)]) != 15:
        ... board failed

<强>算法

你可能会注意到,检测方块的问题可以采取一些捷径:只有一个 Lo She魔方形式;所有这些都是原始的旋转/反射。如果您愿意,可以快速检查: 5 必须位于中心,偶数必须在拐角处。必须出现所有9个数字。一旦你保证了这些,你必须做的事情只有少量的15次检查 - 我将把这个代数留给学生。

答案 1 :(得分:0)

一种简单的方法是通过列表理解:

import random
the_board = [[random.randint(1, 9) for i in range(3)] for b in range(3)]

现在将您的电路板初始化为具有随机值的3x3矩阵。