2013-05-11 2 views

ответ

4

Если строка номер или состоит из символов без прописной вариант (специальные символы и т.д.) Например:

>>> '42'.upper().isupper() 
False 
>>> '-'.upper().isupper() 
False 

И, как и ожидалось:

>>> '42a'.upper().isupper() 
True 

Соблюдайте осторожность, так как существует некоторое странное поведение для многих символов Юникода (см. ответ от thg435: https://stackoverflow.com/a/16495101/531222)

+0

Этот ответ не совсем корректен. Многие символы, имеющие варианты в верхнем регистре, все равно вернут false. – georg

+0

И последующие действия неверны либо, извините. – georg

+0

Спасибо, я добавил это!Почему это происходит неправильно? Есть строка, для которой '.upper(). Islower()' is 'True'? '' ß'.upper(). islower() 'is' False' в моих версиях python ... (2.7.1, 2.6.5) – tamasgal

1

Есть вещи, которые не имеют верхнего регистра (я думаю, что только буквы делают, и даже не на всех языках).

Таким образом, они не будут опускаться upper, а затем не будут isupper.

4

Более контекст их заявление:.

str.upper() ISUPPER() может быть ложным, если s содержит бескорпусных символы или если категория Unicode полученного символа (ов) не является «Лу " (буква, прописная буква), но, например, «Lt» (Письмо, заголовок).

Пример необсаженного характер:

>>> '1'.upper().isupper() 
False 
1

Да, это правда, в случае, если строка содержит цифры и другие символы, которые не имеют верхнийРЕГИСТРа

2

Если строка состоит из символов Юникода, что Безразлично» т поддержка прописные:

>>> "عربية للفوتوشوب".upper().isupper() 
False 

str.upper не имеет смысла для чисел:

>>> "3432".upper().isupper() 
False 
4

На мой взгляд, isupper/islower функции разбиты на питона. Во-первых, они используют неправильное определение «обведенное». В Юникоде есть много символов, которые имеют варианты верхнего/нижнего регистра, но не относятся к категории L. Например, явно прописной и имеет эквивалент нижнего регистра , но "Ⓐ".isupper() является ложным в python. См. this bug report для более подробной информации.

Во-вторых, есть логическая ошибка. isupper - это то же самое, что «все обложенные символы верхние в этой строке», и если нет обложенных символов, он должен возвращать True, а не False, точно так же, как встроенный all() («все единороги красные»). Таким образом, можно было бы легко избежать путаницы.

Смежные вопросы