我怎样才能让它发挥作用?我试图定义一个返回字符串的函数,该函数是参数的副本,但所有大写的ASCII字母都已转换为小写ASCII字母。我不想使用任何其他内置函数,如.upper()等或字典。
ASCII_LOWERCASE = "abcdefghijklmnopqrstuvwxyz"
ASCII_UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
DECIMAL_DIGITS = "0123456789"
def to_lower(a_string):
if not a_string:
return False
for i in a_string:
if not (i in ASCII_LOWERCASE or i in ASCII_UPPERCASE):
return False
if i in ASCII_LOWERCASE or i in ASCII_UPPERCASE:
for i in ASCII_UPPERCASE:
return ASCII_LOWERCASE
y=to_lower("ABCabc")
print(y)
打印出来:abcdefghijklmnopqrstuvwxyz
答案 0 :(得分:3)
您可以根据其项目创建字母字典,然后使用以下函数转换字符串:
>>> d=(dict(zip(ASCII_UPPERCASE,ASCII_LOWERCASE)))
>>> def to_lower(a_string):
... return ''.join(d[i] if i in d else i for i in a_string)
...
>>> to_lower("A")
'a'
>>> to_lower("Aa23BC")
'aa23bc'
答案 1 :(得分:1)
您的代码无法工作的部分原因是因为当您在循环中间执行return
语句时,该函数将退出,并且不会在其中进一步循环或处理。
通过使用查找表,以下几个工作版本都以基本相同的方式执行您想要的操作。我将它们全部包括在内,因为它不清楚我对你允许使用哪些内置插件的所有人为限制。
请注意,每个版本的函数最后只有一个return
语句。
# note these two are same as string.ascii_lowercase and string.ascii_uppercase
ASCII_LOWERCASE = "abcdefghijklmnopqrstuvwxyz"
ASCII_UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def to_lower(a_string):
chars = []
for char in a_string:
if char in ASCII_UPPERCASE:
chars.append(ASCII_LOWERCASE[ord(char)-ord('A')])
else:
chars.append(char)
return ''.join(chars)
y=to_lower("ABC-123.abc")
print(y) # --> abc-123.abc
下一个版本从其他两个版本手动创建一个转换表,然后手动将其应用于字符串的每个字符。
TRANSLATE_TABLE = [ASCII_LOWERCASE[v-ord('A')] if chr(v) in ASCII_UPPERCASE else
chr(v) for v in range(256)]
def to_lower(a_string):
return ''.join(TRANSLATE_TABLE[ord(char)] for char in a_string)
y=to_lower("ABC-123.abc")
print(y) # --> abc-123.abc
此最终版本使用静态字符串方法maketrans()
来构建转换表,然后将其与字符串对象参数的translate()
方法一起应用,以执行一次调用中所需的任何和所有替换。它是最有效和最短的。
TRANSLATE_TABLE = ''.maketrans(ASCII_UPPERCASE, ASCII_LOWERCASE)
def to_lower(a_string):
return a_string.translate(TRANSLATE_TABLE)
y=to_lower("ABC-123.abc")
print(y) # --> abc-123.abc