返回顶部
首页 > 资讯 > 后端开发 > Python >使用python怎么还原三阶魔方
  • 253
分享到

使用python怎么还原三阶魔方

2023-06-14 22:06:23 253人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这期内容当中小编将会给大家带来有关使用python怎么还原三阶魔方,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整型)、l

这期内容当中小编将会给大家带来有关使用python怎么还原三阶魔方,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Python的数据类型有哪些?

python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2.字符串,分别是str类型和unicode类型。3.布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。4.列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5. 元组,元组用”()”标识,内部元素用逗号隔开。6. 字典,字典是一种键值对的集合。7. 集合,集合是一个无序的、不重复的数据组合。

# 创建六个面,放在faces列表里,顺序为上(0),下(1),左(2),右(3),前(4),后(5)faces = [np.zeros((3, 3))]for i in range(1, 6):    faces.append(np.ones((3, 3)) + faces[i - 1])

使用python怎么还原三阶魔方

每一个面的 顺时针 和 逆时针 旋转由函数 clockwise() 和 antiClockwise() 实现

t = np.array([[0, 0, 1],              [0, 1, 0],              [1, 0, 0]])# 该面顺时针旋转 90 度def clockwise(face):    face = face.transpose().dot(t)    return face# 该面逆时针旋转 90 度def antiClockwise(face):    face = face.dot(t).transpose()    return face

A.transpose() 方法是实现 A 矩阵的转置

A.dot(B) 方法是实现 A乘以矩阵B

通过计算,上述方法可以实现矩阵顺时针或者逆时针旋转的效果

在这里以左面的顺时针旋转 90°为例,其它旋转方式可以类比

def L(FACES):    FACES[2] = clockwise(FACES[2])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = clockwise(FACES_new[4]), clockwise(FACES_new[1]), antiClockwise(FACES_new[5]), clockwise(FACES_new[0])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    e[0], f[0], g[0], h[0] = d[0], a[0], b[0], c[0]    FACES[4], FACES[1], FACES[5], FACES[0] = antiClockwise(e), antiClockwise(f), clockwise(g), antiClockwise(h)

直接调用函数将左面(第2面)顺时针旋转 90°

FACES[2] = clockwise(FACES[2])

这里采用深度复制,使用 cp.deepcopy() 的方法,避免直接使用等号 ‘=' 导致不同的变量指向同一个值。这时,【e、f、g、h】和【a、b、c、d】代表魔方的

【正面、底面顺时针旋转90°、背面逆时针旋转90°、上面顺时针旋转90°】

a, b, c, d = clockwise(FACES_new[4]), clockwise(FACES_new[1]), antiClockwise(FACES_new[5]), clockwise(FACES_new[0])

旋转的目的是:

在左面旋转的过程中,左面会影响到其它四个面,但对其它四个面的影响是不同的。例如正面、底面和上面被影响的是第一列,而背面被影响的是第三列。我们为了使各面统一起来,方便数值的改变,我们选择将正、底、上面顺时针旋转90°,将背面逆时针旋转90°。这时,我们只需按顺序交换每一面的第一行,最后再逆时针或顺时针转回来即可。

使用python怎么还原三阶魔方

按顺序交换:正面第一行传递到底面第一行

上面第一行传递到正面第一行

背面第一行传递到上面第一行

底面第一行传递到背面第一行

e[0], f[0], g[0], h[0] = d[0], a[0], b[0], c[0]

最后再依次根据上述操作逆旋转回去:

FACES[4], FACES[1], FACES[5], FACES[0] = antiClockwise(e), antiClockwise(f), clockwise(g), antiClockwise(h)

代码

