Python开发工具PyCharm入门指南 - 如何创建密码短语生成器(下)

news2024/11/23 19:24:28

PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。

PyCharm 最新版下载

在上篇文章中,我们学习了密码短语、密码短语生成器的概念并生成了第一个密码短语,本文继续介绍如何创建更好的密码短语,使其更容易记忆,并且更难被破解。

创建更好的密码

使密码短语更容易记忆

您可能已经注意到,在上一步中生成的密码短语有点难读。如何将每个单词大写以提高可读性?

我们在此应用程序中使用 Typer,因为我们不想只运行脚本并获取密码。我们需要创建一个命令行界面,以便我们可以将各种选项传递给脚本,从而控制生成的密码的属性。一种选择是将单词大写。

当我们运行main.py时,会执行以下行:

...
if __name__ == "__main__":
typer.run(main)

所以,我们将使用typer来执行main函数。我们这样做是因为 Typer 可以接受命令行参数,然后将它们作为参数传递给函数。

让我们capitalize在main()函数中引入参数并使其False默认:

def main(capitalize = False):
sub_nouns = read_words('sub_nouns.txt')
...
passphrase = ''.join(phrase_words)
print(passphrase)

根据 Python 编码最佳实践,我们应该指定参数类型。将插入符号放在上面capitalize并按⌥Enter / Alt+Enter。然后选择Specify type for the reference using annotation。Type bool,因为它capitalize应该有一个Boolean值。

现在,如果capitalize为True,让我们在连接单词之前将它们大写。以if大写:开始if语句。让我们以类似于修复read_words函数时使用的方式来实现它,只不过这次我们将使用一个活动模板,而不是手动编写列表推导式。输入“compl”并按“Enter”。然后指定列表推导式的所有元素,并按Tab键移动到下一个元素。

你将得出:

def main(capitalize: bool = False):
sub_nouns = read_words('sub_nouns.txt')
verbs = read_words('verbs.txt')
adjectives = read_words('adjectives.txt')
obj_nouns = read_words('obj_nouns.txt')
word_bank = [sub_nouns, verbs, adjectives, obj_nouns]
phrase_words = []
for word_list in word_bank:
random_word = random.SystemRandom().choice(word_list)
phrase_words.append(random_word)
if capitalize:
phrase_words = [phrase_word.capitalize() for phrase_word in phrase_words]
passphrase = ''.join(phrase_words)
print(passphrase)

为了确保大写字母正常运行,我们需要在运行main.py时将capitalize作为参数传递。要实现这一点,让我们编辑运行配置。在IDE窗口的顶部寻找Run小部件:

您可以使用这个小部件来选择所需的运行配置,以及在运行或调试模式下启动它。当我们单击gutter图标并启动脚本时,PyCharm已经创建了主配置。单击配置名称,打开菜单,选择Edit configurations:

在打开的对话框中,在Parameters字段中指定——capitalize:

单击OK保存更新后的配置。然后单击小部件中的Run图标。

结果如下:

为了更好的可读性,我们可以将密码短语中的单词分开。使用特殊字符作为分隔符可以达到双重目的,因为它可以让我们生成符合特定密码复杂度要求的密码短语。

按如下方式编辑main()函数的倒数第二行:

def main(capitalize: bool = False):
...
passphrase = separator.join(phrase_words)

PyCharm用一条红色波浪线突出显示分隔符,因为函数还没有这个参数。将鼠标悬停在它上面,并在弹出窗口中选择创建参数“separator”。然后将“”指定为默认值,因为在默认情况下我们不想添加任何分隔符。

我们还指定str作为参数类型。你应该得出以下内容:

def main(capitalize: bool = False, separator: str = ''):
...
passphrase = separator.join(phrase_words)
print(passphrase)

现在,更新运行配置。单击Run小部件,选择Edit configurations,并在Parameters字段中添加新参数:

运行配置查看结果:

现在你可以用特殊字符和数字来分隔密码中的单词。您甚至可以使用几个符号来满足各种网站的密码要求,例如“#4”或“%7”。

让密码短语更难破解

密码短语越长,成功暴力攻击需要尝试的次数就越多。让我们在密码中加入一个额外的单词。

首先,我们将准备第五个包含副词的单词列表,并将其放在项目目录中。将bool类型的long参数添加到main()函数的签名中。根据这个参数(该参数是可选的,默认设置为False),我们将向word_bank添加另一个单词列表:

def main(capitalize: bool = False, separator: str = '', long: bool = False):
...
word_bank = [sub_nouns, verbs, adjectives, obj_nouns]
if long:
adverbs = read_words('adverbs.txt')
word_bank.append(adverbs)
...

