От A до L и от M до Z - PullRequest
       71

От A до L и от M до Z

0 голосов
/ 08 ноября 2018

Я пытаюсь установить некоторое условие для строки.
Условие: если символ от А до 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 голосов
/ 08 ноября 2018

Короткий метод

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)
0 голосов
/ 08 ноября 2018

Да, приведенный выше алгоритм будет работать в квадратичном времени, что означает, что для больших строк это займет некоторое время. Кроме того, вы также зацикливаетесь на двух списках, это, строго говоря, не влияет на сложность времени, но значительно замедляет программу.

Мы можем использовать проверки типа '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', а в верхнем регистре в противном случае). Тогда мы присоединяемся к этим персонажам вместе.

...