【python challenge】Level1

写在前面

发现一个很有意思的python学习网站:http://www.pythonchallenge.com
解决现在的问题然后才能看到后面的问题,前提是你别去看剧透,有点OJ的感觉,但比OJ要有意思一点,通过自己的思考进阶到下一个Level获得成就感满满+1。然后可以在wiki查看solution,wiki中有各种花式的solution观摩.

很有意思的是,都知道在python中输入this.py 会输出The Zen of Python,里面的源代码也是活生生的反面教材

Learn

  • str.maketrans(source_str, target_str)[pyton3.3之前在string.maketrans]:创建字符串映射,定义了source_str到target_str的一一对应的映射,两个字符串长度必须相等,用于str.translate转换
  • str.translate(text, map_str):根据map_str对text进行转换,也可以直接使用text.translate(map_str)
import string

text = "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."
table = str.maketrans(string.ascii_lowercase, string.ascii_lowercase[2:] + string.ascii_lowercase[:2])
result = str.translate(text, table)
print(result)
print(text.translate(table))

My solution

program_str = "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."
result = ""
lower_chr = []
for ind in range(26):
    ch = chr(ord('a') + ind)
    lower_chr.append(ch)

for i, ch in enumerate(program_str):
    chr_int = ord(ch) + 2
    if ord('a') <= ord(ch) <= ord('z'):
        chr_ind = chr_int - ord('a')
        chr_ind %= 26
        result += lower_chr[chr_ind]
    else:
        result += ch

print(result)

猜你喜欢

转载自blog.csdn.net/coderling/article/details/76737912