python中的字符映射

今天无意中进了一个神奇的网站:www.pythonchallenge.com.需要编程闯关才能玩,很刺激。下面给出第一关以及我的解决代码。

===================================================================================================================================

给了一个图片,又给了一个字符串:g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.


字符串什么意思呢?先不管。

看看图片很容易想到字符映射。发现映射规律:k+2=m,o+2=m,e+2=g;

好吧,现在编程把这个规律用在那个莫名其妙的字符串上。

我最先用的c++,代码如下:

#include <iostream>
#include <vector>
using namespace std;

void translateLatters(string &s,int offset)
{
    for(unsigned int i=0;i<s.size();i++)
    {
        if((s[i]=='a'||s[i]>'a') && (s[i]<'z'||s[i]=='z'))
        {
            s[i]=(s[i]+offset);
            if(s[i]>'z')
            {
                s[i]='a'+s[i]-'z'-1;
            }
        }
    }
}

int main()
{
    string s;
    s="g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.";
    translateLatters(s,2);
    cout<<s<<endl;
    cout << "Hello World!" << endl;
    return 0;
}

==============================

根据网站建议,还是用Python吧。

我的第一个Python版本代码如下:

s="g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
m=bytearray.maketrans(b'abcdefghijklmnopqrstuvwxyz',b'cdefgcdefghijklmnopqrstuvwxyzab')
s.translate(m)
bytearray.maketrans(from,to)方法是用来造一个映射表的。from 到 to 的映射表。从上边的代码可以看出我一一列举的方法来建立映射表。

经考察,这个映射表m是Python中的内建数据结构dict。

s.translate(m)的作用是用映射表m将s中的字母映射一下。

其实建立映射表没有这么笨地一一列举,于是有了一个我第二个版本。

我的第二个Python版本代码如下:

import string
text = """g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyramknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb.lmu ynnjw ml rfc spj."""
table = string.maketrans(
string.ascii_lowercase,
string.ascii_lowercase[2:]+string.ascii_lowercase[:2])
text.translate(table) #str.translate(text,table) is ok too

映射完成后,根据提示顺利进入第二关。日后跟新第二关,今儿就先到这里吧。

通过古哥(google),我发现了“游戏后门”:http://garethrees.org/2007/05/07/python-challenge/。哎,有点儿邪恶



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值