Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] Mais Sobre as Estruturas While

Avalie este Post de Blog

Antes de prosseguir leia os artigos anteriores aqui



Bom dia a todos! Finalmente, estamos quase completando os estudos com a estrutura while. Já vimos praticamente todas as instruções que se aliam a ela: continue, break e o else.

Vou mostrar hoje alguns exemplos da estrutura while de forma mais complexa e depois vou deixar alguns exercícios. Postem os resultados, ok?!

Mais Sobre as Estruturas While



Agora que já conhecemos diversas instruções que alteram o comportamento da estrutura while vale a pena comparar sua utilidade. Vamos começar com um exemplo simples:
1. Buscar a primeira ocorrência de uma letra dentro de uma string passada pelo usuário. Deve ser informada a posição dessa ocorrência ou, caso não exista uma ocorrência, deve ser impresso um texto informando que a letra buscada não foi encontrada.
Vou resolver esse exercício de duas formas, uma será usando apenas o while, a outra será usando as instruções continue, break e else. No final iremos comparar os dois códigos.

Resolução 1
Código :
# Recebe a string
texto = raw_input('Favor informar uma string: ')
# Recebe a letra que será buscada na string
letra = raw_input('Favor informar uma letra para buscarmos: ')
 
# Vamos verificar se por acaso o usuário não passou mais de uma
# letra. Para isso verificamos o comprimento com a função len.
if len(letra) > 1:
    print 'Foi informado a palavra',letra,'.'
    # Pega somente a primeira letra da palavra
    letra = letra[0]
    print 'Sera considerado apenas a primeira letra:', letra
 
 
n = 0
encontrada = False
while n < len(texto):
    # Pega a letra na posição n
    letra_texto = texto[n]
    # incrementa n para a próxima iteração do loop
    n = n + 1
    if letra_texto == letra:
        print 'encontrada a letra',letra,'na posicao',(n-1)
        # Prepara para parar o loop
        encontrada = True
    if encontrada:
        # Como o while testa se n é menor que o comprimento do texto,
        # para parar o while basta alterar n para o comprimento do text
        # dessa fora, essa será a última iteração do loop.
        n = len(texto)
 
 
if encontrada == False:
     # Se 'encontrada' é falso, quer dizer que não foi encontrada
     print 'Nao foi possivel encontrar a letra',letra
print '\n'
Nesse exemplo, logo no início, eu fiz uma verificação para confirmar que o usuário tinha passado uma letra. Caso o tamanho de 'letra' fosse maior que zero teríamos o problema de comparar uma palavra com uma letra.

A execução mostra o seguinte comportamento:
Código :
$ ./busca_letra
Favor informar uma string: este e um teste
Favor informar uma letra para buscarmos: u
encontrada a letra u na posicao 7
 
$ ./busca_letra
Favor informar uma string: este e um teste
Favor informar uma letra para buscarmos: uma
Foi informado a palavra uma .
Sera considerado apenas a primeira letra: u
encontrada a letra u na posicao 7
 
$ ./busca_letra
Favor informar uma string: este e um teste
Favor informar uma letra para buscarmos: z
Nao foi possivel encontrar a letra z
Resolução 2
Agora vamos ver como re-escrever o código acima utilizando as instruções que aprendemos:
Código :
# Recebe a string
texto = raw_input('Favor informar uma string: ')
# Recebe a letra que será buscada na string
letra = raw_input('Favor informar uma letra para buscarmos: ')
 
# Vamos verificar se por acaso o usuário não passou mais de uma
# letra. Para isso verificamos o comprimento com a função len.
if len(letra) > 1:
    print 'Foi informado a palavra',letra,'.'
    # Pega somente a primeira letra da palavra
    letra = letra[0]
    print 'Sera considerado apenas a primeira letra:', letra
 
n = 0
while n < len(texto):
    # Pega a letra na posição n
    letra_texto = texto[n]
    # incrementa n para a próxima iteração do loop
    n = n + 1
    if letra_texto == letra:
        print 'encontrada a letra',letra,'na posicao',(n-1)
        # Vamos quebrar o while.
        break
else:
     # Só atingiremos caso o while tenha chegado ao fim
     print 'Nao foi possivel encontrar a letra',letra
Podemos verificar, rapidamente, que o codigo reduziu de tamanho. Outra coisa é que utilizamos uma variável a menos, a variável 'encontrada'. Isso implica em menos memória e menos processamento para alocar e desalocar essa variável.

