Codewar (1)

0x00  前言

登陆了codewar平台刷题,被大神虐的非常惨 做了几道题感觉有些收获,记录一发

0x01 凯撒加密

这个程序曾经写过,记得利用chr() ord()函数判断ascii码范围

def encryptor(key, message):
    #Program me!
    lower=ord('a')
    upper=ord('A')
    ome=''
    for i in range(0,len(message)):
        if message[i].islower():
            offset = (ord(message[i])-lower+key)%26
            ome+=chr(lower+offset)
        elif message[i].isupper():
            offset = (ord(message[i])-upper+key)%26
            ome+=chr(upper+offset)
        else:
            ome+=chr(ord(message[i]))
    return ome`


然而 大牛来打脸了

#clever 1
#ascii_lowercase ascii_uppercase 是内置的小写和大写字母的字符串
#string.maketrans(from,to) 产生一个转换表可以供translate使用 将from中的每个字母映射到to中的对应位置

from string import maketrans as mt ,ascii_lowercase as lc ,asscii_uppercase as uc

def encryptor(key,message):
    key %=26
    return message.translate(mt(lc+uc,lc[key:]+lc[:key]+uc[key:]+uc[:key]))

第二次打脸

#str.isalpha() 判断是否是字母
#将i.isupper() 用在表达式中 判断字母大小写
#  return ''.join(lst) 将最开始的字符串初始化省略
#字符串可以直接迭代 不用用数组分割
#将列表转换成字符串用 ''.join()

def encryptor (key, mess):
    lst = []
    for i in mess:
        if i.isalpha():
            C = 97 - 32 * i.isupper()
            lst.append (chr ((ord (i) - C + key)%26 + C))
        else:
            lst.append (i)
    return ''.join (lst)`

0x02Weird String

`# This is a test => ThIs A TeSt
#This => ThIs
#My solution
'''
from string import ascii_uppercase as uc ,ascii_lowercase as lc
def to_weird_case(string):
    str1=''
    lt1=[]
    lt=string.split()
    for n in lt:
        m=0
        for i in n:
            if i in uc or i in lc:
                if m%2==0:
                    str1+=i.upper()
                    m+=1
                else:
                    str1+=i.lower()
                    m+=1
        lt1.append(str1)
        str1=''
    strf=''
    for i in range(0,len(lt1)):
        if len(lt1)>1:
            strf+=lt1[i]+' '
        else:
            strf+=lt1[0]
    if len(lt1)>1:
        strf=strf[0:len(strf)-1]
    return strf
'''`

`#clever 1

def to_weird_case_word(string):
    return "".join(c.upper() if i%2 == 0 else c for i, c in enumerate(string.lower()))
    
def to_weird_case(string):
    return " ".join(to_weird_case_word(str) for str in string.split())`

`'''
黑魔法 1: for i,c in enumerate(string)
黑魔法 2 : ' '.join 将字符串间插入空格
'''
#clever 2

def to_weird_case(string):
    recase = lambda s: "".join([c.upper() if i % 2 == 0 else c.lower() for i, c in enumerate(s)])
    return " ".join([recase(word) for word in string.split(" ")])

 


`

posted on 2016-06-20 15:11  月尽西楼  阅读(1019)  评论(0编辑  收藏  举报

导航