import numpy as npimport copy as cp# 创建六个面,放在faces列表里,顺序为上(0),下(1),左(2),右(3),前(4),后(5)faces = [np.zeros((3, 3))]for i in range(1, 6):    faces.append(np.ones((3, 3)) + faces[i - 1])t = np.array([[0, 0, 1],              [0, 1, 0],              [1, 0, 0]])# 该面顺时针旋转 90 度def clockwise(face):    face = face.transpose().dot(t)    return face# 该面逆时针旋转 90 度def antiClockwise(face):    face = face.dot(t).transpose()    return facedef U(FACES):    FACES[0] = clockwise(FACES[0])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]    FACES[4][0], FACES[2][0], FACES[5][0], FACES[3][0] = d[0], a[0], b[0], c[0]def _U(FACES):    FACES[0] = antiClockwise(FACES[0])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]    FACES[4][0], FACES[2][0], FACES[5][0], FACES[3][0] = b[0], c[0], d[0], a[0]def U2(FACES):    for i in range(2):        U(FACES)    '''    FACES[0] = clockwise(clockwise(FACES[0]))    FACES_new = cp.deepcopy(FACES)    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]    FACES[4][0], FACES[2][0], FACES[5][0], FACES[3][0] = c[0], d[0], a[0], b[0]    '''def D(FACES):    FACES[1] = clockwise(FACES[1])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]    FACES[4][2], FACES[2][2], FACES[5][2], FACES[3][2] = b[2], c[2], d[2], a[2]def _D(FACES):    FACES[1] = antiClockwise(FACES[1])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]    FACES[4][2], FACES[2][2], FACES[5][2], FACES[3][2] = d[2], a[2], b[2], c[2]def D2(FACES):    for i in range(2):        D(FACES)    '''    FACES[1] = clockwise(clockwise(FACES[1]))    FACES_new = cp.deepcopy(FACES)    a, b, c, d = FACES_new[4], FACES_new[2], FACES_new[5], FACES_new[3]    FACES[4][2], FACES[2][2], FACES[5][2], FACES[3][2] = c[2], d[2], a[2], b[2]    '''def L(FACES):    FACES[2] = clockwise(FACES[2])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = clockwise(FACES_new[4]), clockwise(FACES_new[1]), antiClockwise(FACES_new[5]), clockwise(FACES_new[0])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    e[0], f[0], g[0], h[0] = d[0], a[0], b[0], c[0]    FACES[4], FACES[1], FACES[5], FACES[0] = antiClockwise(e), antiClockwise(f), clockwise(g), antiClockwise(h)def _L(FACES):    FACES[2] = antiClockwise(FACES[2])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = clockwise(FACES_new[4]), clockwise(FACES_new[1]), antiClockwise(FACES_new[5]), clockwise(FACES_new[0])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    e[0], f[0], g[0], h[0] = b[0], c[0], d[0], a[0]    FACES[4], FACES[1], FACES[5], FACES[0] = antiClockwise(e), antiClockwise(f), clockwise(g), antiClockwise(h)def L2(FACES):    for i in range(2):        L(FACES)# 上(0),下(1),左(2),右(3),前(4),后(5)def R(FACES):    FACES[3] = clockwise(FACES[3])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = antiClockwise(FACES_new[4]), antiClockwise(FACES_new[1]), clockwise(FACES_new[5]), antiClockwise(        FACES_new[0])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    g[0], f[0], e[0], h[0] = d[0], c[0], b[0], a[0]    FACES[4], FACES[1], FACES[5], FACES[0] = clockwise(e), clockwise(f), antiClockwise(g), clockwise(h)def _R(FACES):    FACES[3] = antiClockwise(FACES[3])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = antiClockwise(FACES_new[4]), antiClockwise(FACES_new[1]), clockwise(FACES_new[5]), antiClockwise(        FACES_new[0])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    f[0], g[0], h[0], e[0] = a[0], b[0], c[0], d[0]    FACES[4], FACES[1], FACES[5], FACES[0] = clockwise(e), clockwise(f), antiClockwise(g), clockwise(h)def R2(FACES):    for i in range(2):        R(FACES)def F(FACES):    FACES[4] = clockwise(FACES[4])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = clockwise(clockwise(FACES_new[0])), FACES_new[1], antiClockwise(FACES_new[2]), clockwise(FACES_new[3])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    e[0], g[0], f[0], h[0] = c[0], b[0], d[0], a[0]    FACES[0], FACES[1], FACES[2], FACES[3] = clockwise(clockwise(e)), f, clockwise(g), antiClockwise(h)def _F(FACES):    FACES[4] = antiClockwise(FACES[4])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = clockwise(clockwise(FACES_new[0])), FACES_new[1], antiClockwise(FACES_new[2]), clockwise(FACES_new[3])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    g[0], f[0], h[0], e[0] = a[0], c[0], b[0], d[0]    FACES[0], FACES[1], FACES[2], FACES[3] = clockwise(clockwise(e)), f, clockwise(g), antiClockwise(h)def F2(FACES):    for _ in range(2):        F(FACES)# 上(0),下(1),左(2),右(3),前(4),后(5)def B(FACES):    FACES[5] = clockwise(FACES[5])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = FACES_new[0], clockwise(clockwise(FACES_new[1])), clockwise(FACES_new[2]), antiClockwise(FACES_new[3])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    g[0], f[0], h[0], e[0] = a[0], c[0], b[0], d[0]    FACES[0], FACES[1], FACES[2], FACES[3] = e, clockwise(clockwise(f)), antiClockwise(g), clockwise(h)def _B(FACES):    FACES[5] = antiClockwise(FACES[5])    FACES_new = cp.deepcopy(FACES)    a, b, c, d = FACES_new[0], clockwise(clockwise(FACES_new[1])), clockwise(FACES_new[2]), antiClockwise(FACES_new[3])    e, f, g, h = cp.deepcopy(a), cp.deepcopy(b), cp.deepcopy(c), cp.deepcopy(d)    e[0], g[0], f[0], h[0] = c[0], b[0], d[0], a[0]    FACES[0], FACES[1], FACES[2], FACES[3] = e, clockwise(clockwise(f)), antiClockwise(g), clockwise(h)def B2(FACES):    for i in range(2):        B(FACES)'''                          |************|                          |*U1**U2**U3*|                          |************|                          |*U4**U5**U6*|                          |************|                          |*U7**U8**U9*|                          |************|              ************|************|************|************|              *L1**L2**L3*|*F1**F2**F3*|*R1**R2**R3*|*B1**B2**B3*|              ************|************|************|************|              *L4**L5**L6*|*F4**F5**F6*|*R4**R5**R6*|*B4**B5**B6*|              ************|************|************|************|              *L7**L8**L9*|*F7**F8**F9*|*R7**R8**R9*|*B7**B8**B9*|              ************|************|************|************|                          |************|                          |*D1**D2**D3*|                          |************|                          |*D4**D5**D6*|                          |************|                          |*D7**D8**D9*|                          |************|'''def toString(FACES):    print()    for i in range(3):        print("     ", int(FACES[0][i][0]), int(FACES[0][i][1]), int(FACES[0][i][2]))    for i in range(3):        print(int(FACES[2][i][0]), int(FACES[2][i][1]), int(FACES[2][i][2]), end=" ")        print(int(FACES[4][i][0]), int(FACES[4][i][1]), int(FACES[4][i][2]), end=" ")        print(int(FACES[3][i][0]), int(FACES[3][i][1]), int(FACES[3][i][2]), end=" ")        print(int(FACES[5][i][0]), int(FACES[5][i][1]), int(FACES[5][i][2]))    for i in range(3):        print("     ", int(FACES[1][i][0]), int(FACES[1][i][1]), int(FACES[1][i][2]))    print()def moves(FACES, lst):    for x in lst:        if x == 'U':            U(faces)        elif x == 'u':            _U(faces)        elif x == 'D':            D(faces)        elif x == 'd':            _D(faces)        elif x == 'L':            L(faces)        elif x == 'l':            _L(faces)        elif x == 'R':            R(faces)        elif x == 'r':            _R(faces)        elif x == 'F':            F(faces)        elif x == 'f':            _F(faces)        elif x == 'B':            B(faces)        elif x == 'b':            _B(faces)lst = input("请输入步骤:")moves(faces, lst)print("执行后的魔方为")toString(faces)reverse = ''.join(map(chr, map(lambda x: ord(x) ^ 32, lst)))[::-1]moves(faces, reverse)print("魔方恢复步骤:", reverse)toString(faces)

