一日一技:用二进制翻转26个字母的大小写

简介: 一日一技:用二进制翻转26个字母的大小写

摄影:产品经理与产品经理环游世界

现在有一段只由大小写英文字母组成的字符串,例如xyzABCXYZabc。现在要把它的大小写字母翻转,变成XYZabcxyzABC

可能你会使用下面这种方案:

dst = ''
src = 'xyzABCXYZabc'
for letter in src:
    if letter.isupper():
        dst += letter.lower()
    else:
        dst += letter.upper()

运行效果如下图所示:

那么有没有办法,不用 if 条件判断就能翻转字母大小写呢?这个时候就要考虑字母的 Ascii 码了。

大写字符A-Z对应的 Ascii 码为 65~90,小写字母 a-z 对应的 Ascii 码为 97~122。

我们来看一下这些 Ascii 码对应的二进制值:

字母 Ascii 码 二进制
A 65 1000001
a 97 1100001
B 66 1000010
b 98 1100010
... ... ...
Z 90 1011010
z 122 1111010

大家如果仔细观察,会发现:10000011100001只有从右数第6位不一样。10000101100010只有从右数第6位不一样。...10110101111010只有从右数第6位不一样。

所以,如果想把大写 A 变成小写 a,只需要把1000001右边第6位从0改成1即可。要把小写 b 变成大写 B,只需要把1100010从右数第6位换成0即可。

总结起来,就是,把从右数第6位,从1变成0就是小写,从0变成1,就是大写。其他位的数字完全不需要改变。

如果不使用 if 判断,怎么把1变成0,把0变成1呢?此时我们就可以使用二进制的异或操作:

1 xor 1 = 0
1 xor 0 = 1
0 xor 0 = 0
0 xor 1 = 1

异或运算,在两边相同时返回0,在两边不同时返回1.

所以,我们只需要把字母对应的 Ascii 码与100000做异或运算即可。

那么最终的代码变为:

dst = ''
src = 'xyzABCXYZabc'
for letter in src:
    dst += chr(ord(letter) ^ 0b100000)
print(dst)

运行效果如下图所示:

上述代码中,ord函数返回一个字符的 Ascii 码,chr函数把 Ascii 码转成字符。

目录
相关文章
|
机器学习/深度学习 存储 计算机视觉
python深度学习图像处理CSV文件分类标签图片到各个文件夹
python深度学习图像处理CSV文件分类标签图片到各个文件夹
450 0
element-ui Pagination分页只保留上一页下一页
有时数据量太大,比如日志数据没必要查看很久之前的,所以把页数屏蔽,不给系统造成卡顿,最简单的方式就是隐藏总条数、页数。具体做法来看一下吧
488 0
|
机器学习/深度学习 算法 数据可视化
〖数据挖掘〗weka3.8.6的安装与使用(1)
Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费 的,非商业化软件,与之对应的是SPSS公司商业数据挖掘产品--Clementine ;weka是基于JAVA环境下开源的 机器学习(machine learning)以及数据挖掘(data mining)软件。Weka的主要开发者来自新西兰的怀卡托大学(The University of Waikato)。WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的
499 0
|
算法 API 计算机视觉
图像处理之角点检测与亚像素角点定位
图像处理之角点检测与亚像素角点定位
220 1
|
9月前
|
存储 自然语言处理 算法
Big data Doc Analyze
本文介绍了文本分析的基本概念、应用场景及技术细节,涵盖了结构化、半结构化和非结构化数据的概述,重点探讨了中文分词工具如jieba、SnowNLP等,以及中文关键词提取和相似度计算的方法,最后提出了文本分析的架构图和实施步骤,强调了NLP在文本数据处理中的重要性和应用前景。
146 3
Big data Doc Analyze
|
数据可视化 JavaScript
Vue3项目使用G6可视化组件实现一个树形机构图
在Vue 3项目中使用G6可视化组件库实现树形机构图的构建和展示。
2618 1
Vue3项目使用G6可视化组件实现一个树形机构图
|
11月前
|
机器学习/深度学习 人工智能 TensorFlow
浅谈计算机视觉新手的学习路径
浅谈计算机视觉新手的学习路径
164 0
|
XML 算法 Java
Android Studio App开发之利用图像解码器ImageDecoder播放GIF动图、Webp、HEIF图片(附源码 简单实用)
Android Studio App开发之利用图像解码器ImageDecoder播放GIF动图、Webp、HEIF图片(附源码 简单实用)
797 0
|
传感器 机器学习/深度学习 算法
恶劣天气条件下激光雷达感知研究综述
恶劣天气条件下激光雷达感知研究综述
375 0
|
前端开发
西门子S7-1200模块如何安装和拆卸
本文我们来学习西门子S7-1200模块如何安装和拆卸。西门子S7-1200模块的设计易于安装,尺寸较小,可以有效的利用空间。S7-1200可以安装在面板或标准导轨上,既可以水平安装,也可以垂直安装。
西门子S7-1200模块如何安装和拆卸