创建我自己的字符串函数

Bri*_*ian -1 python

def tlower(str1):
    list = list(str1)
    final = ''
    for char in range(0,len(str1)):
        if list[char] in UPPERCASE:
            for ascii in range(0,len(UPPERCASE)):
                if list[char] == UPPERCASE[ascii]:
                    list[char] = LOWERCASE[ascii]
        final += list[char]
    return final
Run Code Online (Sandbox Code Playgroud)

注意 - UPPERCASE和LOWERCASE是所有大写/小写字母的字符串

注意 - 不能使用python内置的任何字符串函数(替换等)

我有这个函数将任何字符串转换为全部小写,(是的,我知道有一个内置函数..)但是与我创建的其他字符串函数相比,这是相当长的,我应该采取更好的方法来做这样做?

Hug*_*ell 5

UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LOWERCASE = "abcdefghijklmnopqrstuvwxyz"

def to_lower(s, trans=dict(zip(UPPERCASE, LOWERCASE))):
    return ''.join(trans.get(ch,ch) for ch in s)

print to_lower('This Is a TEST')   # => 'this is a test'
Run Code Online (Sandbox Code Playgroud)

编辑:

zip() 获取两个列表并返回值对,即

zip('ABC', 'abc')    # => [('A','a'), ('B','b'), ('C','c')]
Run Code Online (Sandbox Code Playgroud)

dict() 制作字典 - 在这种情况下,

{'A':'a', 'B':'b', 'C':'c'}
Run Code Online (Sandbox Code Playgroud)

trans.get(x, y)是一种更紧凑的说法trans[x] if x in trans else y.在这种情况下,"如果您有这封信的小写版本,请将其退回,否则将其归还原始信件".

如果你不喜欢.join,那么减少怎么样?

from operator import add

def to_lower(s, trans=dict(zip(UPPERCASE, LOWERCASE))):
    return reduce(add, (trans.get(ch,ch) for ch in s), '')
Run Code Online (Sandbox Code Playgroud)