я увидел это заявление в официальном Python documentation:.str.upper() ISUPPER() может быть Ложные
str.upper().isupper() might be False
Может кто-то объяснить?
я увидел это заявление в официальном Python documentation:.str.upper() ISUPPER() может быть Ложные
str.upper().isupper() might be False
Может кто-то объяснить?
Если строка номер или состоит из символов без прописной вариант (специальные символы и т.д.) Например:
>>> '42'.upper().isupper()
False
>>> '-'.upper().isupper()
False
И, как и ожидалось:
>>> '42a'.upper().isupper()
True
Соблюдайте осторожность, так как существует некоторое странное поведение для многих символов Юникода (см. ответ от thg435: https://stackoverflow.com/a/16495101/531222)
Этот ответ не совсем корректен. Многие символы, имеющие варианты в верхнем регистре, все равно вернут false. – georg
И последующие действия неверны либо, извините. – georg
Спасибо, я добавил это!Почему это происходит неправильно? Есть строка, для которой '.upper(). Islower()' is 'True'? '' ß'.upper(). islower() 'is' False' в моих версиях python ... (2.7.1, 2.6.5) – tamasgal
Есть вещи, которые не имеют верхнего регистра (я думаю, что только буквы делают, и даже не на всех языках).
Таким образом, они не будут опускаться upper
, а затем не будут isupper
.
Более контекст их заявление:.
str.upper() ISUPPER() может быть ложным, если s содержит бескорпусных символы или если категория Unicode полученного символа (ов) не является «Лу " (буква, прописная буква), но, например, «Lt» (Письмо, заголовок).
Пример необсаженного характер:
>>> '1'.upper().isupper()
False
Да, это правда, в случае, если строка содержит цифры и другие символы, которые не имеют верхнийРЕГИСТРа
Если строка состоит из символов Юникода, что Безразлично» т поддержка прописные:
>>> "عربية للفوتوشوب".upper().isupper()
False
str.upper
не имеет смысла для чисел:
>>> "3432".upper().isupper()
False
На мой взгляд, isupper
/islower
функции разбиты на питона. Во-первых, они используют неправильное определение «обведенное». В Юникоде есть много символов, которые имеют варианты верхнего/нижнего регистра, но не относятся к категории L
. Например, Ⓐ
явно прописной и имеет эквивалент нижнего регистра ⓐ
, но "Ⓐ".isupper()
является ложным в python. См. this bug report для более подробной информации.
Во-вторых, есть логическая ошибка. isupper
- это то же самое, что «все обложенные символы верхние в этой строке», и если нет обложенных символов, он должен возвращать True, а не False, точно так же, как встроенный all()
(«все единороги красные»). Таким образом, можно было бы легко избежать путаницы.
Последующий вопрос: может 'str.upper(). Islower()' be 'True'? – Hammerite
@Hammerite: да, например 'ß' (DF) – georg