В немецкой среде и при работе с Python 3.x - как мне сохранить умляуты при преобразовании символов ASCII в верхний регистр? - PullRequest
0 голосов
/ 13 июля 2020

В немецкой среде и при работе с Python 3.x - как я могу сохранить умляуты при преобразовании символов ASCII в верхний регистр? "Öfter TUT Übermut SELTEN gut".lower() дает "öfter tut übermut selten gut". Тем не менее, я хочу сохранить «Ö» и «Ü».

1 Ответ

0 голосов
/ 13 июля 2020

Могут быть и лучшие (более эффективные) решения, но как насчет:

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 символы

...