zoukankan      html  css  js  c++  java
  • 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(" ")])


    `

  • 相关阅读:
    iOS Runtime 实践(1)
    支付宝接口使用文档说明 支付宝异步通知
    ASP.NET中数据棒图,饼图,柱状图的实现
    ASP.NET运行机制之一般处理程序(ashx)
    ASP.NET的一套笔试题
    ASP.NET页面优化性能提升方法记录
    ASP.NET 大文件上传的简单处理
    ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法
    您可能不知道的ASP.Net小技巧
    cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )
  • 原文地址:https://www.cnblogs.com/moonnight/p/5600592.html
Copyright © 2011-2022 走看看