A到L小写,M到Z大写

时间:2018-11-08 20:16:11

标签: python string uppercase lowercase

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

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

2 个答案:

答案 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)