当前位置: 首页 > news >正文

小工具实战-Python实现小工具输出字符串大小写转换、字符串统计、编解码、MD5加密

小工具实战-Python实现小工具输出字符串大小写转换、字符串统计、编解码、MD5加密

  • 学习建议
  • 字符串大小写转换
    • 实现思路
    • 部分代码
  • 字符串统计
    • 实现思路
    • 部分代码:
  • 字符串编解码
    • 实现思路
    • 部分代码
  • 字符串MD5加密
    • 实现思路
    • 部分代码
  • 小工具整体设计
    • 设计思路
    • 工具完整代码实现
    • 输出效果
  • 总结

学习建议

  • 本文主要是使用Python做一些简单小工具,打印输出即可;
  • 本文涉及到的小工具有字符串大小写转换、字符串统计、编解码、MD5加密等等;
  • 文章内容通俗易懂,适合刚入门Python练习基础知识;
  • 文章中使用到了Python的标准输入输出、字符串基本操作、unittest框架基本使用、方法和类的使用等;
  • 写作思路是先大概介绍每个小工具的实现思路,然后写一点部分代码,最后会把所有小工具整合在一起运行。

字符串大小写转换

实现思路

  • 根据用户键盘输入的字符串来按照要求进行大小写转换;
  • 主要有大写转换成小写、小写转换成小写、大小写转换、首字母大写。

部分代码

  • 详细的代码后续会整合在一起,这里看下部分代码:

