Как игнорировать регистр в python
Перейти к содержимому

Как игнорировать регистр в python

  • автор:

Python — игнорировать регистр букв

Я хочу, чтобы у пользователя была возможность ответить да, да, yES, да или любая другая капитализация, а для кода знать, что они означают «Да».

5 ответов

Для этого простого примера вы можете просто сравнить нижние rules с «yes» :

Это нормально для многих случаев, но имейте в виду, что некоторые языки могут дать вам хитрые результаты. Например, немецкая буква ß дает следующее:

Таким образом, у нас могут быть проблемы, если наша строка была в верхней части где-то перед нашим вызовом lower() . Такое же поведение можно встретить и на греческом языке. Прочтите сообщение qaru.site/questions/3326/. для получения дополнительной информации.

Таким образом, в общем случае вам может потребоваться использовать str.casefold() (начиная с python3.3), которая обрабатывает сложные случаи и рекомендуется для независимого от случая сравнения:

Это преобразует обе строки в нижний регистр перед тестированием на равенство.

Как сделать игнор на регистр всех символов в строке Python?

Есть строка, например: "Привет" . Она проверяется через if , если это так, то значение равно 1 , иначе 0 .

Но если ввести: "привет" или "привеТ" или "пРивет" и т.д., то значение будет равно 0 .

Как сделать так, чтобы было игнорирование на регистр символов в строке?

Kromster's user avatar

ANDROSHA's user avatar

Казалось бы, можно просто взять и привести обе строки к единому регистру (верхнему или нижнему), однако всё не так просто. Бывает текст, для которого text.lower() != text.upper().lower() , например «ß» :

Допустим, нужно сравнить «BUSSE» и «Buße» , или даже «BUSSE» и «BUẞE» — это всё считается одинаковыми словами в немецком языке. Рекомендуемый способ — использовать метод casefold , который преобразует строку в форму, пригодную для регистронезависимого сравнения.

Но и это ещё не всё. Если у вас текст рендерится корректно, в следующем примере вы можете подумать, что ‘Й’ == ‘Й’ , но это не так:

Дело в том, что первый Й — это один символ (U+0419), а второй Й — комбинация из двух (U+0418 и U+0306):

Если вам нужно считать такие строки одинаковыми, то самый простой способ справиться с этим — использовать unicodedata.normalize . Вероятно, вам стоит использовать нормализацию NFKD, но документация предлагает и другие варианты; можете выбрать то, что подходит для вашей задачи. Тогда:

Объединив это всё, вы можете использовать вот такие функции:

Вольный перевод ответа от Veedrac с enSO. Там есть полезные комментарии, можно их тоже почитать.

Python — Как сделать, чтобы пользовательский ввод не учитывал регистр?

Я новичок в Python и мог бы действительно помочь с этим. Я хочу создать функцию для фильтрации, какие файлы я хочу открыть и какие конкретно месяцы и день. Таким образом, пользователи должны указать, какой город (файлы) они хотят проанализировать, в каком конкретном месяце или дне. Однако я хочу, чтобы пользователь мог вводить то, что не чувствительно к регистру. Например, пользователь может ввести ‘chicago’/’CHICAGO»/»ChIcAgO», и он все равно даст вам правильный вывод, а не сообщение об обработке ошибок. Вот код, который я использую:

4 ответа

Лучший способ сделать это — просто взять требуемые данные и преобразовать их в требуемый случай.

Используйте встроенные функции Python

Вы должны использовать str.casefold снять чувствительность к регистру. Согласно документам, это более строгое, чем str.lower :

str.casefold ()

Вернуть регистр свернутой копии строки. Строки в регистре могут быть использованы для сопоставления без регистра.

Свертывание регистров похоже на нижний регистр, но более агрессивно, потому что оно предназначено для удаления всех различий регистра в строке. Например, немецкая строчная буква «ß» эквивалентна «ss». Так как это уже строчные буквы, lower() ничего не будет делать с ‘ß’; casefold() преобразует его в «ss».

Я только начал изучать Python в декабре 2021 года.

Я столкнулся с похожей проблемой при написании кода для игры «Выбери свою фэнтезийную игру».

Чтобы убрать чувствительность к регистру, используйте функцию string.lower() или string.upper(). Теперь этот ответ ничем не отличается от первого ответа на этот вопрос.

Итак, что здесь особенного?

Что ж, если вы проверяете ответ пользователя, ваш оператор if должен иметь тот же регистр, что и случай, который вы конвертируете, например.

  1. answer = input(«Что такое крыса? ‘Животное’ или ‘Еда'»)

3)if answer.lower() == «animal»:print(«Поздравляем. Вы выиграли!») 5) else:print(«Извините, вы проиграли!»)

  1. answer = input(«Что такое крыса? ‘Животное’ или ‘Еда'»)

3)if answer.upper() == «ЖИВОТНОЕ»:print(«Поздравляем. Вы выиграли!») 5) else:print(«Извините, вы проиграли!»)

NB: Независимо от того, как пользователь набирает свой ответ (ЖИВОТНОЕ, ЖИВОТНОЕ, животное), если ответ правильный, он выигрывает. До тех пор, пока функция тестового случая совпадает со строкой случая (строка 3), которую необходимо протестировать.

Python вывод текста, игнорируя регистр и заданные знаки

В книге «Укус Питона» есть задание: Проверка, является ли текст палиндромом должна также игнорировать знаки пунктуации, пробелы и регистр букв. Например, «А роза упала на лапу Азора» также является палиндромом, но наша текущая программа так не считает. Попробуйте улучить её так, чтобы она распознала этот палиндром.

Вот код который распознает отдельные слова:

я написал кортеж с символами которые нужно исключить forbidden=(‘.’,’?’,’!’,’:’,’;’,’-‘,’—’,’ ‘,) Но как сделать проверку этих символов с последующим их удалением из текста — не понимаю. Просмотрел еще раз предыдущие главы, ничего об этом не нашел. В сети есть решения, но они используют модуль re , а так-как в книге о нем ничего не говорилось, я предполагаю, что есть другое решение, более очевидное. Подскажите, пожалуйста,что я упустил.

Ответы (6 шт):

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

у меня вот так вышло

Первым делом отфильтровать все знаки пунктуации и пробелы, а затем сравнить с перевёрнутой строкой в одном регистре:

Добавлю еще один метод, как можно избавиться от ненужных символов в строке:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *