A 到 L 小写和 M 到 Z 大写

A to L lower and M to Z uppercase

我正在尝试为字符串设置一些条件。
条件是如果字符是 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"))

有没有更好的方法来解决这个问题?

是的,上述算法将 运行 二次方时间,这意味着对于较大的字符串,这将需要一些时间。此外,您还循环了两个列表,严格来说,这对时间复杂度没有影响,但会显着降低程序速度。

我们可以使用像 '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' 范围内的字符小写,否则大写)。然后我们将这些字符连接在一起。

短方法

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)