print(‘您选择的是1-字符串大小写转换,转换进行中~~~’)
print(f"大写转换成小写:{self.s.lower()}“)
print(f"小写转换成小写:{self.s.upper()}”)
print(f"大小写转换:{self.s.swapcase()}“)
print(f"首字母大写:{self.s.title()}”)

字符串统计

实现思路

  • 根据输入的字符串,先判断一个字符是不是在该字符串中;
  • 然后判断该字符在字符串中出现的次数;
  • 去掉字符串左右空格;
  • 去掉字符串左边空格;
  • 去掉字符串右边空格。

部分代码:

def test_case2(self):
print(‘您选择的是2-字符串统计或计数,转换进行中~~~’)
i = input(‘请输入要统计的字符:’)
if i in self.s:
print(f"字符串统计:{self.s.count(i)}“)
print(f"去掉字符串左右空格:{self.s.strip()}”)
print(f"去掉字符串左边空格:{self.s.lstrip()}“)
print(f"去掉字符串右边空格:{self.s.rstrip()}”)
else:
print(f"您输入的字符:{i} 没有在字符串{self.s}中")

字符串编解码

实现思路

  • 根据输入字符串,将Unicode字符串转换为字节序列;
  • 将字节序列解码为Unicode字符串。

部分代码

def test_case3(self):
print(‘您选择的是3-字符串编码或解码,转换进行中~~~’)
str_byte = self.s.encode(‘utf-8’)
print(f"Unicode字符串转换为字节序列:{str_byte}“)
print(f"将字节序列解码为Unicode字符串:{str_byte.decode(‘utf-8’)}”)

字符串MD5加密

实现思路

  • 根据输入的字符串进行简单的MD5加密。

部分代码

def test_case4(self):
print(‘您选择的是4-字符串MD5加密,转换进行中~~~’)
md = hashlib.md5(self.s.encode())
md5_pass = md.hexdigest()
print(f"字符串{self.s}, md5直接加密后为:{md5_pass}")

小工具整体设计

设计思路

  • 先创建一个类,这个类继承于unittest框架的TestCase,目的是组织所有的用例;
  • 每个用例必须按照unittest框架的规则去写,比如函数开头必须为test等;
  • 每个用例其实就是一个小工具,这个用例中主要实现对应的小工具内容;
  • unittest框架的前置setUpClass处理小工具的开始信息,比如提示信息或者要输入的字符串;
  • unittest框架的后置tearDownClass处理小工具的结束信息,比如结束语等等;
  • 除了类中的方法外,还定义了一个主函数main()用来组织所有的用例执行;
  • 主函数main()中的用例执行逻辑按照unittest框架的suite、testcase、addTest、TextTestRunner方式去组织。
  • 最后就是调用main()函数即可。

工具完整代码实现

import unittest
import time
import hashlibclass TestToX(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:# cls.s = 'I like python, And you?'cls.s = input('请输入要转换的字符串:')print("开始进行转换,请稍等......")print("#" * 50)@classmethoddef tearDownClass(cls) -> None:print("#" * 50)print("转换结束,欢迎使用~,工具运行中,您也可继续操作-----")def test_case1(self):print('您选择的是1-字符串大小写转换,转换进行中~~~')print(f"大写转换成小写:{self.s.lower()}")print(f"小写转换成小写:{self.s.upper()}")print(f"大小写转换:{self.s.swapcase()}")print(f"首字母大写:{self.s.title()}")def test_case2(self):print('您选择的是2-字符串统计或计数,转换进行中~~~')i = input('请输入要统计的字符:')if i in self.s:print(f"字符串统计:{self.s.count(i)}")print(f"去掉字符串左右空格:{self.s.strip()}")print(f"去掉字符串左边空格:{self.s.lstrip()}")print(f"去掉字符串右边空格:{self.s.rstrip()}")else:print(f"您输入的字符:{i} 没有在字符串{self.s}中")def test_case3(self):print('您选择的是3-字符串编码或解码,转换进行中~~~')str_byte = self.s.encode('utf-8')print(f"Unicode字符串转换为字节序列:{str_byte}")print(f"将字节序列解码为Unicode字符串:{str_byte.decode('utf-8')}")def test_case4(self):print('您选择的是4-字符串MD5加密,转换进行中~~~')md = hashlib.md5(self.s.encode())md5_pass = md.hexdigest()print(f"字符串{self.s}, md5直接加密后为:{md5_pass}")def main():while True:print('== 1:字符串大小写转换 == \n''== 2:字符串统计或计数 == \n''== 3:字符串编码或解码 == \n''== 4:字符串MD5加密   == \n')num = int(input('请根据以上提示按要求输入数字:'))suite = unittest.TestSuite()if num == 1:suite.addTest(TestToX('test_case1'))runner = unittest.TextTestRunner()runner.run(suite)time.sleep(0.8)elif num == 2:suite.addTest(TestToX('test_case2'))runner = unittest.TextTestRunner()runner.run(suite)time.sleep(0.8)elif num == 3:suite.addTest(TestToX('test_case3'))runner = unittest.TextTestRunner()runner.run(suite)time.sleep(0.8)elif num == 4:suite.addTest(TestToX('test_case4'))runner = unittest.TextTestRunner()runner.run(suite)time.sleep(0.8)else:print("输入有误~我们将运行所有的用例,请查阅...")unittest.main()if __name__ == "__main__":main()

输出效果

  • 效果1:

== 1:字符串大小写转换 ==
== 2:字符串统计或计数 ==
== 3:字符串编码或解码 ==
== 4:字符串MD5加密 ==
请根据以上提示按要求输入数字:1
请输入要转换的字符串:I like python, And you?
开始进行转换,请稍等…
##################################################
您选择的是1-字符串大小写转换,转换进行中~~~
大写转换成小写:i like python, and you?
小写转换成小写:I LIKE PYTHON, AND YOU?
大小写转换:i LIKE PYTHON, aND YOU?
首字母大写:I Like Python, And You?
##################################################
转换结束,欢迎使用~,工具运行中,您也可继续操作-----

  • 效果2:

== 1:字符串大小写转换 ==
== 2:字符串统计或计数 ==
== 3:字符串编码或解码 ==
== 4:字符串MD5加密 ==

请根据以上提示按要求输入数字:2
请输入要转换的字符串:i like python
开始进行转换,请稍等…
##################################################
您选择的是2-字符串统计或计数,转换进行中~~~
请输入要统计的字符:i
字符串统计:2
去掉字符串左右空格:i like python
去掉字符串左边空格:i like python
去掉字符串右边空格:i like python
##################################################
转换结束,欢迎使用~,工具运行中,您也可继续操作-----

  • 效果3:

== 1:字符串大小写转换 ==
== 2:字符串统计或计数 ==
== 3:字符串编码或解码 ==
== 4:字符串MD5加密 ==

请根据以上提示按要求输入数字:3
请输入要转换的字符串:我有一个亿
开始进行转换,请稍等…
##################################################
您选择的是3-字符串编码或解码,转换进行中~~~
Unicode字符串转换为字节序列:b’\xe6\x88\x91\xe6\x9c\x89\xe4\xb8\x80\xe4\xb8\xaa\xe4\xba\xbf’
将字节序列解码为Unicode字符串:我有一个亿
##################################################
转换结束,欢迎使用~,工具运行中,您也可继续操作-----

  • 效果4:

== 1:字符串大小写转换 ==
== 2:字符串统计或计数 ==
== 3:字符串编码或解码 ==
== 4:字符串MD5加密 ==

请根据以上提示按要求输入数字:4
请输入要转换的字符串:123456
开始进行转换,请稍等…
##################################################
您选择的是4-字符串MD5加密,转换进行中~~~
字符串123456, md5直接加密后为:e10adc3949ba59abbe56e057f20f883e
##################################################
转换结束,欢迎使用~,工具运行中,您也可继续操作-----

总结

本文是使用Python实现小工具输出字符串大小写转换、字符串统计、编解码、MD5加密,简单容易理解,适合入门Python基础练习。可能需要对一些基础知识要简单看下。建议学习的时候,不局限于上边的示例,可以自己新增的一些示例,比如MD5加密的时候,也可以增加一些用户名和密码组合MD5加密、密码使用MD5+盐加密、MD5加盐后将密码整体插入盐中、SHA1加密、SHA256加密、HMAC加密等等。

相关文章:

小工具实战-Python实现小工具输出字符串大小写转换、字符串统计、编解码、MD5加密

小工具实战-Python实现小工具输出字符串大小写转换、字符串统计、编解码、MD5加密 学习建议字符串大小写转换实现思路部分代码 字符串统计实现思路部分代码: 字符串编解码实现思路部分代码 字符串MD5加密实现思路部分代码 小工具整体设计设计思路工具完整代码实现输…...

MySQL进阶-----索引的语法与SQL性能分析

目录 前言 一、索引语法 1.SQL语法 2.案例演示 二、SQL性能分析 三、慢查询日志 1.开启日志 2.测试样例 四、profile详情 1.开启profile 2.profile测试SQL语句 五、explain详情 1.语法结构 2.执行顺序示例(id) 3.执行性能示例(type) 前言 本…...

Ansible剧本playbooks详解

一、playbook简介 playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中一系列tasks,playbook字面意思是剧本,现实中由演员按剧本表演,在ansible中由计算机进行安装&#x…...

vue3封装Element导航菜单

1. 导航外层布局 AsideView.vue <template><el-menu:default-active"defaultActive"class"my-menu":collapse"isCollapse":collapse-transition"false"open"handleOpen"close"handleClose"><menu…...

字符串的函数

头文件 # include <string.h> 五大函数&#xff1a; strlen()、strcpy、strcat()、strcmp()、strstr() 用法&#xff1a; strlen()&#xff1a;计算字符串长度&#xff0c;但不计\0这个字符 #include <string.h> int main() {char arr[] "abcdef"…...

Linux安装redis(基于CentOS系统,Ubuntu也可参考)

前言&#xff1a;本文内容为实操记录&#xff0c;仅供参考&#xff01; 一、下载并解压Redis 1、执行下面的命令下载redis&#xff1a;wget https://download.redis.io/releases/redis-6.2.6.tar.gz 2、解压redis&#xff1a;tar xzf redis-6.2.6.tar.gz 3、移动redis目录&a…...

ChatGPT引领量化交易革命:AI在金融创新的浪潮中崭露头角

随着科技的飞速发展,金融领域正迎来一场前所未有的创新浪潮。在这场变革中,ChatGPT凭借其卓越的自然语言处理能力和深度学习能力,正引领量化交易进入新时代。 量化交易,作为现代金融领域的一种重要交易方式,依赖于复杂的数学模型和大量的历史数据来制定交易策略。然而,传…...

无忧微服务:如何实现大流量下新版本的发布自由

作者&#xff1a;项良、十眠 微服务上云门槛降低&#xff0c;用好微服务才是关键 据调研数据显示&#xff0c;约 70% 的生产故障是由变更引起的。在阿里云上的企业应用如茶百道、极氪汽车和来电等&#xff0c;他们是如何解决变更引起的稳定性风险&#xff0c;实现了在白天高流…...

Halcon3D表面平面度检测-平面差值法

//倾斜平面矫正 https://blog.csdn.net/m0_51559565/article/details/137146179 //平面度和平面缺陷检测&#xff0c;平面矫正法 https://blog.csdn.net/m0_51559565/article/details/137163729前言 通常我们对表面平面度进行检测时&#xff0c;通常使用2种方式。1&#xff1a…...

golang 在多线程中避免 CPU 指令重排

发布日期&#xff1a;2024-03-26 16:29:39 起因 golang 的发明初衷便是多线程&#xff0c;是一门专门用于多线程高并发的编程语言。其独创的 GMP 模型在多线程的开发上提供了很大的便利。 现代计算机基本上都是多核 CPU 的结构。CPU 在进行指令运行的时候&#xff0c;为了提高…...

自动化更新包文件--shell脚本

自动化更新包文件--shell脚本 背景手动更包自动化更包 背景 作为一名实施工程师&#xff0c;当然也协助做些测试的工作&#xff0c;当产品功能开发后&#xff0c;研发会将本次迭代涉及的前后端包文件提供过来。有时会因为一些原因研发没法现场开发&#xff0c;那就需要我们配合…...

Vue element-plus 导航栏 [el-menu]

导航栏 [el-menu] Menu 菜单 | Element Plus el-menu有很多属性和子标签&#xff0c;为网站提供导航功能的菜单。 常用标签&#xff1a; 它里面有两个子标签。el-menu-item&#xff0c;它其实就是el-menu每一个里面的item&#xff0c;item就是真实匹配到路由的每个栏目&#…...

数据结构——数组

数组定义&#xff1a; 在计算机科学中&#xff0c;数组是由一组元素&#xff08;值或变量&#xff09;组成的数据结构&#xff0c;每个元素有至少一个索引或键来标识。 因为数组内的元素是连续存储的&#xff0c;所以数组中元素的地址&#xff0c;可以通过其索引计算出来。 性…...

python asyncio websockets server

python websocket server在收到接受消息处理完后会默认关闭连接。需要在msg_handler里面加个while true就能一直保持连接了。 start_server websockets.serve(msg_handler, "0.0.0.0", 29967) asyncio.get_event_loop().run_until_complete(start_server) asyncio.…...

视频素材免费网站有哪些?8个视频素材库网站下载推荐

在视频创作领域&#xff0c;选择正确的高质量无水印素材网站能够极大地丰富您的作品&#xff0c;让每一帧都鲜活起来。下面&#xff0c;我们继续为您介绍更多优质的视频素材网站&#xff0c;每一个都是您创作旅程中的宝贵资源。 1. 蛙学府&#xff08;中国&#xff09; 集合了…...

ChatGPT与传统搜索引擎的区别:智能对话与关键词匹配的差异

引言 随着互联网的快速发展&#xff0c;信息的获取变得比以往任何时候都更加便捷。在数字化时代&#xff0c;人们对于获取准确、及时信息的需求愈发迫切。传统搜索引擎通过关键词匹配的方式为用户提供了大量的信息&#xff0c;然而&#xff0c;这种机械式的检索方式有时候并不…...

xargs后调用bash自定义函数(写该函数文本到脚本, 并引导PATH)

xargs后调用bash自定义函数 需要3步骤,如下 function to_markdown_href_func() { fp$1 #echo $fpecho -e "\n[${fp}](${PREFIX}/${fp})" }BIN/tmp/bin/ F$BIN/to_markdown_href_func.sh mkdir -p $BIN 获得函数to_markdown_href_func的文本 ,写文本到 /tmp/bin/to_ma…...

学术论文写作新利器:ChatGPT技巧详解

ChatGPT无限次数:点击直达 学术论文写作新利器&#xff1a;ChatGPT技巧详解 在如今信息爆炸的时代&#xff0c;学术论文写作变得愈发重要且具有挑战性。随着人工智能技术的不断发展&#xff0c;ChatGPT作为一种强大的写作辅助工具&#xff0c;为学术论文创作者提供了全新的可能…...

Spring整合JDBC

1、引入依赖 <properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><depen…...

详解Qt中的布局管理器

Qt中的布局管理是用于组织用户界面中控件&#xff08;如按钮、文本框、标签等&#xff09;位置和尺寸调整的一种机制。说白了就是创建了一种规则&#xff0c;随着窗口变化其中的控件大小位置跟着变化。Qt提供了多种布局管理器&#xff0c;每种都有其特定用途和特点。以下是对Qt…...

MyBatis 参数重复打印的bug

现象 最近有个需求&#xff0c;需要在mybatis对数据库进行写入操作的时候&#xff0c;根据条件对对象中的某个值进行置空&#xff0c;然后再进行写入&#xff0c;这样数据库中的值就会为空了。 根据网上查看的资料&#xff0c;选择在 StatementHandler 类执行 update 的时候进…...

ES6学习之路:迭代器Iterator和生成器Generator

迭代器 一、知识背景 什么是迭代器 迭代器就是在一个数据集合中不断取出数据的过程迭代和遍历的区别 遍历是把所有数据都取出迭代器注重的是依次取出数据&#xff0c;它不会在意有多少数据&#xff0c;也不会保证能够取出多少或者能够把数据都取完。比如斐波那契额数列&#…...

如何使用 DynamiCrafter Interp Loop 无缝连接两张照片

DynamiCrafter Interp Loop 是一个基于 AI 的工具&#xff0c;可以用来无缝连接两张照片。它使用深度学习技术来生成中间帧&#xff0c;从而使两张照片之间的过渡更加自然流畅。 使用步骤 访问 DynamiCrafter Interp Loop 网站&#xff1a;https://huggingface.co/spaces/Dou…...

今天起,Windows可以一键召唤GPT-4了

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 微软 AI 大计的最后一块拼图完成了&#xff1f; 把 Copilot 按钮放在 Window…...

使用Kaggle API快速下载Kaggle数据集

前言 在使用Kaggle网站下载数据集时&#xff0c;直接在网页上点击下载可能会很慢&#xff0c;甚至会出现下载失败的情况。本文将介绍如何使用Kaggle API快速下载数据集。 具体步骤 安装Kaggle API包 在终端中输入以下命令来安装Kaggle API相关的包&#xff1a; pip install…...

java 通过 microsoft graph 调用outlook(二)

这次提供一些基础调用方式API PS&#xff1a; getMailFolders 接口返回的属性中&#xff0c;包含了未读邮件数量unreadItemCount 一 POM文件 <!-- office 365 --><dependency><groupId>com.google.guava</groupId><artifactId>guava<…...

【机器学习】代价函数

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…...

[leetcode] 100. 相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&a…...

08、Lua 函数

Lua 函数 Lua 函数Lua函数主要有两种用途函数定义解析&#xff1a;optional_function_scopefunction_nameargument1, argument2, argument3..., argumentnfunction_bodyresult_params_comma_separated 范例 : 定义一个函数 max()Lua 中函数可以作为参数传递给函数多返回值Lua函…...

【数据分析面试】1. 计算年度收入百分比(SQL)

题目 你需要为公司的营收来源生成一份年度报告。计算截止目前为止&#xff0c;在表格中记录的第一年和最后一年所创造的总收入百分比。将百分比四舍五入到两位小数。 示例&#xff1a; 输入&#xff1a; annual_payments 表 列名类型amountINTEGERcreated_atDATETIMEstatusV…...

青岛市政府官方网站app/班级优化大师app

运输层 运输层位于主机的协议栈中 复用&#xff1a;发送方不同的应用进程都可以使用同一运输层协议传输数据&#xff1b; 分用&#xff1a;接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程 网络层是为主机之间提供逻辑通信&#xff0c;而运输层为应…...

深圳网站建设怎么样/中国今天刚刚发生的新闻

MATLAB变量每个MATLAB变量可以是数组或者矩阵。MATLAB可以多个赋值多个任务可以在同一行。例如&#xff0c;a 2; b 7; c a * bMATLAB如何显示已经使用的变量名&#xff1f;在MATLAB中可以使用 who 命令显示所有已经使用的变量名。whoMATLAB将执行上面的语句&#xff0c;并返…...

个网站做淘宝客推广可以吗/网站建站网站

提高计算机网络可靠性的相关措施论文一、计算机网络可靠性的定义计算机之间的信息联系的基础是计算机网络&#xff0c;它是通讯的发展和计算机技术的产物。计算机网络可靠性的定义其实就是计算机网络在特定的环境和规定的时间内&#xff0c;所有业务能够可靠的完成。用户在使用…...

做潮鞋的网站和平台/网络营销运营方案

面试必备1-sql问题 sql语句的基本结构 create database 数据库名; use 数据库名; drop database 数据库名; create table 表名(字段 属性[(长度)][,字段 属性(长度)] ); drop table 表名; select [字段名|*] from [表名|查询字句] [as 表的别名] [inner join 其它表 [on (条件…...

jsp动态网站开发实.../seo外包公司费用

在模仿一个天气预报的widget时候,用到了IntentFilter,感觉在manifest.xml注册的receiver跟用代码写registerReceiver&#xff08;&#xff09;的效果应该是相同的,于是想证明一下,就写了如下一段程序: MainActivity: public class MainActivity extends Activity {public sta…...

个人做discuz网站备案/百度网盘搜索入口

我想要一个线图来指示是否缺少一些数据,例如&#xff1a;但是,下面的代码填充了缺失的数据,从而产生了一个可能具有误导性的图表&#xff1a;import pandas as pd import seaborn as sns from matplotlib import pyplot as plt # load csv dfpd.read_csv(data.csv) # plot a gr…...