这一次,让我们使用内置终端来运行脚本。按Ctrl +F12 / Alt+F12,在打开的终端工具窗口中输入以下命令:

python main.py --capitalize --separator "1_" --long

你应该得到类似下面内容的结果:

使用工具的准备

定义简短的选项名称

如果您以前使用过CLI工具,就会知道它们通常只允许用户使用一个字母指定参数。让我们将此功能也添加到我们的工具中。为了更好的代码可读性,让我们重新格式化函数签名,以便每个参数都在单独的行上:

def main(
capitalize: bool = False,
separator: str = '',
long: bool = False
):
...

然后将每个参数的默认值替换为type。选项(<default_value>, <long_name>, <short_name>):

下面是main()的最终签名:

def main(
capitalize: bool = typer.Option(False, '--caps', '-c'),
separator: str = typer.Option('', '--separator', '-s'),
long: bool = typer.Option(False, '--long', '-l')
):
...

现在我们可以一起指定所有选项。分隔符(' -s ')应该放在最后,因为它后面需要一个字符串:

文件的选项

默认情况下,type还添加了——help选项。现在让我们看看它是如何工作的:

我们可以理解存在哪些参数以及它们的长、短名称。如何添加注释来解释它们的实际作用?为main()的每个参数添加help如下:

现在——help产生了更多有用的信息:

您可能希望使用没有PyCharm的密码短语生成器,例如在系统终端中。在这种情况下,您应该使用以下命令将type安装到系统解释器中:

python3 -m pip install --user typer

以上便是如何创建更好的密码短语的全部内容,如果您有其他问题也可以继续浏览本系列文章,获取相关教程,你还可以给我留言或者加入我们的官方技术交流群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

统信UOS系统开发笔记(二):国产统信UOS系统搭建Qt开发环境安装Qt5.12

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/130984263 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

得物人事系统时间轴设计的演化历程

1 什么是时间轴 ~&#xff08;以上图片出自电影《星际穿越》&#xff09;~ 如果你看过《星际穿越》&#xff0c;应该对这一幕印象深刻&#xff0c;女儿墨菲所处的房间&#xff0c;按照时间分为了无数个三维空间实体。三维空间加时间组合成四维空间&#xff0c;即时空。 时间轴…

奇怪,能ping通怎么还是上不了网?

我的网工朋友大家好啊 一般如果遇到没法上网的问题&#xff0c;你会怎么办。 可能会尝试去使用ping命令来测试一下网络是不是正常&#xff0c;对吧&#xff1f; 但是有时候会出现&#xff0c;ip能ping通&#xff0c;但是就是无法上网&#xff0c;应该大部分网工都遇到过这种…

虚实连接:惯性动作捕捉系统系列产品多领域广泛应用

近年来&#xff0c;将人体数字化融入虚拟世界已经成为一股浪潮&#xff0c;特别聚焦于姿态动作捕捉和人体运动学分析。此时建立准确的虚拟与现实数字模型&#xff0c;并研究运动参数和力学参数的关联至关重要。同时可推动虚拟现实和人机交互的发展&#xff0c;拓展医疗康复、体…

【Atlas200】继承MxBase类自制插件(C++),以官方例程为例

目录 MindX SDK简介插件的Buffer与Metadata自定义插件Init初始化接口DeInit资源释放接口Process插件入口DefineProperties接口DefineInputPorts接口MindX SDK简介 MindX是一款针对昇腾系列AI芯片的软件开发工具包(SDK),它提供了一系列的API和工具,帮助开发者对昇腾系列AI芯…

1、 快速入门

0、回顾jdbc操作数据库 在MySQL数据库创建一数据库实例mybatis&#xff0c;在其创建一张表 CREATE TABLE employee(id INT(11) PRIMARY KEY AUTO_INCREMENT,last_name VARCHAR(255),gender CHAR(1),email VARCHAR(255) ); -- 再插进一条随意数据&#xff0c;用于测试 INSERT …

day5 -- 函数

学习内容 MySQL支持何种函数&#xff0c;以及如何使用这些函数 brief 大多数SQL实现支持以下类型的函数&#xff1a; 用于处理文本串&#xff08;如删除或填充值&#xff0c;转换值为大写或小写&#xff09;的文本函数用于在数值数据上进行算术操作&#xff08;如返回绝对值…

Linux 6.2 系列生命周期已结束

导读Linux 6.2 系列内核已结束生命周期&#xff0c;在 kernel.org 上被标记为 EOL &#xff0c;这意味着该版本不会再有任何新功能、Bug 修复或安全补丁。 Linux 6.2 于 2023 年 2 月底正式发布&#xff0c;是一个非 LTS 版本&#xff0c;只有为期三个月的支持&#xff0c;在维…

