Aula 3 - strings, alguns comandos básicos
Nesta aula iniciamos o estudo do Python propriamente dito. O material coberto corresponde mais ou menos ao item Caracteres, números e variáveis e parte do item Comandos em Recursos.Vimos um exercício implementando em Python um exemplo cujo pseudo código criamos em aulas anteriores:
Dado um texto contendo somente caracteres alfanuméricos e espaços em branco contar o número de palavras no texto. Uma palavra é definida como sequência ininterrupta de caracteres alfanuméricos terminada por espaço em branco.
Uma implementação possível seria a seguinte:
''' conta o numero de palavras num texto. Caracteres permitidos:
alfanumericos e espaço em branco'''
txt = input()
na_palavra = (txt[0] != ' ')
if na_palavra:
conta = 1
else:
conta = 0
# percorre o texto caracter a caracter
for car in txt:
# verifica se caracter é espaço ou alfanumerico
if car != ' ':
n_pal = True
else:
n_pal = False
# verifica se passou fronteira de entrada em palavra
if na_palavra == False:
if n_pal == True:
# entrou numa palavra
conta = conta + 1
na_palavra = True
else:
# estamos numa palavra: verifica se terminou
if n_pal == False:
na_palavra = False
# imprime numero de palavras encontradas
print('Numero de palavras encontradas = ', conta)
Verifique que este programa implementa a especificação digitando o código no IDLE e executando. Teste casos extremos.
O código abaixo tem o mesmo efeito e é mais sucinto:
txt = input()
na_palavra = (txt[0] != ' ')
conta = int(na_palavra)
# percorre o texto caracter a caracter
for car in txt:
# verifica se caracter é espaço ou alfanumerico
n_pal = (car != ' ')
# verifica se passou fronteira de entrada em palavra
if not na_palavra:
if n_pal:
# entrou numa palavra
conta = conta + 1
na_palavra = True
else:
# estamos numa palavra: verifica se terminou
if not n_pal:
na_palavra = False
# imprime numero de palavras encontradas
print('Numero de palavras encontradas = ', conta)
Lembrando que not e and correspondem aos conectivos lógicos negação e conjunção, experimente o código acima no IDLE e verifique que é outra implementação válida.
Para entender porque atribuições como n_pal = (car != ' ') funcionam lembre, como explicado na aula, que o valor de uma expressão booleana é True ou False. Assim n_pal irá receber um valor True ou False respectivamente.
Podemos ainda generalizar o problema permitindo qualquer caracter whitespace no texto, não somente o espaço em branco ' '.
Neste caso a implementação acima deve ser ligeiramente modificada usando uma das muitas funções de objetos string. No caso dado um caracter lido basta testar se car.isalnum() retorna True ("é caracter alfanumérico") ou False ("não é um caracter alfanumerico"). O trecho modificado do código fica assim:
# percorre o texto caracter a caracter
for car in txt:
# verifica se caracter é alfanumerico
n_pal = car.isalnum()
........................................ etc
No comments:
Post a Comment