`
frank-liu
  • 浏览: 1665647 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个字符映射问题的实现方法

阅读更多

问题描述:

    最近在网上看到一个有意思的问题,就是建立一个映射规则,比如说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。这些可以很大程度上精简代码。不过这只是针对特定情况的一个办法,没有考虑到偏移任意位以及对大写字母的处理。

0
0
分享到:
评论

相关推荐

    随机字符映射表加密及传输程序

    借助随机字符映射表法实现消息或文本的加密,并使用对等模式实现网络通信,进行加密后消息或文本的传输,并在对等端解密并显示。

    字符图形程序的设计与实现

    1) 制作一个图形元素表,表中将所需的各种字符图形编上号码,并用存储器映射法将其显示在屏幕的左上部分; 2) 将光标定位在屏幕的右半部分画图区,上、下、左、右光标控制键控制光标在四个方向的移动,不显示其...

    VC++消息映射与处理\在普通视图窗口中实现键盘字符的输入

    VC++消息映射与处理\在普通视图窗口中实现键盘字符的输入

    常见汉字的Unicode和GB2312映射表

    在开发stm32时,从网上接收到utf8的数据流中包含汉字,如果要正确的在串口中打印汉字的话,就要把utf8(一个汉字3字节)转为GB2312(一个汉字2字节),这个过程不能直接转化,因为GB2312只有和16位的Unicode有映射,...

    字符串 数组、字母和ASCII值应用

    二、给一个二维数组inArr[ ][ ],写一个方法获取每一列的最小值,输出到一个一维数组outArr[ ]中。 如:inArr[ ][ ]={{1,8,3},{6,5}},则输出outArr[ ] = {1,5,3} 三、判断一个字符串是否是首字母...

    Nginx一个域名访问多个项目的方法实例

    最近在个人的多个项目部署中遇到这样一个问题,一个域名如何实现多个项目的访问。因为不想自己单独去申请域名证书和域名配置,便想到了这个方案,结合Nginx的location功能实现了自己的需求,便记录下来。示例中是以...

    汇编课程实践-字符图形的程序设计与实现

    1) 制作一个图形元素表,表中将所需的各种字符图形编上号码,并用存储器映射法将其显示在屏幕的左上部分; 2) 将光标定位在屏幕的右半部分画图区,上、下、左、右光标控制键控制光标在四个方向的移动,不显示其...

    AES.rar_AES 任意_AES任意字符串_字符串aes加密_字符串加密

    实现AES加密与解密算法,输入为任意长度的字符串,输出为加密后的字符(直接由IISC码表映射得到)

    Java 字符串应用、数组、字母转换和公约数等

    二、给一个二维数组inArr[ ][ ],写一个方法获取每一列的最小值,输出到一个一维数组outArr[ ]中。 如:inArr[ ][ ]={{1,8,3},{6,5}},则输出outArr[ ] = {1,5,3} 三、判断一个字符串是否是首字母...

    XDU嵌入式驱动程序设计 实验四 内存分配和内存映射

    写一个简单的驱动程序,要求: ①在加载驱动程序时利用get_free_pages函数申请一片64KB的连续物理地址空间; ②利用nopage机制实现对申请到的64KB地址空间进行内存映射; ③编写应用程序利用mmap进行内存映射,读写...

    array-hash:快速且内存有效的哈希映射和专用于字符串的哈希集的C ++实现

    array-hash:快速且内存有效的哈希映射和专用于字符串的哈希集的C ++实现

    鄙人实现一Base4编码解码器

    鄙人去年无意中点开一个链接“网易2010挑战赛”看到一道题:将一个字节分成四个字节存储(所谓的Base4编码),各字节对应于字符的映射关系是:00--'a',01--'o',10--'d',11--' '(空格),求编码后有多少个dao?...

    重庆理工大学操作系统基于Linux0.11内核的实践

    在Linux0.11的环境下完成基于内核栈切换的进程切换、地址映射与共享、终端设备的控制、proc文件系统的实现中的三个及以上实验项目。 在Linux四项任务中成功完成了四项:基于内核栈切换的进程切换,终端设备的控制,...

    Python实现全角半角字符互转的方法

    相信对于每一个编程人员来说,在文本处理的时候,经常会遇到全角半角不一致的问题。于是需要程序能够快速的在两者之间互转。由于全角半角本身存在着映射关系,所以处理起来并不复杂。 具体规则为:  全角字符...

    拓扑字符串缠结

    此外,我们认为复制品构造会随着几何过渡而转换,从而为计算简化态及其Rényi和von Neumann熵提供一个显式的闭合弦对偶。 尽管我们大部分的分析都是针对S 3上的Chern-Simons进行的,但出现的情况相当笼统。 具体来...

    matlab播放字符动画

    你想体验一下用matlab来播放badapple等字符动画吗,来试一试吧O(∩_∩)O,此代码可以将你的视频剪成图片,并且对图片进行字符画的映射从而实现我们播放出来的是字符动画了

    API之网络函数---整理网络函数及功能

    GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串 GetCharWidth 调查字体中一个或多个字符的宽度 GetFontData 接收一种可缩放字体文件的数据 GetFontLanguageInfo 返回目前选入指定设备...

    Jenkin 的“一次一个”哈希:简单、高性能的哈希将字符字符串映射到 32 位整数-matlab开发

    这是 Bob Jenkins 的“一次一个”字符串到 int32 哈希函数的 C mex 接口。 我发现在Matlab中实现此功能比较笨拙,因此我在C中实现了它。 有关哈希函数的信息,请参阅...

    Python映射拆分操作符用法实例

    本文实例讲述了Python映射拆分操作符用法。... 您可能感兴趣的文章:python如何拆分含有多种分隔符的字符串Python实现简单拆分PDF文件的方法Python字典数据对象拆分的简单实现方法python分割和拼接字符串Pytho

Global site tag (gtag.js) - Google Analytics