Когда `string.swapcase (). Swapcase ()` не равен `string`? - PullRequest
2 голосов
/ 02 мая 2020

Документация для метода str.swapcase () гласит:

Возвращает копию строки с заглавными буквами, преобразованными в строчные и наоборот. Обратите внимание, что не обязательно верно, что s.swapcase (). Swapcase () == s .

Я не могу вспомнить пример, где s.swapcase().swapcase() != s, может кто-нибудь думает об одном?

Ответы [ 2 ]

5 голосов
/ 02 мая 2020

Простой пример:

s = "ß"

print(s.swapcase().swapcase())

Ouput:

ss

ß - немецкая строчная буква s ( Правильная версия в верхнем регистре будет ). Причина этого заключается в том, что Python не «знает» или не хочет определять преобразование в верхнем регистре для каждого символа Юникод. Таким образом, он принимает простой маршрут, оценивая s.swapcase() как "SS", поэтому s.swapcase().swapcase() равен "ss".

1 голос
/ 02 мая 2020

На самом деле, существует множество примеров: это происходит с некоторыми греческими символами, немецкими символами, армянскими символами и другими специальными / специальными символами.

Чтобы получить их все:

find_dif = lambda s: s.swapcase().swapcase() != s

[chr(s) for s in range(100000) if find_dif(chr(s))]

и вы получите:

['µ', 'ß', 'İ', 'ı', 'ʼn', 'ſ', 'ǰ', 'ͅ', 'ΐ', 'ΰ', 'ς', 'ϐ', 'ϑ', 'ϕ', 'ϖ', 'ϰ', 'ϱ', 'ϴ', 'ϵ', 'և', 'ᲀ ',' ᲁ ',' ᲂ ',' ᲃ ',' ᲄ ',' ᲅ ',' ᲆ ',' ᲇ ',' ᲈ ',' ẖ ',' ẗ ',' ẘ ',' ẙ ', 'ẚ', 'ẛ', 'ẞ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ ',' ᾆ ',' ᾇ ',' ​​ᾐ ',' ᾑ ',' ᾒ ',' ᾓ ',' ᾔ ',' ᾕ ',' ᾖ ',' ᾗ ',' ᾠ ',' ᾡ ', 'ᾢ', 'ᾣ', 'ᾤ', 'ᾥ', 'ᾦ', 'ᾧ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'ι', 'ῂ ',' ῃ ',' ῄ ',' ῆ ',' ῇ ',' ῒ ',' ΐ ',' ῖ ',' ῗ ',' ῢ ',' ΰ ',' ῤ ',' ῦ ', 'ῧ', 'ῲ', 'ῳ', 'ῴ', 'ῶ', 'ῷ', 'Ω', 'K', 'Å', 'ff', 'fi', 'fl', 'ffi ',' ffl ',' ſt ',' st ',' ﬓ ',' ﬔ ',' ﬕ ',' ﬖ ',' ﬗ ']

Давайте проверим их:

s1 = 'µ'
s2 = s1.swapcase().swapcase()

s1 == s2

Ложь

s1 = 'ß'
s2 = s1.swapcase().swapcase()

s1 == s2

Ложь

s1 = 'ﬗ'
s2 = s1.swapcase().swapcase()

s1 == s2

Ложь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...