我正在尝试对字符串设置一些条件。
条件是如果字符是从A到L,则将其降低。
如果字符是M到Z的大写字母。
以下是代码
def fun_exercise_6(word):
low = ['a','b','c','d','e','f','g','h','i','j','k','l']
up = ['m','n','o','p','q','r','s','t','u','v','w','x','y','z']
y_res = ''
for ch in word.lower():
for i in low:
if ch == i:
y_res = y_res+''+ch.lower()
for i in up:
if ch == i:
y_res = y_res+''+ch.upper()
return y_res
print(fun_exercise_6("boat"))
有没有更好的方法来解决这个问题?
答案 0 :(得分:2)
是的,上述算法将在二次时间内运行,因此对于较大的字符串,这将需要一些时间。此外,您还循环了两个列表,严格来说,这对时间复杂度没有影响,但是会显着降低程序速度。
我们可以使用'a' <= c <= 'l'
之类的检查来检查字符是否在'a'
和'l'
之间。此外,这里我们不需要自己将字符添加到列表中,我们可以使用''.join(..)
。例如:
def fun_exercise_6(word):
return ''.join(
c.lower() if 'a' <= c.lower() <= 'l' else c.upper() for c in word
)
这里,我们构造了一个生成字符的生成器('a'
至'l'
和'A'
至'L'
范围内的字符为小写,否则为大写)。然后我们将这些角色合并在一起。
答案 1 :(得分:1)
短方法
alphabet = []
# Create the alphabet
for letter in range(97,123):
alphabet.append(chr(letter))
# Loop, and enumerate for position being A-L, then M-Z
for num,i in enumerate(alphabet):
if num < 12:
print(i)
else:
# Turn to upper case if it's m-z
i = i.upper()
print(i)