问题描述:
最近在网上看到一个有意思的问题,就是建立一个映射规则,比如说a-->c, x-->z, z-->b。也就是说,相当于将字母表中间所有字母映射到循环移位后两位的字母。通过这样的方式,将一个字符串解码。假设有这么一个字符串:“lmu ynnjw ml rfc spj”。如果我们要对它按照前面循环后移位两位的方式解码的话,解码的结果将是:“now apply on the url”.
问题分析:
这个问题总的来说,可以分为两个部分,一个是对单个字符进行解码,另外一个是遍历整个字符串,返回结果。先看看解码部分:
def decode(a):
if a >= 'a' and a <= 'z':
result = chr(ord(a) + 2) if ord(a) + 2 < ord('z') else chr(ord(a) - 24)
return result
else:
return a
1. 从前面的结果我们可以看到,首先需要判断,只对字母表中间的字符进行转换,所以需要一个判断条件。
2. 我们用到了两个方法,一个ord(),该方法主要是返回一个字符所对应的ASCII码数字值,而chr()则返回一个数字所对应的字符,一般是0-255之间。
3. 因为要循环移位解码,所以需要对+2之后的字符判断,如果超过了字符'z'的编码,则要绕到字母列表开头。
完成了第一步之后,下一步则是返回一个可以遍历访问的结果集,考虑到实际应用中的情况,如果要解码的字符串非常的长,我们可以考虑返回一个generator。按照这种办法,则返回遍历结果的代码如下:
def result_iter(a):
for item in a:
yield translate(item)
这样,如果我们后续要使用这个方法的话,就比较省事了,可以用如下的语句:
for item in result_iter(a):
print item,
这里假设 a是传入的需要解码的字符串a='“lmu ynnjw ml rfc spj'。则返回的结果就如下:
n o w a p p l y o n t h e u r l
总结:
这是由一个问题想到的最初的解决办法,因为要用到一些典型python式的代码方法,其中就用到了条件表达式和generator。这些可以很大程度上精简代码。不过这只是针对特定情况的一个办法,没有考虑到偏移任意位以及对大写字母的处理。
分享到:
相关推荐
"随机字符映射表加密及传输程序"是一个专注于数据安全的应用,它结合了加密技术与对等(P2P)网络通信,确保信息在传输过程中的安全性。以下是这个程序涉及到的主要知识点: 1. **随机字符映射表加密**:这是一种...
在Java中,默认的字符编码是UTF-8,而GBK是一个中文常用的编码格式,它包含了更多的中文字符。当XML或者HTTP请求的数据采用GBK编码,而CXF服务端按照UTF-8进行解码时,如果数据中存在GBK编码下无法映射到Unicode的...
映射字符串到类的过程涉及到创建一个查找表或哈希表,其中键是字符串,值是类的指针或引用。这样,我们可以通过字符串查找对应的类实例。为了实现这个功能,我们需要以下几个步骤: 1. **定义类和映射表**:首先,...
ASCII字符映射表将每个字符与一个唯一的数值关联起来,这个数值范围从0到127。表中的每一行通常包含四个部分:十进制表示、十六进制表示、对应的字符以及该字符的描述或用途。通过这种方式,程序员可以方便地查询...
一个更高效的解决方案是使用哈希表,可以将字符映射到其频次,避免重复查找,从而将时间复杂度降低到O(n),其中n为字符串的长度。 ### 结论 字符频度统计是编程中一项基本但重要的技能,尤其是在数据分析和处理中...
完成字符映射后,我们需要将字符数组打印到控制台。这里可以使用for循环,逐行遍历字符数组,并在每行结束后添加换行符。为了提高输出的可读性,可以使用`sys.stdout.write()`函数而不是`print()`,因为它允许我们在...
接着,我们将每个像素的亮度映射到一个字符上,这可以通过创建一个字符映射表来实现。最后,我们将处理后的字符数组逐行打印出来,形成字符画。 以下是一个简单的代码示例: ```python from PIL import Image # ...
本文介绍了一种基于字符替换的简单加密算法——反字符替换加密法,并通过一个具体的 C 语言程序示例展示了其实现方法。尽管这种方法在安全性方面存在局限性,但对于学习基本的加密概念和技术而言,不失为一个良好的...
在JavaScript编程语言中,获取一个字符串中只包含一种字符的最长非空子字符串的长度是一项常见的字符串处理任务。这个问题可以通过遍历字符串并检测连续字符来解决。以下是一种实现方法: ```javascript /** * ...
与SQL Server提供了`IS_NUMBER`这样的内置函数不同,Oracle并没有提供一个直接的函数或方法来实现这一功能。因此,我们需要采取一些变通的方式来解决这个问题。 #### 错误信息解读 首先,让我们先来理解一下题目中...
Java方法映射是Java编程中一个关键的概念,特别是在与C或C++进行跨语言交互时。这个过程通常涉及到JNI(Java Native Interface),它允许Java代码调用原生C或C++函数,反之亦然。在JNI中,Java方法必须被映射到C/C++...
论文的主要贡献在于提出了一种新的基于自组织映射神经网络的粘连字符分割方法,并对经典SOFM的学习规则进行了改进。这种改进的规则使得神经元之间存在排斥作用,扩大了神经元的接受域,以此来提高分割的效率和准确性...
通过配置Spring的Bean,可以轻松地集成Dozer,使得对象映射成为服务层的一个透明操作。 ### 10. 示例代码 ```java DozerBeanMapper mapper = new DozerBeanMapper(); Source source = new Source(); source.set...
GB2312是一种支持简体中文的字符集,它将中文字符映射到多字节序列中。对于ASCII范围内的字符(即大部分英文字符),只需要一个字节即可表示;而中文字符则通常需要两个字节。因此,在处理中英文混合字符串时,需要...
【字符拼图_实现从图片到字符】是一个项目,它使用C++编程语言将图像转换成由字符组成的拼图。这种技术通常被称为“ASCII艺术”,它利用不同字符的视觉差异来模拟图像的颜色和形状。该项目提供了对BMP和GIF两种常见...
数据映射(Data Mapping)是将数据从一个结构或格式转换到另一个结构或格式的过程,广泛应用于数据库集成、数据迁移、数据分析等领域。在现代IT环境中,ChatGPT作为一个强大的自然语言处理工具,可以辅助我们进行...
在提供的压缩包文件"字典序.C"中,很可能是包含了一个C语言实现的示例代码,用于解决这种字典序编码问题。代码中可能包括了字符到数字的映射函数、字符串遍历逻辑以及编码结果的输出。通过阅读和理解这段代码,你...
这里,`maketrans()` 创建了一个映射表,`translate()` 使用这个映射表进行转换。 在提供的文件列表中,`stringMethod02.py`、`stringAdvanceOprate.py`、`stringFormatPrint.py`、`stringOprate.py`、`string...