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
注意 - 大写和小写字母是所有大写/小写字母的字符串
注意 - 不能使用python内置的任何字符串函数(替换等等)
我有这个函数将任何字符串转换为全部小写,(是的,我知道有一个内置函数..)但是与我创建的其他字符串函数相比,这是相当长的,我应该更好的方法这样做?
答案 0 :(得分: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'
编辑:
zip()
获取两个列表并返回值对,即
zip('ABC', 'abc') # => [('A','a'), ('B','b'), ('C','c')]
dict()
制作字典 - 在这种情况下,
{'A':'a', 'B':'b', 'C':'c'}
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), '')
答案 1 :(得分:1)
为了完整性:
def to_lower(string):
ords = (ord(c) for c in string)
return ''.join(chr(o + 32 * (65 <= o <= 90)) for o in ords)