Python密码器讲解

我们今天这一篇,就来讲解这一长串代码。

from PyQt5.QtWidgets import QWidget, QLabel, QComboBox, QApplication,QLineEdit,QPushButton
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt
import sys,os,shutil,sip

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.settings()

    def settings(self):
        self.combo = QComboBox(self)
        self.combo.addItem("")
        self.combo.addItem("摩尔码加密")
        self.combo.addItem("倒置加密")
        self.combo.move(150,10)
        self.combo.activated[str].connect(self.remember)

        self.say = QLabel(self)
        self.say.setText('               ')
        self.say.setFont(QFont('黑体',20))
        self.say.move(90,100)

        self.choice = QLabel(self)
        self.choice.setText('请选择加密方式:')
        self.choice.setFont(QFont('黑体',12))
        self.choice.move(15, 12.5)

        self.info = QLineEdit(self)
        self.info.setPlaceholderText('请输入加密内容')
        self.info.move(15,50)

        self.yes = QPushButton('确定',self)
        self.yes.move(200,150)
        self.yes.clicked.connect(self.yes_)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('密码器')
        self.show()

    def remember(self, text):
        self.unit = text

    def yes_(self):
        try:
            if self.unit == '摩尔码加密':
                dict1 = {'a': '.-', 'b': '-...', 'c': '-.-.', 'd': '-.', 'e': '.',
                        'f': '..-.', 'g': '--.', 'h': '....', 'i': '..', 'j': '.---',
                        'k': '-.-', 'l': '.-..', 'm': '--', 'n': '-.', 'o': '---',
                        'p': '.--.', 'q': '--.-', 'r': '.-.', 's': '...', 't': '-',
                        'u': '..-', 'v': '...-', 'w': '.--', 'x': '-..-', 'y': '-.--', 'z': '--..',
                        '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-',
                        '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.'}

                ls = list(self.info.text())

                keyword_ls = []
                for i in range(len(ls)):
                    keyword_ls.append(dict1[ls[i]])

                keyword = ' '.join(keyword_ls)

                if '生成密码目录' not in os.listdir('./'):
                    os.mkdir('生成密码目录')
                else:
                    shutil.rmtree('./生成密码目录')
                    os.mkdir('./生成密码目录')

                where = open('./摩尔码加密内容.txt', 'w')
                where.write(keyword)
                self.say.setText('录入成功')
                where.close()


            if self.unit == '倒置加密':
                ls = list(self.info.text())
                ls.reverse()

                if '生成密码目录' not in os.listdir('./'):
                    os.mkdir('生成密码目录')
                else:
                    shutil.rmtree('./生成密码目录')
                    os.mkdir('./生成密码目录')

                where = open('./生成密码目录/倒置加密内容.txt', 'w')
                where.writelines(ls)
                self.say.setText('录入成功')
                where.close()

        except:
            self.say.setText('录入失败')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

首先解包,你们可能看这个代码觉得很怪,没办法,复制过来就这样。大家可以修改一下。然后我们创建类这些的没问题吧。settings的那一段,有一个知识点,就是下拉选框。这个东西我在Gui教程里会说,所以这里大家就看一下吧。大概意思就是把你选择的东西记录下来,用QComboBox创建。朋友们可以先去学习一下,或者等到我出下拉选框的教程时再回头看看。

设置标签的没问题吧。至于为什么要空的,这个其实你可以改改,毕竟这只是一个框架。这个remeber函数就是记录你下拉选框的选择。因为下拉选框绑定后会把你选择的内容赋值到绑定代码的参数中。但是这个text又只能在这个方法中用,所以需要用self.来记录。其实这有更好的方法,不过我为了编的快一些,所以有些冗余。大家可以自行修改。呵呵

下面的yes_中,首先使用异常处理,因为这里面有打开文件,我不用with打开文件,是因为问题也有可能不出在文件打开,所以就用try+except。然后就是判断。

摩尔码加密里,首先有一个字典。表示摩尔码与字母数字的互换。
然后因为是每个字母/数字对应一串摩尔码。所以需要用list函数来转换,这样就是每一个字母/数字都为一项。大家不明白,可用print函数打印一下ls。

然后创建一个输入到文件里的列表(就是将字母/数字转换后的列表),循环的话大家自己分析(还是讲讲吧…):
首先,循环ls的长度,这个没问题吧。
然后给keyword_ls列表增加ls里的每一项对应的摩尔码。那该怎么增加呢?

ls[i]其实就是遍历列表,然后将ls[i]作为键,然后在dict1找到对应的值,也就是对应的摩尔码。最后加到keyword_ls的末尾。

然后将keyword_ls变为字符串,名字为keyword。其实可以用writelines写入列表(没试过,大家可以试试),但是我更喜欢转为字符串。可是在倒置加密的时候我就是写入列表(前后矛盾!!!)。不废话了,接下来是写入文件,这一段非常有用,我给大家复制过来:

if '生成密码目录' not in os.listdir('./'):
	os.mkdir('生成密码目录')
else:
	shutil.rmtree('./生成密码目录')
	os.mkdir('./生成密码目录')

这一段是覆盖文件夹,因为os的mkdir如果已有文件,就会报错,所以用这个就可以判断有没有某个名字的文件夹。当然,你用异常处理也行。不过我喜欢用这个。

然后是写入文件,这个没问题吧。

倒置加密其实就是列表的reverse功能,然后就是写入文件了。

然后如果报错,就处理为‘录入失败’。接着就有结果了。大家如果还有什么加密方法,可以自己加上去哟!

好了,今天的讲解就到这里了。大家有疑惑可以在评论区问我,当然最好加我QQ:3418772261。那么我们下次再见喽,拜拜!

发布了25 篇原创文章 · 获赞 80 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Persia_king/article/details/105271933
今日推荐