Strings em Python - #04
Joao Carlos Sousa do Vale
Posted on April 19, 2022
Introdução
Strings representam cadeias ou sequências de caracteres, em outras palavras, texto.
Neste capítulo vamos aprender a utilizar algumas funções pré definidas usadas com as strings, mas antes gostaria de apresentar a função input() recebendo uma mensagem de texto.
Usando o input() com mensagem
Podemos fornecer uma mensagem ao usuário, como valor na função input(). Chamamos de argumento o valor que fornecemos numa função.
#Sintaxe - input() com argumentos
<variável> = input(<mensagem_tela>)
Nosso programa da seção anterior pode ser reescrito com o input recebendo a mensagem a ser escrita na tela.
#Programa para ler e imprimir nome do usuario
name = input('Digite seu nome:')
print('Bem vindo ' + name)
Na linha 02 chamamos o método input() escrevendo na tela a mensagem 'Digite seu nome:'
.
λ python lendoTecladoInputMensagem.py
Digite seu nome:Jose
Bem vindo Jose
Regras básicas de Strings
O valor de uma string deve estar entre aspas simples ou aspas duplas, a linguagem Python permite utilizar ambos os delimitadores, tornando mais flexível e fácil o trabalho do programador.
#Exemplo - liberdade em usar aspas simples ou duplas
>>> uma_string = 'Sou uma string valida'
>>> print(uma_string)
Sou uma string valida
>>> outra_string = "Sou outra string valida"
>>> print(outra_string)
Sou outra string valida
No exemplo abaixo, o valor da variável pergunta permite utilizar aspas simples no seu valor, uma vez que ele se inicia com aspas duplas. Se tivéssemos inicializado com aspas simples, poderíamos utilizar as aspas duplas dentro do valor da variável.
#Exemplo - flexibilidade no uso de aspas simples e duplas
>>> pergunta = "Quem disse a frase - 'SER OU NAO SER, EIS A QUESTAO!' ?"
>>> print(pergunta)
Quem disse a frase - 'SER OU NAO SER, EIS A QUESTAO!' ?
Caracteres em branco e de escape
Um string em branco pode ser representada pelo simples valor " ", e uma string vazia somente abrindo e fechando aspas sem digitar qualquer valor dentro dela.
#Exemplo - String vazia e em branco
>>> string_em_branco = " "
>>> string_vazia = ""
>>> len(string_em_branco)
1
>>> len(string_vazia)
0
Observe que uma string vazia possui tamanho ZERO.
Outra forma de representar strings em branco é através do uso de caracteres de escape como:
- o “\t” que representa o tab do teclado, ou 4 espaços em branco;
- o “\n” que representa uma nova linha;
#Exemplo - \n e \t
>>> frase = "\t O uso de caracteres de escape eh comum. \n Experimente no shell"
>>> print(frase)
O uso de caracteres de escape eh comum.
Experimente no shell
>>> frase = "Usando somente \t\t\t o TAB"
>>> print(frase)
Usando somente o TAB
>>> frase = "Usando somente \n\n\n o NOVA LINHA"
>>> print(frase)
Usando somente
o NOVA LINHA
As aspas simples e duplas também podem ser representadas como caracteres de escape:
- \’ representando aspas simples
- \” representando aspas simples
#Exemplo - usando \' e \"
>>> texto = 'Exemplo de \'aspas simples\''
>>> print(texto)
Exemplo de 'aspas simples'
>>> texto = "Exemplo de \"aspas duplas\" "
>>> print(texto)
Exemplo de "aspas duplas"
Comparação entre strings
Podemos utilizar operadores relacionais (>, <, ==, !=, <=, >=) com strings.
As strings têm como características serem case sensitives, então duas strings são consideradas iguais se possuem os mesmos caracteres, desta forma ‘a’ é diferente de ‘A’.
Quando comparamos strings, a classificação que elas obedecem é a ordem alfabética, as palavras iniciando em maiúsculo são menores que as palavras iniciando em minúsculo. As strings numéricas, além de obedecerem a ordem alfabética, são menores quando comparadas com strings alfabéticas.
Experimente os exemplos abaixo.
#Comparando strings
>>> str1 = "abacate"
>>> str2 = "casa"
>>> str1 > str2
False
>>> str1 < str2
True
>>> str3 = "Aba"
>>> str1 > str3
True
>>> str3 > str1
False
>>> str4 = "10"
>>> str5 = "2"
>>> str4 > str5
False
>>> str5 > str4
True
>>> str1 > str4
True
>>> str3 > str4
True
String multilinha
Podemos representar múltiplas linhas em uma string através do uso do escape “\n”, como no exemplo:
#Exemplo - multilinha usando \n
>>> texto = "Paragrafo 1\nParagrafo 2"
>>> print(texto)
Paragrafo 1
Paragrafo 2
Mas uma alternativa é através do uso de três aspas simples ('''), veja como fica o exemplo anterior no shell:
#Exemplo - multilinha usando ''' no shell
>>> texto = '''Paragrafo 1
... Paragrafo 2'''
>>> print(texto)
Paragrafo 1
Paragrafo 2
Ou criando um arquivo .py e executando:
#Programa multilinha.py
texto = '''
Paragrafo 1
Paragrafo 2
Paragrafo 3
'''
print(texto)
#Exemplo - execução de multilinha.py
Paragrafo 1
Paragrafo 2
Paragrafo 3
Usando multilinhas também tem mais flexibilidade no uso de aspas simples e duplas:
#Exemplo - flexibilidade com multilinhas no shell
>>> texto = '''Como se traduz a expressao: "He's a boy" ?'''
>>> print(texto)
Como se traduz a expressao: "He's a boy" ?
Métodos e funções úteis para strings
Função len( )
A função len( ) retorna o tamanho ou a quantidade de caracteres de uma string.
#Função len() em ação no shell
>>> len('quantos caracteres eu possuo?')
29
Agora é a sua vez! |
Faça um programa que leia o nome do usuário e mostre a quantidade de caracteres do nome. |
Método title( )
Um método é uma ação que pode ser executada em um pedaço de dados. Diferente de uma função simples, como a len( ), a sintaxe para executar um método é usando o nome da variável, um ponto (.) e o nome do método.
O primeiro método que vamos aprender das strings é o title que coloca o primeiro caractere em maiúsculo, das strings separadas por espaço.
#Método title() em ação no shell
>>> nome = 'joao carlos'
>>> print(nome.title())
Joao Carlos
>>> nome = 'lara maria'.title()
>>> print(nome)
Lara Maria
Método upper( ) e lower( )
Transformam a string toda em maiúsculo (upper) ou em minúsculo (lower).
#Método upper() e lower() em ação no shell
>>> nome = 'APrendendo Python'
>>> print(nome.lower())
aprendendo python
>>> print(nome.upper())
APRENDENDO PYTHON
Métodos isupper( ) e islower( )
Os métodos isupper() e islower() retornam um valor booleano: True ou False.
O método isupper() retorna verdade (True) se a string estiver em maiúsculo e falso (False) se não estiver em maiúsculo. E o método islower() retorna verdade (True) se a string estiver em minúsculo e falso (False) se não estiver em minúsculo.
#Método isupper() e islower() em ação no shell
>>> "Joao".isupper()
False
>>> "Joao".islower()
False
>>> "casa".islower()
True
>>> "ASA".isupper()
True
>>> "12".islower()
False
>>> "12".isupper()
False
>>> "asa123".islower()
True
>>> "12asa".islower()
True
>>> "CASA_12".isupper()
True
>>> "__CARRO_".isupper()
True
Métodos isalpha( ), isalnum( ), isdecimal( ), isspace( ), istitle( )
O método isalpha( ) retorna True se a string é formada somente de letras e não é vazia.
O método isalnum( ) retorna True se a string é formada de letras e números, e não é vazia.
O método isdecimal( ) retorna True se a string é formada somente de números e não é vazia.
O método isspace( ) retorna True se a string é formada somente de espaços, linhas em branco e não é vazia.
O método istitle( ) retorna True se a string possui palavras que iniciam com a letra maiúscula.
#Métodos isX() em ação no shell
>>> "Python".isalpha()
True
>>> "Python3".isalnum()
True
>>> "Python 3.0".isalnum()
False
>>> "Python3.0".isalnum()
False
>>> "1234".isdecimal()
True
>>> "3.14".isdecimal()
False
>>> " ".isspace()
True
>>> "Curso De Python".istitle()
True
>>> "Curso de Python".istitle()
False
Métodos startswith(), endswith()
O método startswith( ) retorna True se a string possui um determinado prefixo, ou, se a string inicia com um determinado valor.
O método endswith( ) retorna True se a string possui um determinado sufixo, ou, se a string termina com um determinado valor.
#startswith(), endswith() em ação no shell
>>> "Sr. Jose".startswith("Sr.")
True
>>> "amorzinho".endswith("zinho")
True
>>> "linguagem".startswith("L")
False
Métodos rjust(), ljust(), center()
São métodos que inserem espaços em branco na string para completar um determinado tamanho. O tamanho é enviado como argumento do método.
O método rjust() insere uma quantidade de espaços em branco no lado esquerdo da string. A string fica ao lado direito (right).
O método ljust() insere uma quantidade de espaços em branco no lado direito da string. A string fica ao lado esquerdo (left).
O método center() insere uma quantidade de espaços em branco no lado direito e esquerdo da string. A string fica centralizada (center).
#rjust(), ljust(), center() em ação no shell
>>> "Python".rjust(15)
' Python'
>>> "Python".ljust(15)
'Python '
>>> "Python".center(10)
' Python '
É possível indicar qual caractere inserir, em vez de utilizar o espaço em branco.
#rjust(), ljust(), center() substituindo o espaço em branco
>>> "Python".rjust(15, '*')
'*********Python'
>>> "Python".ljust(15, '#')
'Python#########'
>>> "Python".center(10, '-')
'--Python--'
Métodos strip( ), rstrip( ), lstrip( )
Método de strip em uma string, significa remover espaços ou caracteres em branco, que não são visíveis, da string.
#strip em ação no shell
>>> mensagem = " alguma mensagem "
>>> len(mensagem)
20
>>> mensagem = mensagem.strip()
>>> len(mensagem)
15
>>> print(mensagem)
alguma mensagem
Este método é bastante utilizado para diminuir o tamanho do valor de uma string que possui espaços em branco no início ou no final. Veja no exemplo anterior que somente os espaços em branco das extremidades são removidos. Se existir espaços em branco entre strings dentro do valor, eles não serão removidos.
Além do strip( ), Python possui o rstrip( ) que remove espaços em branco do lado direito (r de right) da string e o lstrip( ) que remove espaços em branco do lado esquerdo (l de left).
#lstrip() e rstrip() em ação no shell
>>> message = ' \t Alguma mensagem aqui. \t '
>>> print(message)
Alguma mensagem aqui.
>>> print(message.lstrip())
Alguma mensagem aqui.
>>> print(message.rstrip())
Alguma mensagem aqui.
Funções ord( ), chr( )
Os caracteres nas linguagens de programação são representados por números. Existe uma tabela, denominada Unicode que mapeia o valor de um caractere em sua representação numérica (veja tabela).
A função ord( ) retorna o valor numérico de um caractere e a função chr( ) retorna o caractere de um valor numérico.
#ord() e chr() em ação no shell
>>> ord("A")
65
>>> ord("C")
67
>>> ord("S")
83
>>> chr(90)
'Z'
>>> print(chr(67)+chr(65)+chr(83)+chr(65))
CASA
Uma forma interessante de transformar um caractere numérico para seu valor numérico é subtraindo da referência do valor do caractere ‘0’. Observe o código abaixo.
#ord() calculando valor numérico
>>> ord('0')
48
>>> ord('9')
57
>>> ord('9') - ord('0')
9
>>> ord('7') - ord('0')
7
f-strings
A partir do Python 3.6, podemos utilizar a sintaxe f-strings para formatar strings. Veja o exemplo.
#f-strings em ação no shell
>>> nome = 'Pedro Alvares'
>>> sobrenome = 'Cabral'
>>> mensagem = f"Seja bem vindo, {sobrenome} - {nome}"
>>> print(mensagem)
Seja bem vindo, Cabral - Pedro Alvares
A sintaxe f-strings se inicia com a letra “f” antes das aspas duplas, e no valor da string que estamos criando é possível inserir diretamente os valores armazenados em variáveis, representadas entre chaves (“{ }”).
No exemplo acima, a instrução f"Seja bem vindo, {sobrenome} - {nome}" ,
gera uma string de valor “Seja bem vindo, Cabral - Pedro Alvares”, lendo os valores da variável sobrenome e da variável nome, ambos dentro das chaves { }. Se você não colocar entre chaves, serão interpretados pela linguagem como valores simples.
#Entendendo o acesso de variáveis em f-strings
>>> nome = 'Pedro Alvares'
>>> sobrenome = 'Cabral'
>>> mensagem = f"Seja bem vindo, {sobrenome} - {nome}"
>>> print(mensagem)
Seja bem vindo, Cabral - Pedro Alvares
>>> mensagem = f"Seja bem vindo, sobrenome - nome"
>>> print(mensagem)
Seja bem vindo, sobrenome - nome
Também utilizando f-string podemos imprimir valores numéricos sem a necessidade de utilizar a função str( ).
#Imprimindo números com f-strings
>>> num = 10
>>> print(f"Meu numero preferido eh o numero {num}")
Meu numero preferido eh o numero 10
r-string
Semelhante ao f-strings temos o comando r-string que permite ler a string ignorando os caracteres de escape e imprimindo a “\”.
#Imprimindo com r-strings
>>> print(r'Meu nome \t Joao')
Meu nome \t Joao
>>> print(r"C:\temp")
C:\temp
Ler uma string com r-string é bastante útil quando o valor representa um caminho de pastas ou diretórios de uma máquina, que contém muitas “\”.
Substituindo caracteres
Utilizamos o método replace( ) para remover caracteres em uma string. Este método não modifica o valor da variável ou da string, mas retorna uma nova string.
#Sintaxe replace()
<str>.replace(<str_substituir>, <str_novo>[, <max_ocorrencia>])
<max_ocorrencia>: indica a quantidade máxima
de ocorrências a serem substituídas.
Apesar de ser um método de substituição, você pode substituir uma parte da string pelo caractere vazio “”.
Experimente no seu shell.
#Uso do replace( )
>>> "azul, preto, banana, amarelo".replace(" banana,", "")
'azul, preto, amarelo'
>>> texto = "Estou aprendendo Java"
>>> texto.replace("Java", "Python")
'Estou aprendendo Python'
>>> texto = "casa, comida, roupa, sapato"
>>> texto.replace(", ", "-> ")
'casa-> comida-> roupa-> sapato'
>>> texto.replace(", ", "# ", 1)
'casa# comida, roupa, sapato'
No último caso, executamos o replace( ) passando o número de ocorrências a serem alteradas igual a 1, neste caso, somente a primeira ocorrência foi substituída.
Incorporando valores em uma string usando %s
Apesar de não ser um método ou função, faltou comentarmos como inserir valores em uma string usando o operador %.
Podemos inserir valores em uma string através da representação %s e incluir o valor ou variável, posteriormente, como no exemplo:
#Inserindo valores em uma string com %
>>> num = 10
>>> mensagem = "Meu numero preferido eh o numero %s"
>>> print(mensagem % num)
Meu numero preferido eh o numero 10
>>> print(mensagem % 20)
Meu numero preferido eh o numero 20
Observe que temos a variável num recebendo o valor 10 e a variável mensagem com o valor "Meu numero preferido eh o numero %s"
. O token %s indica a posição onde será inserido valores na string.
Na instrução print(mensagem % num)
, novamente utilizando o %, indicamos que o valor usado na string será da variável num. Analogamente, na instrução print(mensagem % 20)
, o valor utilizado será o número 20.
Podemos passar múltiplos valores, passando entre parênteses os valores a serem utilizados:
#Inserindo múltiplos valores em uma string com %
>>> x = 10
>>> y = 20
>>> template = "O valor de %s multiplicado por %s eh igual a %s"
>>> mensagem = template % (x, y, x*y)
>>> print(mensagem)
O valor de 10 multiplicado por 20 eh igual a 200
No algoritmo acima estamos utilizando 2 variáveis numéricas e 2 variáveis do tipo string. A variável template armazenará somente a string _padrão da mensagem, contendo os _%s. Já a variável mensagem armazenará o valor de template com os valores inseridos: valor de x, valor de y e o valor da multiplicação x * y.
Agora temos 3 operadores “matemáticos” que podem ser utilizados com strings: + (concatenação), * (replicação) e % (inserção de valores).
Função print()
A função print() possui dois parâmetros opcionais:
- end - indica o caracter de final de linha
- sep - indica o caracter separador de argumentos
Entenda a utilização dos dois parâmetros opcionais no exemplo seguinte.
#Algoritmo - printOpcionais.py
print("Experimentando")
print("com texto livre")
print("Experimentando", end=" ")
print("com texto livre")
print("Multiplos", "textos", "exemplo")
print("Multiplos", "textos", "exemplo", sep="-")
Na linha 04 usamos o parâmetro end=" "
, indicando que no final do texto impresso pelo print, não pularemos uma linha, mas usaremos um espaço em branco.
Podemos passar mútiplos valores no print, como na linha 07, os valores serão impressos separados por um espaço em branco, por padrão. Mas na linha 09 modificamos o print para separar os elementos com um hífen (“-”).
Observe a execução.
#Execução - printOpcionais.py
Experimentando
com texto livre
Experimentando com texto livre
Multiplos textos exemplo
Multiplos-textos-exemplo
Erros comuns
O método ord( ) só pode ser aplicado a caracteres, não aceitando strings com mais de um caractere.
#Erro com ord()
>>> ord('abx')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 3 found
Posted on April 19, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.