一日一技:用二进制翻转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 码转成字符。

目录
相关文章
|
1月前
|
Python
【python】生成随机数字/字母/指定位数的字母+数字的字符串
【python】生成随机数字/字母/指定位数的字母+数字的字符串
|
3月前
将小写字母全部转换成大写字母
【2月更文挑战第5天】将小写字母全部转换成大写字母。
21 0
|
1月前
输入一个字符判断是数字还是字母 如果是字母是大写字母还是小写字母 是声母还是韵母
输入一个字符判断是数字还是字母 如果是字母是大写字母还是小写字母 是声母还是韵母
17 1
输入一个字符判断是数字还是字母 如果是字母是大写字母还是小写字母 是声母还是韵母
|
4天前
|
弹性计算 运维 Shell
|
25天前
输入一个字符,判断该字符是大写字母、小写字母,数字还是其他字符,并作相应的显示。
输入一个字符,判断该字符是大写字母、小写字母,数字还是其他字符,并作相应的显示。 提示:利用ord()函数来获得字符的 ASCIl。
19 1
输入一个字符,判断该字符是大写字母、小写字母,数字还是其他字符,并作相应的显示。
|
8月前
|
存储 C语言
探索编程中的字母转换:如何将字母变为二进制矩阵?
二进制是学习计算机语言中一个非常重要的知识点,笔者将通过这篇文章帮助读者了解进制转换在程序中的运用,借助进制转化实现火柴形状的字母输出。
105 0
|
9月前
输入一个字符,判断该字符是大写英文字母,小写英文字母,空格,还是其它字符
输入一个字符,判断该字符是大写英文字母,小写英文字母,空格,还是其它字符
|
10月前
|
存储
练习>>代码实现将一个字符串中的小写字母变为大写
练习>>代码实现将一个字符串中的小写字母变为大写
46 0
验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数
验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数
求字符串中大小写字母个数及其他符号个数!
求字符串中大小写字母个数及其他符号个数!
43 0