示例

请输入步骤:UBLDFRULFDRULBGBVFDRLLBFLLDSSDBVDJFRUDLRFBDLFBbdj执行后的魔方为      2 5 3      5 0 2      5 0 55 2 3 1 2 1 2 4 0 4 0 01 2 3 1 4 5 1 3 1 4 5 22 5 2 4 4 3 1 0 5 3 4 4      1 0 4      3 1 3      0 3 0魔方恢复步骤: JDBbfldbfrldurfjdvbdssdllfbllrdfvbgblurdflurfdlbu      0 0 0      0 0 0      0 0 02 2 2 4 4 4 3 3 3 5 5 52 2 2 4 4 4 3 3 3 5 5 52 2 2 4 4 4 3 3 3 5 5 5      1 1 1      1 1 1      1 1 1Process finished with exit code 0

上述就是小编为大家分享的使用python怎么还原三阶魔方了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网Python频道。

--结束END--

本文标题: 使用python怎么还原三阶魔方

本文链接: https://lsjlt.com/news/275281.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用python怎么还原三阶魔方
    这期内容当中小编将会给大家带来有关使用python怎么还原三阶魔方,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lo...
    99+
    2023-06-14
  • python实现三阶魔方还原的示例代码
    思路 复原魔方困难问题的分解: ​ 1、用合适的数据结构表示出三阶魔方的六个面以及每一面的颜色 ​ 2、每一次不同旋转操作的实现 ​ 3、复原时如何判断当前魔方应该使用哪一种公式 ...
    99+
    2022-06-02
    python 三阶魔方还原 python 三阶魔方
  • 使用Python怎么模拟一个n阶魔方
    今天就跟大家聊聊有关使用Python怎么模拟一个n阶魔方,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。import cv2import numpy as...
    99+
    2023-06-14
  • 用Python简陋模拟n阶魔方
    目录一、前言二、效果三、代码一、前言 终于整完了毕业论文,忙里偷闲半小时摸了个魔方模拟程序,支持模拟任意阶魔方,自动打乱,输入指令旋转。显示方面不会弄3D的,用opencv整了个展开...
    99+
    2024-04-02
  • python魔法方法 __ slots __怎么使用
    这篇文章主要讲解了“python魔法方法 __ slots __怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python魔法方法 __&nb...
    99+
    2023-07-05
  • win7还原功能怎么使用
    本文小编为大家详细介绍“win7还原功能怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“win7还原功能怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。右键点击桌面上的【计算机】图标,选择“属性”,...
    99+
    2023-06-28
  • 怎么使用mysqldump还原数据库
    要使用mysqldump还原数据库,需要按照以下步骤进行操作: 打开命令行界面,输入以下命令来还原数据库: mysql -u 用...
    99+
    2024-04-12
    mysqldump 数据库
  • python如何使用魔术方法
    这篇文章主要为大家展示了“python如何使用魔术方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用魔术方法”这篇文章吧。魔术方法魔术方法可...
    99+
    2024-04-02
  • Python魔法方法如何使用
    这篇“Python魔法方法如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python魔法方法如何使用”文章吧。pyt...
    99+
    2023-07-04
  • Python魔法函数missing怎么使用
    这篇文章主要介绍了Python魔法函数missing怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python魔法函数missing怎么使用文章都会有所收获,下面我们一起来看看吧。1、有点价值的__mi...
    99+
    2023-06-29
  • Python第三方库gTTs/pyttsx3/speech怎么使用
    Python文字转语音(调研&成品函数)由于项目需要, 我需要将文字转换为语音, 那么第一步就要进行调研什么是语音合成技术语音合成(text to speech),简称TTS。是将文字转化为语音的一种技术,是让计算机模拟人类的嘴巴,...
    99+
    2023-05-14
    Python speech
  • Python高阶函数map()怎么使用
    这篇文章主要介绍了Python高阶函数map()怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python高阶函数map()怎么使用文章都会有所收获,下面我们一起来看看吧。简介:格式:map(funct...
    99+
    2023-07-05
  • 利用Python还原方阵游戏详解
    目录一、前言二、游戏规则三、numpy模块四、第一步:大循环and获取规格五、第二步:初始化棋盘六、第三步:标注矩阵功能(难)七、第四步:查看标注矩阵功能八、第五步:胜利侦测九、第六...
    99+
    2023-01-04
    Python还原方阵游戏 Python方阵游戏 Python游戏
  • Python使用Matplotlib绘制三维折线图(进阶篇)
    1.0简介: 三维图像技术是现在国际最先进的计算机展示技术之一,任何普通电脑只需要安装一个插件,就可以在网络浏览器中呈现三维的产品,不但逼真,而且可以动态展示产品的组合过程,特别适合远程浏览。 立体图视觉上层次分明色彩鲜艳,具有很强的视觉冲...
    99+
    2023-09-29
    python 开发语言
  • Win8怎么系统还原 Win8系统还原的方法介绍
    本文与大家介绍下Win8怎么系统还原。很多小白朋友刚学会备份就又不知道怎么以后还原了,主要是找到Win8系统还原在哪里这个入口在哪。其实不管是是系统备份还是我们还原,我们都可以在控制面板中找到的,以下全面介...
    99+
    2022-06-04
    系统还原 方法
  • python dict实现的魔法方法怎么用
    这篇文章主要介绍“python dict实现的魔法方法怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python dict实现的魔法方法怎么用”文章能帮助大家解决问题。方法说明__or__和_...
    99+
    2023-06-30
  • Python标准库及第三方库怎么使用
    本篇内容介绍了“Python标准库及第三方库怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、time模块1.time模块简介tim...
    99+
    2023-07-06
  • 详解Python中魔法方法的使用
    目录迭代器的大小元编程自省(introspection)魔法属性创建自己魔法方法python中的魔法方法是一些可以让你对类添加“魔法”的特殊方法,它们经常是两...
    99+
    2022-12-19
    Python魔法方法使用 Python魔法方法
  • python高阶函数使用的方法
    今天小编给大家分享一下python高阶函数使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、高阶函数函数定义pyt...
    99+
    2023-07-02
  • vscode怎么使用第三方库
    在VSCode中使用第三方库的步骤如下: 在项目文件夹下创建一个 package.json 文件,可以通过命令 npm init...
    99+
    2024-04-09
    vscode
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作