后悔来迟了0
后悔来迟了0
关注数: 0
粉丝数: 10
发帖数: 622
关注贴吧数: 0
刚刚开始自学python,这是用python写的任意阶幻方的代码 n = int(input('请输入幻方阶数:')) n_s = n if n % 2 == 1: # 判断接收的是不是奇数 n = n # 当检测到n是奇数时,等于他本身 elif n % 4 == 2: # 检测n是否为双偶数(4,8,12,16,20等等) n = int(n / 2) # 当检测到n是双偶数时,n等于他的一半 ls_A = [[0 for i in range(0, 1) for j in range(0, n)] for k in range(0, n)] # 根据所接收的阶数,新建列表 def jishu(): # 自定义奇数阶函数 x = 0 # x代表幻方横的坐标,x原始值为0 y = int((n-1)/2) # y代表幻方的列坐标,原始值为n-1)/2 for a in range(1 , n**2+1): # 进入循环,从1到n的平方逐一向列表添加 if x == 0 and y == int((n-1)/2) and ls_A[x][y] == 0: # 当进入原始坐标且原始坐标的初始值为0时 ls_A[x][y] = a # 原始坐标的值更改为a x -= 1 # x坐标向幻阵上方移动 y += 1 # y坐标向幻阵右方移动 continue # 第一个数值添加到幻方成功,退出第一次循环 elif x == -1 and y != n: # 当x=-1时,证明横已超出幻阵顶行 x = n - 1 # x超出顶行,x坐标回到幻阵的最后一行 ls_A[x][y] = a # 把a加入到幻阵 x -= 1 # x坐标向幻阵上方移动 y += 1 # y坐标向幻阵右方移动 continue elif y == n and x != -1: #当y=n时,幻阵列已超出幻阵 y = 0 # y坐标超出幻阵,坐标左边第一列 ls_A[x][y] = a x -= 1 y += 1 continue elif x == -1 and y == n : # 当x,y的坐标都出幻阵时 x = 1 y = n - 1 ls_A[x][y] = a x -= 1 y += 1 continue elif x != -1 and y != n: if ls_A[x][y] == 0: ls_A[x][y] = a x -= 1 y += 1 continue elif ls_A[x][y] != 0: x += 2 y -= 1 ls_A[x][y] = a x -= 1 y += 1 continue if n_s%2==1: jishu() for aabb in ls_A: print(aabb) elif n_s%4==2: jishu() ls_B = [[0 for i in range(0, 1) for j in range(0, n)] for k in range(0, n)] ls_C = [[0 for i in range(0, 1) for j in range(0, n)] for k in range(0, n)] ls_D = [[0 for i in range(0, 1) for j in range(0, n)] for k in range(0, n)] x = y = 0 k = (n_s - 2) / 4 for bbc in ls_A: for bcd in bbc: if (n - 1)/2 < y < (n - 1)/2 + k: ls_C[x][y] = 2 * n*n + bcd ls_B[x][y] = n * n + bcd else: ls_B[x][y] = 2 * n * n + bcd ls_C[x][y] = n * n + bcd if y < k and x != (n-1)/2 : ls_D[x][y] = bcd ls_A[x][y] = 3 *(n*n) + bcd elif x == (n-1)/2 and (n-1)/2 <= y < (n-1)/2 + k : ls_D[x][y] = bcd ls_A[x][y] = 3 *(n*n) + bcd else: ls_D[x][y] = 3 * (n * n) + bcd y += 1 if y == n_s/2: x += 1 y = 0 z = 0 for (ls_a , ls_b,ls_d,ls_c) in zip (ls_A,ls_B,ls_D,ls_C): ls_a.extend(ls_b) ls_d.extend(ls_c) ls_A.extend(ls_D) for kaka in ls_A: print(kaka) elif n_s%4==0: x1 = n - 1 y1 = n - 1 x2 = 0 y2 = 0 a = 0 b = 0 c = 1 for i in range(1, n_s ** 2 + 1): if c == 1 or c == 4: if a == 0 or a == 3: ls_A[x1][y1] = i a += 1 b += 1 y1 -= 1 y2 += 1 if a == 4: a = 0 elif a == 1 or a == 2: ls_A[x2][y2] = i a += 1 b += 1 y1 -= 1 y2 += 1 elif c == 2 or c == 3: if a == 0 or a == 3: ls_A[x2][y2] = i a += 1 b += 1 y1 -= 1 y2 += 1 if a == 4: a = 0 elif a == 1 or a == 2: ls_A[x1][y1] = i a += 1 b += 1 y1 -= 1 y2 += 1 if b == n_s: c += 1 b = 0 y1 = n - 1 y2 = 0 x1 -= 1 x2 += 1 if c == 5: b = 0 c = 1 for ls_a0 in ls_A: print(ls_a0)
1
下一页