Agora, analisando o código, pode surgir uma dúvida quanto ao break e o else. O else só é executado se o loop terminar todas as iterações. Como o break 'quebra' o loop quando a letra é encontrada, o else não é executado. Com isso fica fácil estruturar o programa para indicar que a letra não foi encontrada.

Exercícios



Agora uns exercícios para vocês. Tentem usar as instruções continue, break e else em todos os exemplos.
1: Fazer um programa que busca em um texto, passado pelo usuário, todas as ocorrências de uma letra. Caso não seja encontrado, informar que não foi encontrado a letra buscada.
2: Fazer um programa que recebe palavras do usuário e informe o comprimento da palavra. O programa só deve para quando o usuário digitar a palavra 'pare'.
Desafio: Criar um código que organize a seguinte lista: [3, 4, 2, 1, 5]

Atualizado 01-09-2010 em 09:12 por Magnun

Categorias
Artigos , Artigos , Cursos , Curso de Python

Comentários

Página 2 de 2 PrimeiroPrimeiro 12
  1. Avatar de igorcroush
    ola pessoal,achei muito legal esse site,com esse curso,to estudando nele rsrs
    em,uma opção por que nao usar o operador in nessa string
    passada pelo usuario para encontrar a tao letra?
    eu fiz uns testes deu certo ficaria tipo if letra in texto: print" encontrada",letra
    entenderam?
    é so uma possivel opçao
    quero externar minha gratidao
    por este site
  2. Avatar de dimasters
    Magnun seguinte tenho uma pergunta
    Como o python sabe se ele é do while ou do ultimo if dentro do while?
    Não é comparando mas por exemplo em C
    [CODE]
    void main(){
    int x =0;

    while( true ){
    x++;
    if( x == 10){
    break;
    }
    else{
    printf('%d',x);
    }
    }
    }
    [/CODE]
    Faz tempo que vi C então não reparem o código
    Só pra exclarecer 'C' não deve ter o else para while certo mas vamos supor que tem nele sabemos que else pertence a if e a while ja em python como sabemos disso, no código postado em python com continue e break a única coisa que da pra saber sobre o que pertence a que é pela tabulação do código certo?
    Seu eu quiser colocar esse else do while pro if e deixar o while sem else como ficaria, como ele identifica cada um?
    Abraço
    Atualizado 21-11-2010 em 21:25 por dimasters
  3. Avatar de nennogabriel
    pela identação. por exeplo:

    else do if:
    [PHP]
    i = 0
    while True:
    i += i + 1
    if i % 7 == 0:
    print(i,"é divisível por 7")
    else:
    print(i, "não é divisível por 7")
    [/PHP]

    else do while:
    [PHP]
    i = 0
    while i < 100:
    i += i + 1
    if i % 7 == 0:
    print(i,"é divisível por 7")
    else:
    print("i é maior que 100 : i é igual a", i)
    [/PHP]

    sacou? em python a identação é tudo... sem ela não tem como o interpratador saber onde começa e termina uma condição ou um loop.

    se escrever:
    [PHP]
    i = 0
    while i < 100:
    i += 1
    print("i é maior que 100. i é igual a", i)
    [/PHP]

    o python vai escrever a fraze algumas vezes na hora errada. mas se escrever:
    [PHP]
    i = 0
    while i < 100:
    i += 1
    print("i é maior que 100. i é igual a", i)
    [/PHP]
    ele só escreverá a frase depois que i for maior ou igual a 100

    lembrando que a identação é criada pelo desenvolvedor, pode ser uma marca de tabulação ou 4 espaços (formas mais comuns), mas tbm pode ser apenas um espaço ou 9 espaços. Também pode-se identar de forma variada num mesmo projeto, desde que a identação seja igual a cada loop ou condição.. um exemplo estranho de identação correta seria:

    [PHP]
    i = 0
    while i < 100:
    i += 1
    if i == 5 :
    for n in range(1000):
    print(n)
    print("i é maior que 100. i é igual a", i)
    [/PHP]

    O que não é recomendavel, pois se voce quiser tirar o if e descer o for um nivel, tá no exemplo da pra fazer.. mas num código com paginas e paginas.. complica... recomendo que escolha sua identação e a use...
    eu uso 4 espaços e mando o meu editor de texto trocar o tab por 4 espaços pra facilitar minha vida.

    apenas tome cuidado pois um tab não são 4 espaços... o editor quem converte.

    se:
    [PHP]
    i = 0
    while i < 100:
    i += 1 #imagine que este foi usado um TAB
    print("i é maior que 100. i é igual a", i) #este com 4 espaços
    [/PHP]
    aparentemente estão certos, mas o o interpretador retornará erro na identação.
  4. Avatar de Magnun
    @dimasters
    Você está correto. Como o nennogabriel ressaltou (a quanto tempo não te vejo por aqui cara!), o Python identifica os 'elses' e tudo mais usando a tabulação. Por isso é extremamente importante ter uma endentação concisa no seu código. Então para alterar um else de um if (ou while) para outro basta alterar a tabulação do bloco.
  5. Avatar de silvanofideles
    O programa informa onde consta todas as ocorrências de uma letra ou não. Mas não foi possível usar o continue. Será que tem com "enxugar" o programa???

    [PHP]# 1: Fazer um programa que busca em um texto, passado pelo usuário, todas as ocorrências de uma letra. Caso não seja encontrado, informar que não foi encontrado a letra buscada.


    texto = raw_input('Digite uma frase: ')
    letra = raw_input('Digite uma letra a ser localizada: ')

    if len(letra) > 1:
    print 'Letras informadas:',letra,'.'
    letra = letra[0]
    print '"Eu disse uma letra" vou localizar apenas a letra:', letra

    conta = 0
    tam_texto = 0
    while tam_texto < len(texto):
    letra_texto = texto[tam_texto]
    tam_texto += 1
    if letra in texto:
    if letra_texto == letra:
    print 'letra',letra,'encontrada na posicão:',tam_texto-1
    if tam_texto == len(texto):
    break
    if tam_texto == len(texto):
    break
    else:
    print 'Letra',letra,'nao encontrada em nenhuma posição'[/PHP]
  6. Avatar de fabraga
    Exercício #1:
    Código PHP:
    texto=input("Informe um texto: ")
    letra=input("Informe uma letra para buscarmos: "

    if 
    len(letra)>1:
        print(
    "Foi informada a palavra:",letra,"."
        
    letra=letra[0
        print(
    "Será considerado apenas a primeira letra: ",letra

    n=
    ocorrencias
    =0

    while n<len(texto): 
        
    letra_texto=texto[n
        
    n=n+
        
    if letra_texto == letra:
            
    ocorrencias += 
    if ocorrencias 0:
        print(
    "Encontradas %i ocorrências da letra %s"%(ocorrencias,letra),"."
    else: 
        print(
    "Não foi possível encontrar a letra",letra
    Exercício #2:
    Código PHP:
    palavra=""
    while palavra != "pare":
            if 
    len(palavra)>0:
                    print(
    "A palavra tem",str(len(palavra)),"letras.")
            
    palavra=input("Informe uma palavra (ou 'pare' para parar): "
    Desafio:
    Código PHP:
    = [34215]
    print(
    "Lista original:",l)
    0
    1
    0
    while len(l):
        while 
    len(l):
            if 
    l[m] > l[n]:
                
    l[m]
                
    l[m] = l[n]
                
    l[n] = i
            n 
    += 1
        m 
    += 1
        n 
    m+1
    print("Lista ordenada:",l
    Atualizado 07-06-2011 em 19:46 por fabraga
  7. Avatar de sidtj
    Só pra citar minha solução ao desafio, usando somente recursos ensinados até aqui (fiz antes de ler os comentários, obviamente):

    [CODE]
    lista = [3,4,2,1,5]
    novalista = lista + []
    i,n,imaiores = 0,0,0

    while i < len(lista):
    atual = lista[i]
    while n < len(lista):
    imaiores += 1 if atual < lista[n] else 0
    n += 1

    novalista[len(lista)-imaiores-1] = atual
    i += 1
    n, imaiores = 0,0
    print("Nova lista %(novalista)s" % vars())
    [/CODE]
  8. Avatar de deathglory
    #-*- coding = utf-8 -*-
    # busca todas ocorrências de uma letra em uma string
    string = input('Digite a frase: ')
    tam = len(string)
    cont = 0
    ocorrencia = 0
    while len(string) < 1:
    print ('String vazia')
    string = input('Digite a frase: ')
    else:
    letra = input('Digite a letra para busca: ')
    while len(letra) < 1:
    print ('Isso não me parece uma letra ou espaço')
    letra = input('Digite a letra para busca: ')
    else:
    while cont < tam:
    if letra == string[cont]:
    ocorrencia = ocorrencia + 1
    cont = cont + 1
    else:
    cont = cont + 1
    if cont > 0:
    print ('O número de ocorrências da letra \'%s\' é: %d' % (letra, ocorrencia))
    else:
    print ('Não foi encontrada nenhuma ocorrência dessa letra!')
Página 2 de 2 PrimeiroPrimeiro 12

+ Enviar Comentário