Могут быть и лучшие (более эффективные) решения, но как насчет:
s = "Öfter TUT Übermut SELTEN gut"
def lower_ascii(sentence):
res = []
for char in sentence:
if ord(char) <= 122: # 122 == z
res.append(char.lower())
else:
res.append(char)
return ''.join(res)
print(lower_ascii(s))
Вывод:
Öfter tut Übermut selten gut
Пояснение:
ord()
дает вам значение этого символа как int (unicode). Прочтите об этом здесь - Ascii
z
- это 122 и большее значение между [az] и [AZ] (проверьте это с помощью ord('z')
) - И что Я конвертирую все, что ниже
z
(поскольку все умляуты имеют более высокие значения), оставляя остальное как есть - Использование списка для хранения каждого символа и объединения его обратно в строку вместо добавления новая строка из-за того, что
str
является неизменяемым (должно быть «быстрее» и занимать меньше места)
Вы можете использовать тот же l oop, чтобы делать все, что вам нужно в ascii / non-ascii символы