Pixhawk无人机-ArduPilot 软件SITL仿真模拟飞行(SITL+Mission Planner结合)

本文的目的是将SITL仿真结合Missionplanner地面站&#xff0c;之后再探索SITL仿真结合QGC地面站。 Pixhawk无人机扩展教程(7)—SITLMP/QGC运行教程中指出&#xff0c;QGC地面站是安装在与SITL仿真软件一起的笔记本电脑上的&#xff0c;而MP地面站是安装在另外一台笔记本电脑上…

分布式锁的应用场景与分布式锁实现(二):基于Redis实现分布式锁

分布式锁的应用场景与分布式锁实现&#xff08;一&#xff09;&#xff1a;传统锁处理并发及传统锁的问题 基于Redis实现分布式锁 所有代码已同步到GitCode&#xff1a;https://gitcode.net/ruozhuliufeng/distributed-project.git 基本实现 ​ 借助Redis中的命令setnx(key&a…

ES6-ES13学习笔记(5.0)

ES2022的函数 //findLast findLastIndex() ES2022 发现在电脑自带的联想浏览器不支持此函数&#xff0c;还报错了 对于ECMA的支持还和浏览器有关以及浏览器版本有关&#xff0c;然后我使用Google浏览器就可以正常使用&#xff0c; 1.扩展运算符&#xff1a;三个点... ..…

第一行代码 第十三章 高级技巧

第13章 高级技巧 全局获取Context的技巧 回想这么久以来我们所学的内容&#xff0c;你会发现有很多地方都需要用到Context&#xff0c;弹出Toast的时候需要&#xff0c;启动活动的时候需要&#xff0c;发送广播的时候需要&#xff0c;操作数据库的时候需要&#xff0c;使用通…

图解LeetCode链表题(中等)剖析

文章目录 &#x1f490;文章导读&#x1f490;1.合并零之间的结点解题思路 &#x1f490;2.链表中最大孪生和解题思路 &#x1f490;3.链表的随机节点解题思路 &#x1f490;4.复杂链表的复制解题思路 &#x1f490;5.两辆交换两表中的节点解题思路 &#x1f490;文章导读 &…

关于python pycharm中输出的内容不全的解决办法

控制台输出&#xff1a; 解决方案&#xff1a; pandas 库 # 显示所有列 pd.set_option(display.max_columns, None) # 显示所有行 pd.set_option(display.max_rows, None) # 设置value的显示长度 pd.set_option(max_colwidth, 100) # 设置1000列时才换行 pd.set_option…

DataFrame/字典/列表之间的相互转换

DataFrame —> 字典 参考&#xff1a;pandas关于to_dict的使用_pandas to_dict_曼珠沙华Devil的博客-CSDN博客 pandas提供了 DataFrame.to_dict() 函数&#xff0c;将DataFrame类型转化为字典类型 DataFrame.to_dict(orientdict) # orient 可省略 对于写入的orient不同…

闭包基本知识汇总

闭包基本知识汇总 一、什么是闭包&#xff1f; 闭包是指有权限访问另一个函数作用域中的变量的函数&#xff0c;在Javascript中&#xff0c;只有函数内部的子函数才能读取局部变量&#xff0c;因此可以把闭包简单理解成 “定义在一个函数内部的函数” 。所以&#xff0c;在本…

AI当道,元宇宙赛道是风口还是噱头?

一个新概念的诞生往往要经过无数次的锤炼&#xff0c;宛如一场漫长、深刻的头脑风暴。而发展到今天&#xff0c;处在风口之上&#xff0c;各行各业都急切往元宇宙概念靠拢&#xff0c;元宇宙已经与资本市场共舞。 伴随着全球多家行业巨头的布局以及元宇宙在游戏领域的率先落地…

c#快速入门(上)

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb; c#和c不同之处&#x1f449;&#x1f3fb;程序文件的…

华为OD机试真题 Java 实现【简单的解压缩算法】【2023Q1 200分】,附详细解题思路

一、题目描述 现需要实现一种算法&#xff0c;能将一组压缩字符串还原成原始字符串&#xff0c;还原规则如下&#xff1a; 1、字符后面加数字N&#xff0c;表示重复字符N次。例如&#xff1a;压缩内容为A3&#xff0c;表示原始字符串为AAA。 2、花括号中的字符串加数字N&…

tcpdump 抓包工具详细图文教程(上)

目录 一、tcpdump 抓包工具的基本介绍和学习基础 1.1 常用的抓包工具 1.2 tcpdump 抓包工具介绍 二、tcpdump 抓包工具使用环境和初体验 2.1 编译安装 tcpdump 2.2 抓包 三、讲解 TCP 协议报文报头 四、tcpdump 抓包工具常规过滤规则 4.1 tcpdump 的 host 和 net 过…