HOWTO · Python

Como usar a instrução if com strings em Python

Aprenda a usar if para comparar strings em Python. Veja como testar igualdade, buscar substrings, conferir respostas permitidas e lidar com diferenças entre maiúsculas e minúsculas.

Nesta página

Use uma instrução if com == para comparar o conteúdo de strings, in para verificar se um trecho aparece em uma string ou se uma resposta está entre as opções aceitas, e métodos como lower() quando a comparação deve ignorar maiúsculas e minúsculas. Escolha a condição conforme a tarefa: por padrão, a comparação de strings diferencia a caixa das letras, enquanto is verifica se dois nomes apontam para o mesmo objeto, e não se o texto é igual.

Comparação básica de strings

Use == quando duas strings devem conter o mesmo texto e != quando devem ser diferentes. Os nomes usados nos dois lados da comparação precisam ter sido definidos antes da execução da condição. Para saber mais sobre comparações entre strings, consulte Comparação de strings em Python.

Este exemplo verifica se o nome corresponde ao esperado:

name = "Alice"
if name == "Alice":
    print("Hello, Alice!")
else:
    print("You're not Alice.")

O Python diferencia maiúsculas de minúsculas ao comparar strings; por isso, "Alice" == "alice" é falso. Também é possível comparar comprimentos com len() quando a tarefa envolve tamanho, e não conteúdo:

word1 = "Python"
word2 = "Programming"
if len(word1) < len(word2):
    print(f"{word1} is shorter than {word2}")
else:
    print(f"{word1} is not shorter than {word2}")

Os operadores <, >, <= e >= comparam strings em ordem lexicográfica, com base nos pontos de código Unicode. Eles não comparam o significado das palavras nem garantem uma ordem alfabética adequada a todos os idiomas. Para ordenar texto exibido a usuários, use um método de ordenação apropriado à localidade.

Usando a palavra-chave in com strings

Quando aplicado a uma string, in verifica se o texto à esquerda aparece nela como substring. A verificação diferencia maiúsculas de minúsculas e não exige que o trecho encontrado seja uma palavra inteira:

sentence = "Python is awesome"
if "awesome" in sentence:
    print("The sentence contains 'awesome'")

Para verificar se uma entrada corresponde exatamente a uma entre várias strings aceitas, use uma coleção. Neste exemplo, a resposta da pessoa é convertida para minúsculas antes da verificação de pertencimento:

user_input = "y"
if user_input.lower() in ["y", "yes", "yeah"]:
    print("User agreed")
else:
    print("User did not agree")

Para ver outras formas de verificar se uma string contém outra, consulte Como verificar se uma string contém outra string em Python. Para localizar várias ocorrências, consulte Como encontrar todas as ocorrências de um caractere em uma string.

Comparação de strings sem diferenciar maiúsculas de minúsculas

Converta os dois lados para uma forma normalizada quando a comparação deve ignorar a caixa das letras. lower() é uma opção comum para correspondências simples; casefold() foi criado para comparações Unicode mais abrangentes que ignoram maiúsculas e minúsculas. A normalização muda a forma como a comparação é feita, então use-a somente quando a tarefa exigir esse comportamento.

user_input = "YES"
if user_input.lower() == "yes":
    print("Affirmative response received")

A mesma abordagem funciona para verificar se um valor pertence a uma coleção:

color = "RED"
if color.lower() in ["red", "blue", "green"]:
    print("Color accepted")
else:
    print("Color not accepted")

Use lower() ou upper() para conversões simples entre maiúsculas e minúsculas. Veja mais exemplos em Como converter uma string para minúsculas ou maiúsculas em Python.

Comparações avançadas de strings

Detecção de anagramas

Ordenar os caracteres é uma maneira simples de verificar se duas strings contêm os mesmos caracteres na mesma quantidade:

word1 = "listen"
word2 = "silent"
if sorted(word1) == sorted(word2):
    print("The words are anagrams")

Nesse exemplo, letras maiúsculas e minúsculas são caracteres diferentes, e espaços e sinais de pontuação também entram na comparação. Normalize ou filtre as strings antes, se esses elementos não devem ser considerados.

Uso de métodos de string

Métodos como startswith() e endswith() permitem verificar diretamente se uma string começa ou termina com determinado trecho:

filename = "document.txt"
if filename.endswith(".txt"):
    print("Text file detected")

Múltiplas condições

Combine verificações com and, or e not. Para que a condição inteira seja verdadeira, cada parte ligada por and também precisa ser verdadeira:

name = "John Doe"
if name.startswith("John") and " " in name:
    print("Name matches the expected format")

Essa é apenas uma verificação simples de texto; ela não valida todos os formatos de nome possíveis.

Comparação de identidade

is verifica se dois nomes se referem ao mesmo objeto. Para comparar o conteúdo das strings, use ==; a identidade do objeto não é uma forma confiável de testar se os textos são iguais.

first = "Python"
second = "Python"
if first == second:
    print("The strings have equal contents")

Conclusão

Use == ou != para comparar o conteúdo de strings, in para verificar se um trecho está em uma string ou se um valor pertence a uma coleção, e normalize a caixa quando maiúsculas e minúsculas não devem fazer diferença. Para verificar prefixos e sufixos, use os métodos apropriados da string. Para comparar textos, escolha ==: is responde a outra pergunta, sobre a identidade do objeto.

Perguntas frequentes

A comparação de strings diferencia maiúsculas de minúsculas em Python?
Sim. Por padrão, "Python" e "python" são strings diferentes. Normalize os dois valores quando a caixa das letras não deve importar.

Uma instrução if pode verificar várias condições relacionadas a strings?
Sim. Combine condições com and ou or e use parênteses quando eles ajudarem a deixar claro como as condições devem ser agrupadas.

Qual é a diferença entre == e is?
== compara valores; is verifica se duas referências apontam para o mesmo objeto. Use == para comparar o conteúdo de strings.

Como verifico se uma string começa ou termina com determinado texto?
Use startswith() ou endswith(). Por exemplo: filename.endswith(".txt").

Posso usar expressões regulares em uma condição if?
Sim. Quando as regras de correspondência exigirem um padrão, chame na condição uma função do módulo re do Python, como re.search(pattern, text). Para verificações simples de substring, in costuma ser mais direto.