python经典百题之简单加密数据
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换
程序分析
对于给定的四位整数,要求按照一定规则进行加密:
- 每位数字都加上5。
- 然后用和除以10的余数代替该数字。
- 最后将第一位和第四位交换,第二位和第三位交换。
下面我们将使用三种不同的方法来实现这个加密任务,并分析它们的优缺点。
方法一:数学运算
解题思路
按照规则逐步进行数学运算,首先对每位数字加5,然后取余数代替,最后进行位交换。
实现代码
def encrypt(number):# 将每位数字都加上5number += 5# 用和除以10的余数代替每位数字encrypted = 0for i in range(4):digit = number % 10encrypted += digit * (10 ** i)number //= 10# 进行位交换encrypted = (encrypted % 10) * 1000 + (encrypted // 1000) * 1 + ((encrypted // 10) % 10) * 10 + ((encrypted // 100) % 10) * 100return encrypted# 测试
number = 1234
encrypted_number = encrypt(number)
print(f"Original number: {number}")
print(f"Encrypted number: {encrypted_number}")
优缺点
优点:
- 简单易懂,容易实现。
缺点:
- 实现稍微复杂一些,需要进行多次数学运算。
- 可读性相对较低。
方法二:字符串操作
解题思路
将数字转换成字符串,然后按照规则进行字符串操作,包括字符的加减和交换。
实现代码
def encrypt(number):# 将数字转换成字符串num_str = str(number)# 对每个字符进行加减和交换操作encrypted_str = ''for i in range(4):digit = int(num_str[i])# 加上5并取余encrypted_digit = (digit + 5) % 10encrypted_str += str(encrypted_digit)# 交换字符位置encrypted_str = encrypted_str[3] + encrypted_str[2] + encrypted_str[1] + encrypted_str[0]# 将字符串转换回整数encrypted_number = int(encrypted_str)return encrypted_number# 测试
number = 1234
encrypted_number = encrypt(number)
print(f"Original number: {number}")
print(f"Encrypted number: {encrypted_number}")
优缺点
优点:
- 使用字符串操作更容易理解。
缺点:
- 需要进行多次字符串操作,性能可能略低于数学运算方法。
- 字符串操作可能需要额外的内存空间。
方法三:按位操作
解题思路
使用按位操作对每位数字进行加减和交换操作。
实现代码
def encrypt(number):# 按位操作加5encrypted = 0for i in range(4):digit = (number // (10 ** i)) % 10encrypted_digit = (digit + 5) % 10encrypted += encrypted_digit * (10 ** i)# 进行位交换encrypted = (encrypted % 10) * 1000 + (encrypted // 1000) * 1 + ((encrypted // 10) % 10) * 10 + ((encrypted // 100) % 10) * 100return encrypted# 测试
number = 1234
encrypted_number = encrypt(number)
print(f"Original number: {number}")
print(f"Encrypted number: {encrypted_number}")
优缺点
优点:
- 使用按位操作,较数学运算方法性能稍好。
- 代码相对简单,可读性较高。
缺点:
- 仍需要进行多次数学运算和位操作。
总结
三种方法都可以实现加密任务,具体选择取决于个人偏好和项目需求。如果希望代码简洁易读,方法二(字符串操作)可能是一个好选择。如果性能是关键因素,方法三(按位操作)可能更好,因为它不需要进行字符串转换。方法一(数学运算)虽然可行,但相对较复杂,可读性较低,通常不是首选。
综合考虑,方法三(按位操作)通常是一个不错的选择,因为它兼顾了性能和代码简洁度。
相关文章:
python经典百题之简单加密数据
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换 程序分析 对于…...
登陆认证权限控制(1)——从session到token认证的变迁 session的问题分析 + CSRF攻击的认识
前言 登陆认证,权限控制是一个系统必不可少的部分,一个开放访问的系统能否在上线后稳定持续运行其实很大程度上取决于登陆认证和权限控制措施是否到位,不然可能系统刚刚上线就会夭折。 本篇博客回溯登陆认证的变迁历史,阐述sess…...
单点接地、多点接地、混合接地
有三种基本的信号接地方式:浮地、单点接地、多点接地。 浮地:目的是使电路或设备与公共地线可能引起环流的公共导线隔离起来,浮地还使不同电位的电路之间配合变得容易。缺点:容易出现静电积累引起强烈的静电放电。折中方案:接入泄…...
【C++初阶(一)】学习前言 命名空间与IO流
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...
flask vue跨域问题
问题: 调试时候跨域访问报: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 解决办法: 安装flask_cros from flask_cors import CORS CORS(app) app.after_request def a…...
stm32(二十)IAP升级优化(双缓存,可恢复)
这次主要对STM32F103/Keil和LPC2478/IAR加了一个IAP在线升级功能, 主要记录一下自己的思路,无代码,实在是代码感觉没啥写的,都是一些网上很多流传的东西。 1、开发环境 Keilstm32f103JLINK 2、程序思路 在升级中,必…...
HDLbits:Exams/ece241 2013 q4
本题是一个实际的应用问题,一个水库,有三个传感器S1、S2、S3提供输入,经过控制电路,四个输出给到四个流量阀。也就是说,本题想让我们根据水位去控制流量阀。 问题的关键在于把什么抽象成state,答案是&…...
什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
Response Status Code 301、302
目录 Information Django redirect Influence Information HTTP状态码301、302和304分别表示以下情况: codeinformation301(Moved Permanently) 永久重定向。当请求的资源已经被永久地移动到了一个新的URI时,服务器会返回这个…...
import { ref, onMounted, reactive } from ‘vue‘
ref, onMounted, reactive 用于创建和操作响应式数据、生命周期钩子。 1.ref 用来创建一个响应式的引用(Reactive Reference)的函数,主要用于创建基本数据类型(如数字、字符串等)的响应式数据。 通过 ref 创建的变…...
【TB作品】基于MSP430G2553单片机的超声波测距与报警系统,原理图,PCB
功能: 1 超声波测距显示 2 按键设置报警上下限 3 蜂鸣器报警 原理图: PCB样式: 实物: 代码: https://github.com/xddun/blog_code_search...
npm install报错
在命令提示符窗口下载npm,报错如下: $npm install报错信息如下: npm WARN old lockfile npm WARN old lockfile The package-lock.json file was created with an old version of npm, npm WARN old lockfile so supplemental metadata must…...
Flutter自定义model实体类
在某些场景下,我们可能需要自定义Flutter model实体类,来创建更加结构化和有组织的代码,提高代码的可重用性,并增强Flutter应用程序的整体可维护性。 自定义小部件:在创建自己的小部件时,可能需要定义自定义数据类型来…...
java项目实现不停服更新的4种方案(InsCode AI 创作助手)
文章目录 1. Blue-Green 部署2. 滚动更新3. 使用负载均衡器4. 灰度发布 在软件开发和维护中,不停机更新是确保应用程序持续可用的关键任务之一。以下是四种常见的不停机更新策略及其示例: 1. Blue-Green 部署 概念: Blue-Green 部署是一种部…...
7.1 yolov5优化模型时,自动标注xml数据
yolov5优化模型时,一般需要继续标注一些检测错误的图片,将其标为xml数据。以下是根据训练好的模型自动标注xml数据的python代码: 注意:代码中包含了本人的yolov5的测试过程,测试过程可以自己根据yolov5的测试文件自行…...
开发者职场“生存状态”大调研报告分析 - 第一版
听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…...
在MySQL中使用!=还能走索引吗?
在MySQL中使用!还能走索引吗? 一般情况下,我们会在一个索引上较多的使用等值查询或者范围查询,此时索引大多可以帮助我们极快的查询出我们需要的数据。 那当我们在where条件中对索引列使用!查询,索引还能发挥他的作用吗…...
【算法题】2897. 对数组执行操作使平方和最大
题目: 给你一个下标从 0 开始的整数数组 nums 和一个 正 整数 k 。 你可以对数组执行以下操作 任意次 : 选择两个互不相同的下标 i 和 j ,同时 将 nums[i] 更新为 (nums[i] AND nums[j]) 且将 nums[j] 更新为 (nums[i] OR nums[j]) &#…...
2023年中国划船机产量、销量及市场规模分析[图]
划船机是一种健身器材,它模拟了划船的运动,可以锻炼身体的肌肉力量和协调性。划船机通常由座椅、把手、脚踏板和传动装置组成,使用者可以通过拉动把手来模拟划船的动作,从而达到锻炼身体的目的。 划船机产业链 资料来源ÿ…...
Kafka和RabbitMQ的对比
Rabbitmq比kafka可靠,kafka更适合IO高吞吐的处理,比如ELK日志收集 Kafka和RabbitMq一样是通用意图消息代理,他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设是非常不同的。 a) 以下场景比较适合使用Kafka。如果有大量的事…...
Pixel Couplet Gen入门指南:理解8-bit物理卷轴CSS实现原理
Pixel Couplet Gen入门指南:理解8-bit物理卷轴CSS实现原理 1. 项目概览 Pixel Couplet Gen是一款基于ModelScope大模型驱动的创意春联生成工具。与传统春联设计不同,它采用了独特的8-bit像素游戏风格,将传统文化元素与现代数字美学完美融合…...
零代码部署DeepSeek-OCR:利用WEBUI镜像快速搭建企业级文字识别系统
零代码部署DeepSeek-OCR:利用WEBUI镜像快速搭建企业级文字识别系统 1. 引言 1.1 企业文档处理的痛点与需求 在日常业务运营中,企业面临着大量纸质文档电子化的需求。从合同扫描件到财务票据,从客户登记表到物流单据,这些文档通…...
NE555芯片应用与15个经典电路项目详解
1. NE555芯片:电子工程师的瑞士军刀NE555这颗小小的8脚芯片,自1971年由Signetics公司推出以来,已经陪伴电子工程师走过了半个世纪。它就像电子设计领域的瑞士军刀,凭借其稳定的定时精度、灵活的配置方式和低廉的价格,至…...
OpenClaw研究助手:千问3.5-9B驱动的文献综述自动化
OpenClaw研究助手:千问3.5-9B驱动的文献综述自动化 1. 为什么需要自动化文献综述? 作为一位经常需要撰写文献综述的研究者,我深刻理解这个过程的痛苦。传统文献整理需要手动下载PDF、逐篇阅读、摘录关键观点、分类归档,最后再整…...
《算法题讲解指南:递归,搜索与回溯算法--穷举vs深搜vs回溯vs剪枝》--12.全排列,13.子集
🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》《C入门到进阶&自我学习过程记录》 《算法题讲解指南》--优选算法 《算法题讲解指南》--递归、搜索与回溯算法 《算法题讲解指南》--动态规划算法 ✨未择之路࿰…...
ViT推理超快
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 ViT推理超快:突破实时视觉处理的瓶颈目录ViT推理超快:突破实时视觉处理的瓶颈 引言:从理论到…...
kmp算法:我们所忽略的字符串匹配本质
一、先捅破窗户纸:前后缀在匹配里到底起什么作用?在讲next数组的计算之前,我们必须先把“为什么有前后缀,就能不回退主串”这个核心逻辑彻底讲透,这是字符串匹配的本质核心。我们用一个有前后缀的经典案例,…...
[具身智能-221]:OpenCV以及在具身智能中的应用
OpenCV(开源计算机视觉库)在具身智能(Embodied AI)中扮演着“视觉皮层”和“基础感知工具包”的角色。虽然现代具身智能的核心决策往往依赖于深度学习框架(如PyTorch、TensorFlow)和大型模型,但…...
CCG Workflow Agent Teams使用指南:如何利用并行AI团队加速复杂项目开发
CCG Workflow Agent Teams使用指南:如何利用并行AI团队加速复杂项目开发 【免费下载链接】ccg-workflow 多模型协作开发系统 - Claude 编排 Codex 后端 Gemini 前端,28 个命令覆盖开发全流程,一键安装零配置 项目地址: https://gitcode.c…...
Whishper自定义配置指南:如何根据需求调整参数实现最佳转录效果
Whishper自定义配置指南:如何根据需求调整参数实现最佳转录效果 【免费下载链接】whishper Transcribe any audio to text, translate and edit subtitles 100% locally with a web UI. Powered by whisper models! 项目地址: https://gitcode.com/gh_mirrors/wh/…...
