Monday, September 26, 2016

Aula 3

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