Enviar um café pro programador

Mostrando postagens com marcador Laços. Mostrar todas as postagens
Mostrando postagens com marcador Laços. Mostrar todas as postagens

Como Processar Arquivos com Laço FOR (looping)

Neste tutorial de Python, vamos aprender como processarcom arquivos usando laços e loopings, nos permitindo trabalhar com grandes quantidades de informação.

Se desejar viver de programação, acesse:
Curso de Python com certificado

Para estudar por este e outros tutoriais offline, veja:
Apostila Python Progressivo

Arquivos e Laço FOR

Até o momento, em nossa seção de Arquivos em Python, trabalhamos com pequenos arquivos de textos, geralmente de duas ou três linhas, até para simplificar e agilizar nossos tutoriais de explicações.

Porém, o normal é termos arquivos grandes, com centenas ou milhares de linhas.

Quando você se tornar um programador Python profissional, vai ter planilhas documentos de texto, PDF e outros tipos de listas (como de funcionários e alunos), de milhares e milhares de linhas.

Então, vamos te mostrar como trabalhar com um arquivo usando o laço FOR.

Primeiro, entre no seguinte link e copie toda a lista:

Salve em um arquivo de texto de nome linguagens.txt

Vamos criar um script que pergunta ao usuário quantos nomes de linguagens de programação ele deseja ver.

Primeiro, criamos um objeto do tipo FILE de nome arquivo, para abrir linguagens.txt
Vamos pegar todo o conteúdo de texto e colocar numa lista de nome linguas, através do método readlines()

Usamos a função len() para contar quantos elementos tem a lista linguas, cujo número de elementos é o número de linhas do arquivo de texto, logo, mostrando o total de linguagens de programação que tem no texto.

Perguntamos ao usuário quantas linguagens ele deseja ver o nome e armazenamos na variável inteira num.

Por fim, entramos no laço FOR.
Vamos percorrer um total de num elementos, onde imprimimos o número de vezes que o usuário escolheu, imprimindo os elementos da lista linguas (usamos o método rstrip() para retirar o caractere de quebra de linha '\n\).

Veja como ficou nosso código:

arquivo = open('linguagens.txt', 'r')
linguas = arquivo.readlines()

print("Existem", len(linguas), "linguagens. Quantas deseja ver?")
num = int(input())

for count in range(num):
    print(str(count+1),":",linguas[count].rstrip('\n'))
    
arquivo.close()

Detectando o final de um arquivo: End of file ''

Tem um probleminha no código anterior.
Experimente digitar 717.

Aguarde tooooda a lista de linguagens de programação ser printada em sua tela e...erro:

Arquivos e loopings - Tutorial de Python - Curso com certificado

Deu erro de list index out of range, ou seja, você tentou acessar um índice da lista que não existe.
A lista tem 716 linguagens/linhas, e você tentou acessar mais que isso.

Poderíamos evitar esse erro fazendo uma coisa bem simples: detectando o final do arquivo.
Agora, ao invés de criar uma lista, vamos imprimir linha por linha do arquivo, através do método readline(), que lê uma linha por vez e retorna essa string, e armazena na variável linha que criamos.

Vamos usar o mesmo laço FOR pra imprimir o número de linguagens que o usuário quis ver.
Ao final, quando chega no fim do arquivo, o método readline() retorna uma string vazia.

Uma string vazia é simboliza, simplesmente, por: ''

Ou seja, a cada iteração do loop verificamos o conteúdo de linha.
Se for diferente de string vazia, imprimimos mais uma linha.
Se for vazia, dizemos que chegou no fim do arquivo.

Nosso código Python ficou:

arquivo = open('linguagens.txt', 'r')
num = int(input("Numero de linguagens: "))

for linha in arquivo:
    linha = arquivo.readline()

    if linha != '':
        print(linha.rstrip('\n'))
    else:
        print("Fim do arquivo")
    
arquivo.close()

Lendo Arquivos com laço FOR

Os exemplos anteriores foram mais para você aprender como pensa um programador, entender como as coisas funcionam por trás dos panos e te ajudar em lógica, ou seja, de realmente entender o que tá fazendo e o que tá acontecendo quando seu código roda.


Porém, existe uma maneira ainda mais simples de ler um arquivo de texto, sem usar readlines() nem a readline(), simplesmente imprimindo direto da variável do tipo File, e também sem precisar detectar o final de um arquivo.

Sabe onde fizemos:
  • for variavel in range(valor): 

Em vez de range(), basta usar o objeto do tipo File mesmo.
O Python subtende que seu range vai ser as linhas do arquivo.

Fica:
  • for linha in arquivo:

Prontinho.
A cada iteração do loop For o valor de linha é uma linha do arquivo de texto arquivo, que definimos e abrimos anteriormente (com a open()).

Para exibir o número correto de linguagens que o usuário solicitou, vamos usar uma variável para fazer a contagem, a count. O IF imprime uma linha, já quando essa variável passa do valor digitado pelo usuário, cai no ELSE e ele dá um break no laço FOR, terminando a leitura do arquivo.

Veja como ficou nosso código Python:

arquivo = open('linguagens.txt', 'r')
num = int(input("Numero de linguagens: "))
count=0

for linha in arquivo:
    if count<num:
        print(linha.rstrip('\n'))
        count=count+1
    else:
        break

arquivo.close()

Primos em Python - Como Saber se um Número é Primo ?

Neste nosso Tutorial de Python, vamos falar sobre os números primos.

Vamos te explicar o que é, sua importância, onde são usados e o principal: como criar um programa que checa se um determinado inteiro positivo é um número primo ou não.

Como ser um excelente programador

Bem, chegou a hora de realmente colocar a mão na massa e começar a programar, ok?

Antes, gostaríamos de sugerir o nosso texto 'Como ser um excelente programador', nele a gente vai te orientar sobre:
  1. O que estudar
  2. Como estudar programação da maneira correta
  3. O que é importante estudar
  4. Quais linguagens é bom saber
  5. Qual a melhor a melhor linguagem de programação
  6. Como entrar no mercado do trabalho
  7. Como se portar corretamente numa entrevista de emprego
  8. A característica mais importante que um programador deve ter

É simplesmente tudo que eu gostaria de saber antes de começar minha carreira de programador. Se eu tivesse lido o texto no início de meus estudos, teria aprendido programação bem mais rapidamente e mais corretamente. Sério, não deixem de ler, vai mudar sua vida.

Acesse nossa apostila para ler:


Os Números Primos

Um número é dito primo quando é possível dividir ele (divisão de inteiro com inteiro) por 1 e por ele mesmo.

Exemplos de números primos:
2, 3, 5, 7,  11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373 ...

Pode sair tentando dividir esses daí por outro número menor, que não seja 1 ou ele mesmo, que não vai conseguir.


Exemplos de números que não são primos:
4: É possível dividir por 1, 2, e 4
6: É possível dividir por 1, 2, 3 e 6
8: É possível dividir por 1, 2, 4 e 8
2112: É divisível por 2 3 4 6 8 11 12 16 22 24 32 33 44 48 64 66 88 96 132 176 192 264 352 528 704 e 1056

Primos: Para que servem ?

Não, não é um conjunto inútil e sem sentido de números.
Se fosse, nem seriam estudados.

O assunto número primo é um dos mais pesquisados, estudados e misteriosos da história da humanidade.

Até hoje, não se tem uma fórmula para se criar números primos.
Ainda não descobriram um 'padrão' definitivo.

Um dos usos mais importante é no ramo da criptografia, principalmente com o algoritmo do sistema RSA.

Existem dois tipos de cigarras que possuem ciclos de vida de 13 e 17 anos, assim somente a cada 221 anos elas tem que dividir a floresta quando saem da terra, evitando se encontrar, o que prejudicaria sua permanência na natureza.

Enfim, se pesquisar na internet, vai achar uma infinidade de coisas onde os números primos estão metidos no dia-a-dia.

Há até quem use os números primos para ganhar na Mega-Sena.

Checar se um número é primo

Como Determinar e Verificar se um Número é Primo em Python

Vamos ver o problema que deu origem a este tutorial de Python, de nossa Lista de Exercícios de Laços e Loops


Inicialmente, pedimos um número inteiro e positivo para o usuário e armazenamos na variável n.

Vamos armazenar na variável mult o número de múltiplos que existe de 2 até n-1.

Ou seja, do intervalo (2, 3, 4, ..., n-1)
Isso é obtido usando a função range: range(2,n).

Vamos usar a variável count pra receber cada um desses valores, dentro desse intervalo.

Dentro do looping, temos que testar se o resto da divisão de n por count vai ser 0. Se for, é porque n é múltiplo de count, logo não é primo.

A medida que nosso programa ai encontrando múltiplos, conta eles na variável mult e exibe na tela.

Após terminar o laço, testamos o valor de mult.
Se permanecer zerado, é porque o número fornecido pelo usuário é primo.

Vejamos nosso código Python:

n = int(input("Verificar numeros primos ate: "))
mult=0

for count in range(2,n):
    if (n % count == 0):
        print("Múltiplo de",count)
        mult += 1

if(mult==0):
    print("É primo")
else:
    print("Tem",mult," múltiplos acima de 2 e abaixo de",n)

Desafio: crie um script em Python que checa se um número fornecido pelo usuário é primo ou não, usando laço while dessa vez.

Poste no comentário sua solução.


Calcular a Potência de um Nùmero - Exponenciação em Python

Neste tutorial e exercício resolvido de nosso Curso de Python, vamos te ensinar como calcular a potência de um número, a famosa operação de exponenciação: 2 elevado 2...3 elevado a 4 etc.



Quer ganhar dinheiro e viver como programador Python? Te ensinamos aqui!

Exponenciação na Matemática

A operação exponenciação, na Matemática, é a que tem o seguinte formato:

Como fazer exponenciação - Curso de Python
A gente lê assim: x elevado a y, dá z.
Por exemplo:
2² = 4
2³ = 8
3² = 9
3³ = 27

Chamamos o x de base, o y de expoente e o z de potência.
Essa é a definição Matemática, que muito provavelmente você já conhece.

Agora vamos ver isso de uma outra perspectiva, de programação.

Potência em Python

Quando fazemos x elevado a y, estamos querendo dizer:
"Quanto é x vezes x vezes x....y vezes?"

Por exemplo:
3⁴ quer dizer: 3 x 3 x 3 x 3
2⁵ quer dizer: 2 x 2 x 2 x 2 x 2

Então, x^y (x elevado a y), quer dizer que estamos x por x por x por x...isso um total de y vezes.



Exercício em Python

Agora que já aprendemos sobre exponenciação e como calcular a potência na Matemática, vamos ver um exercício interessante, postado no artigo sobre "Lista de Exercícios de Laços e Loops":

Faça um programa que peça dois números, base e expoente, calcule e mostre o primeiro número elevado ao segundo número. Não utilize a função de potência da linguagem. 

Bom, vamos lá.

Precisamos garantir duas coisas: que a base e o expoente sejam números positivos, e o expoente seja também inteiro.

Vamos armazenar o valor da base na variável base e o expoente em expoente.

Nosso resultado vai ficar armazenado na variável potencia, que deve iniciar com valor 1.

Temos que multiplicar a variável potencia por base, várias vezes.
Quantas vezes? expoente vezes!

Vamos usar uma variável de apoio count que serve de contador de 1 até potencia, que vai controlar quantas vezes os laços serão executados.

Exercício resolvido usando laço WHILE


print("base ^ expoente:")
base=int(input("Base: "))
expoente=int(input("Expoente: "))

potencia=1
count=1

while count <= expoente:
    potencia *= base
    count +=1

print(base,"^",expoente,"=",potencia)

Exercício resolvido usando laço FOR


print("base ^ expoente:")
base=int(input("Base: "))
expoente=int(input("Expoente: "))

potencia=1

for count in range(expoente):
    potencia *= base
    count += 1

print(base,"^",expoente,"=",potencia)


Lista de Exercícios de Laços e Loops

Lista de exercícios, resolvidos e com código comentado, sobre os laços e loops WHILE e FOR.

Tente resolver as questões a seguir após estudar:
Laços em Python: WHILE e FOR

Já adquiriu seu certificado? Com ele é possível trabalhar e ganhar dinheiro com Python!

Exercícios de Python  de Laços

Chegou ao fim a parte de Laços e Loopings!
Aprendemos tudo sobre os laços WHILE e FOR, que não são importantes, são essenciais, obrigatórios.

É praticamente impossível fazer qualquer coisa em Python sem usar WHILE ou FOR. Por isso estude bem, entenda os exemplos resolvidos e depois venha tentar resolver os seguintes exercícios.

São questões de Estruturas de Repetição do site Python.org.br .
Sugerimos o seguinte:

  1. Tente
  2. Tente de novo
  3. Novamente
  4. Chore em posição fetal
  5. Passe horas tentando
  6. Não durma algumas noites tentando
  7. Tente novamente



Somente após tentar MUITO e não conseguir, é que aconselhamos você a ver a solução, ok?

Só assim se evolui.
Ler a questão e ver a solução é algo praticamente inútil.
Se fizer isso, nem diga que estudou aqui pelo Curso Python Progressivo, pois vai ser um péssimo programador.

Questões de Estruturas de Repetição em Python




  1. Faça um programa que peça uma nota, entre zero e dez. Mostre uma mensagem caso o valor seja inválido e continue pedindo até que o usuário informe um valor válido.
    Solução: Validação de dados em Python
  2. Faça um programa que leia um nome de usuário e a sua senha e não aceite a senha igual ao nome do usuário, mostrando uma mensagem de erro e voltando a pedir as informações.
    Solução: Validação de dados em Python
  3. Faça um programa que leia e valide as seguintes informações:
    1. Nome: maior que 3 caracteres;
    2. Idade: entre 0 e 150;
    3. Salário: maior que zero;
    4. Sexo: 'f' ou 'm';
    5. Estado Civil: 's', 'c', 'v', 'd';
    Use a função len(string) para saber o tamanho de um texto (número de caracteres).
    Solução: Validação de dados em Python

  4. Supondo que a população de um país A seja da ordem de 80000 habitantes com uma taxa anual de crescimento de 3% e que a população de B seja 200000 habitantes com uma taxa de crescimento de 1.5%. Faça um programa que calcule e escreva o número de anos necessários para que a população do país A ultrapasse ou iguale a população do país B, mantidas as taxas de crescimento.
  5. Altere o programa anterior permitindo ao usuário informar as populações e as taxas de crescimento iniciais. Valide a entrada e permita repetir a operação.

    (4 e 5): Solução: Validação de dados em Python
  6. Faça um programa que imprima na tela os números de 1 a 20, um abaixo do outro. Depois modifique o programa para que ele mostre os números um ao lado do outro.
  7. Faça um programa que leia 5 números e informe o maior número.
  8. Faça um programa que leia 5 números e informe a soma e a média dos números.
    07. e 08: Programa que pede números, diz o maior, soma e média
  9. Faça um programa que imprima na tela apenas os números ímpares entre 1 e 50.
  10. Faça um programa que receba dois números inteiros e gere os números inteiros que estão no intervalo compreendido por eles.
  11. Altere o programa anterior para mostrar no final a soma dos números.
  12. Desenvolva um gerador de tabuada, capaz de gerar a tabuada de qualquer número inteiro entre 1 a 10. O usuário deve informar de qual numero ele deseja ver a tabuada. A saída deve ser conforme o exemplo abaixo:
    • Tabuada de 5:
      5 X 1 = 5
      5 X 2 = 10
      ...
      5 X 10 = 50
       
    Tabuada em Python

  13. Faça um programa que peça dois números, base e expoente, calcule e mostre o primeiro número elevado ao segundo número. Não utilize a função de potência da linguagem.
    Potência (exponenciação)
  14. Faça um programa que peça 10 números inteiros, calcule e mostre a quantidade de números pares e a quantidade de números ímpares.
  15. A série de Fibonacci é formada pela sequência 1,1,2,3,5,8,13,21,34,55,... Faça um programa capaz de gerar a série até o n−ésimo termo.
    Sequência de Fibonacci em Python

  16. A série de Fibonacci é formada pela sequência 0,1,1,2,3,5,8,13,21,34,55,... Faça um programa que gere a série até que o valor seja maior que 500.
  17. Faça um programa que calcule o fatorial de um número inteiro fornecido pelo usuário. Ex.: 5!=5.4.3.2.1=120
    Fatorial em Python
  18. Faça um programa que, dado um conjunto de N números, determine o menor valor, o maior valor e a soma dos valores.
  19. Altere o programa anterior para que ele aceite apenas números entre 0 e 1000.
  20. Altere o programa de cálculo do fatorial, permitindo ao usuário calcular o fatorial várias vezes e limitando o fatorial a números inteiros positivos e menores que 16.
  21. Faça um programa que peça um número inteiro e determine se ele é ou não um número primo. Um número primo é aquele que é divisível somente por ele mesmo e por 1.
    Número Primo em Python

  22. Altere o programa de cálculo dos números primos, informando, caso o número não seja primo, por quais número ele é divisível.
  23. Faça um programa que mostre todos os primos entre 1 e N sendo N um número inteiro fornecido pelo usuário. O programa deverá mostrar também o número de divisões que ele executou para encontrar os números primos. Serão avaliados o funcionamento, o estilo e o número de testes (divisões) executados.
  24. Faça um programa que calcule o mostre a média aritmética de N notas.
  25. Faça um programa que peça para n pessoas a sua idade, ao final o programa devera verificar se a média de idade da turma varia entre 0 e 25,26 e 60 e maior que 60; e então, dizer se a turma é jovem, adulta ou idosa, conforme a média calculada.
  26. Numa eleição existem três candidatos. Faça um programa que peça o número total de eleitores. Peça para cada eleitor votar e ao final mostrar o número de votos de cada candidato.
  27. Faça um programa que calcule o número médio de alunos por turma. Para isto, peça a quantidade de turmas e a quantidade de alunos para cada turma. As turmas não podem ter mais de 40 alunos.
  28. Faça um programa que calcule o valor total investido por um colecionador em sua coleção de CDs e o valor médio gasto em cada um deles. O usuário deverá informar a quantidade de CDs e o valor para em cada um.
  29. O Sr. Manoel Joaquim possui uma grande loja de artigos de R$ 1,99, com cerca de 10 caixas. Para agilizar o cálculo de quanto cada cliente deve pagar ele desenvolveu um tabela que contém o número de itens que o cliente comprou e ao lado o valor da conta. Desta forma a atendente do caixa precisa apenas contar quantos itens o cliente está levando e olhar na tabela de preços. Você foi contratado para desenvolver o programa que monta esta tabela de preços, que conterá os preços de 1 até 50 produtos, conforme o exemplo abaixo:
    • Lojas Quase Dois - Tabela de preços
      1 - R$ 1.99
      2 - R$ 3.98
      ...
      50 - R$ 99.50
  30. O Sr. Manoel Joaquim acaba de adquirir uma panificadora e pretende implantar a metodologia da tabelinha, que já é um sucesso na sua loja de 1,99. Você foi contratado para desenvolver o programa que monta a tabela de preços de pães, de 1 até 50 pães, a partir do preço do pão informado pelo usuário, conforme o exemplo abaixo:
    • Preço do pão: R$ 0.18
      Panificadora Pão de Ontem - Tabela de preços
      1 - R$ 0.18
      2 - R$ 0.36
      ...
      50 - R$ 9.00
  31. O Sr. Manoel Joaquim expandiu seus negócios para além dos negócios de 1,99 e agora possui uma loja de conveniências. Faça um programa que implemente uma caixa registradora rudimentar. O programa deverá receber um número desconhecido de valores referentes aos preços das mercadorias. Um valor zero deve ser informado pelo operador para indicar o final da compra. O programa deve então mostrar o total da compra e perguntar o valor em dinheiro que o cliente forneceu, para então calcular e mostrar o valor do troco. Após esta operação, o programa deverá voltar ao ponto inicial, para registrar a próxima compra. A saída deve ser conforme o exemplo abaixo:
    • Lojas Tabajara 
      Produto 1: R$ 2.20
      Produto 2: R$ 5.80
      Produto 3: R$ 0
      Total: R$ 9.00
      Dinheiro: R$ 20.00
      Troco: R$ 11.00
      ...
  32. Faça um programa que calcule o fatorial de um número inteiro fornecido pelo usuário. Ex.: 5!=5.4.3.2.1=120. A saída deve ser conforme o exemplo abaixo:
    • Fatorial de: 5
      5! =  5 . 4 . 3 . 2 . 1 = 120
  33. O Departamento Estadual de Meteorologia lhe contratou para desenvolver um programa que leia as um conjunto indeterminado de temperaturas, e informe ao final a menor e a maior temperaturas informadas, bem como a média das temperaturas.
  34. Os números primos possuem várias aplicações dentro da Computação, por exemplo na Criptografia. Um número primo é aquele que é divisível apenas por um e por ele mesmo. Faça um programa que peça um número inteiro e determine se ele é ou não um número primo.
  35. Encontrar números primos é uma tarefa difícil. Faça um programa que gera uma lista dos números primos existentes entre 1 e um número inteiro informado pelo usuário.
  36. Desenvolva um programa que faça a tabuada de um número qualquer inteiro que será digitado pelo usuário, mas a tabuada não deve necessariamente iniciar em 1 e terminar em 10, o valor inicial e final devem ser informados também pelo usuário, conforme exemplo abaixo:
    • Montar a tabuada de: 5
      Começar por: 4
      Terminar em: 7
      
      Vou montar a tabuada de 5 começando em 4 e terminando em 7:
      5 X 4 = 20
      5 X 5 = 25
      5 X 6 = 30
      5 X 7 = 35
      Obs: Você deve verificar se o usuário não digitou o final menor que o inicial.
  37. Uma academia deseja fazer um senso entre seus clientes para descobrir o mais alto, o mais baixo, a mais gordo e o mais magro, para isto você deve fazer um programa que pergunte a cada um dos clientes da academia seu código, sua altura e seu peso. O final da digitação de dados deve ser dada quando o usuário digitar 0 (zero) no campo código. Ao encerrar o programa também deve ser informados os códigos e valores do clente mais alto, do mais baixo, do mais gordo e do mais magro, além da média das alturas e dos pesos dos clientes
  38. Um funcionário de uma empresa recebe aumento salarial anualmente: Sabe-se que:
    1. Esse funcionário foi contratado em 1995, com salário inicial de R$ 1.000,00;
    2. Em 1996 recebeu aumento de 1,5% sobre seu salário inicial;
    3. A partir de 1997 (inclusive), os aumentos salariais sempre correspondem ao dobro do percentual do ano anterior. Faça um programa que determine o salário atual desse funcionário. Após concluir isto, altere o programa permitindo que o usuário digite o salário inicial do funcionário.
  39. Faça um programa que leia dez conjuntos de dois valores, o primeiro representando o número do aluno e o segundo representando a sua altura em centímetros. Encontre o aluno mais alto e o mais baixo. Mostre o número do aluno mais alto e o número do aluno mais baixo, junto com suas alturas.
  40. Foi feita uma estatística em cinco cidades brasileiras para coletar dados sobre acidentes de trânsito. Foram obtidos os seguintes dados:
    1. Código da cidade;
    2. Número de veículos de passeio (em 1999);
    3. Número de acidentes de trânsito com vítimas (em 1999). Deseja-se saber:
    4. Qual o maior e menor índice de acidentes de transito e a que cidade pertence;
    5. Qual a média de veículos nas cinco cidades juntas;
    6. Qual a média de acidentes de trânsito nas cidades com menos de 2.000 veículos de passeio.
  41. Faça um programa que receba o valor de uma dívida e mostre uma tabela com os seguintes dados: valor da dívida, valor dos juros, quantidade de parcelas e valor da parcela.
    • Os juros e a quantidade de parcelas seguem a tabela abaixo:
      Quantidade de Parcelas  % de Juros sobre o valor inicial da dívida
      1       0
      3       10
      6       15
      9       20
      12      25
      Exemplo de saída do programa:
      Valor da Dívida Valor dos Juros Quantidade de Parcelas  Valor da Parcela
      R$ 1.000,00     0               1                       R$  1.000,00
      R$ 1.100,00     100             3                       R$    366,00
      R$ 1.150,00     150             6                       R$    191,67
  42. Faça um programa que leia uma quantidade indeterminada de números positivos e conte quantos deles estão nos seguintes intervalos: [0-25], [26-50], [51-75] e [76-100]. A entrada de dados deverá terminar quando for lido um número negativo.
  43. O cardápio de uma lanchonete é o seguinte:
    • Especificação   Código  Preço
      Cachorro Quente 100     R$ 1,20
      Bauru Simples   101     R$ 1,30
      Bauru com ovo   102     R$ 1,50
      Hambúrguer      103     R$ 1,20
      Cheeseburguer   104     R$ 1,30
      Refrigerante    105     R$ 1,00
      Faça um programa que leia o código dos itens pedidos e as quantidades desejadas. Calcule e mostre o valor a ser pago por item (preço * quantidade) e o total geral do pedido. Considere que o cliente deve informar quando o pedido deve ser encerrado.
  44. Em uma eleição presidencial existem quatro candidatos. Os votos são informados por meio de código. Os códigos utilizados são:
    • 1 , 2, 3, 4  - Votos para os respectivos candidatos 
      (você deve montar a tabela ex: 1 - Jose/ 2- João/etc)
      5 - Voto Nulo
      6 - Voto em Branco
      Faça um programa que calcule e mostre:
    • O total de votos para cada candidato;
    • O total de votos nulos;
    • O total de votos em branco;
    • A percentagem de votos nulos sobre o total de votos;
    • A percentagem de votos em branco sobre o total de votos. Para finalizar o conjunto de votos tem-se o valor zero.
  45. Desenvolver um programa para verificar a nota do aluno em uma prova com 10 questões, o programa deve perguntar ao aluno a resposta de cada questão e ao final comparar com o gabarito da prova e assim calcular o total de acertos e a nota (atribuir 1 ponto por resposta certa). Após cada aluno utilizar o sistema deve ser feita uma pergunta se outro aluno vai utilizar o sistema. Após todos os alunos terem respondido informar:
    1. Maior e Menor Acerto;
    2. Total de Alunos que utilizaram o sistema;
    3. A Média das Notas da Turma.
      Gabarito da Prova:
      
      01 - A
      02 - B
      03 - C
      04 - D
      05 - E
      06 - E
      07 - D
      08 - C
      09 - B
      10 - A
      Após concluir isto você poderia incrementar o programa permitindo que o professor digite o gabarito da prova antes dos alunos usarem o programa.
  46. Em uma competição de salto em distância cada atleta tem direito a cinco saltos. No final da série de saltos de cada atleta, o melhor e o pior resultados são eliminados. O seu resultado fica sendo a média dos três valores restantes. Você deve fazer um programa que receba o nome e as cinco distâncias alcançadas pelo atleta em seus saltos e depois informe a média dos saltos conforme a descrição acima informada (retirar o melhor e o pior salto e depois calcular a média). Faça uso de uma lista para armazenar os saltos. Os saltos são informados na ordem da execução, portanto não são ordenados. O programa deve ser encerrado quando não for informado o nome do atleta. A saída do programa deve ser conforme o exemplo abaixo:
    Atleta: Rodrigo Curvêllo
    
    Primeiro Salto: 6.5 m
    Segundo Salto: 6.1 m
    Terceiro Salto: 6.2 m
    Quarto Salto: 5.4 m
    Quinto Salto: 5.3 m
    
    Melhor salto:  6.5 m
    Pior salto: 5.3 m
    Média dos demais saltos: 5.9 m
    
    Resultado final:
    Rodrigo Curvêllo: 5.9 m
  47. Em uma competição de ginástica, cada atleta recebe votos de sete jurados. A melhor e a pior nota são eliminadas. A sua nota fica sendo a média dos votos restantes. Você deve fazer um programa que receba o nome do ginasta e as notas dos sete jurados alcançadas pelo atleta em sua apresentação e depois informe a sua média, conforme a descrição acima informada (retirar o melhor e o pior salto e depois calcular a média com as notas restantes). As notas não são informados ordenadas. Um exemplo de saída do programa deve ser conforme o exemplo abaixo:
    Atleta: Aparecido Parente
    Nota: 9.9
    Nota: 7.5
    Nota: 9.5
    Nota: 8.5
    Nota: 9.0
    Nota: 8.5
    Nota: 9.7
    
    Resultado final:
    Atleta: Aparecido Parente
    Melhor nota: 9.9
    Pior nota: 7.5
    Média: 9,04
  48. Faça um programa que peça um numero inteiro positivo e em seguida mostre este numero invertido.
    • Exemplo:
        12376489
        => 98467321
  49. Faça um programa que mostre os n termos da Série a seguir:
    •   S = 1/1 + 2/3 + 3/5 + 4/7 + 5/9 + ... + n/m. 
      Imprima no final a soma da série.
  50. Sendo H= 1 + 1/2 + 1/3 + 1/4 + ... + 1/N, Faça um programa que calcule o valor de H com N termos.
  51. Faça um programa que mostre os n termos da Série a seguir:
    •   S = 1/1 + 2/3 + 3/5 + 4/7 + 5/9 + ... + n/m. 
      Imprima no final a soma da série.


Envie sua solução

O mais bacana de se programar é ver soluções diferentes.
As vezes passamos meses programando, escrevemos milhares de linhas de código...aí vem um filho da mãe que resolve tudo de maneira melhor, mais rápido e usando só 20 linhas.

Acontece.

Por isso, poste ai nos comentários sua solução.
Não tenha vergonha, vamos discutir!

Intruções ELSE, BREAK e CONTINUE em Laços

Neste tutorial de Python, vamos falar de algumas instruções muito importantes sobre laços: BREAK, CONTINUE, PASS e ELSE.

Instrução ELSE em Python

Já falamos da instrução ELSE em Testes Condicionais do tipo IF ELSE ELIF.
Essa instrução, embora não seja muito famosa, também existe junto com o laço WHILE.



Sua estrutura é a seguinte:

while TESTE:
    codigo
    codigo
    ...
else:
    codigo
    ...

A lógica do ELSE junto com o WHILE é bem simples: assim que sai do laço WHILE (sem ser via instrução BREAK), o código dentro da instrução ELSE será executado.

Ou seja, enquanto o TESTE for verdadeiro, ele roda o código dentro do WHILE.

Quando a condição vira falso, e não se usa uma instrução BREAK, o código do ELSE será executado (com uma mensagem de saída, de desligamento de sistema, por exemplo).



Instrução BREAK em Python

Outro comando muito importante e usado em laços Python, é o BREAK, que significa 'quebrar', 'interromper', 'pausar'. E é isso que faz.




while TESTE:
    codigo
    if TESTE2:
       break;
    ...

A função do BREAK é simplesmente parar o looping.
Se fizer um teste, ele der positivo e você usar a break, o laço é automaticamente findado.


Instrução CONTINUE em Python

Na instrução BREAK, quando ela é executada, tudo para, tudo acaba, adeus laço, adeus WHILE, adeus FOR, termina ele.




Se ao invés de break usar continue, o laço não é terminado. Porém, ele pula do continue pro início do laço, tudo que tem ali em diante do continue não é mais executado.

Exemplo de Código Python

A instrução pass é muito utilizada quando queremos um código vazio, uma instrução vazia, sem fazer nada de específico.

O código a seguir é um looping infinito, roda eternamente, esse código só vai parar de executar se você digitar CONTROL + C

while 1:
    pass

Exercício Resolvido de Python

Escreva um programa em Python que vai somar todos os números de 1 até 1 milhão, menos os que são múltiplos de 3.

A soma total ficará armazenada em total.
Vamos percorrer todos os números de 1 até 1 milhão, quem vai assumir todos esses valores é a variável count, nosso contador.

Primeiro incrementamos nosso contador. Ele começa em 0 e logo vira 1.
Agora, vamos fazer um teste para saber se o valor de count é múltiplo de 3.

Se for múltiplo de 3, damos uma instrução continue e o loop for segue para o próximo elemento, nada é feito, pulamos para a próxima iteração.

Caso não seja múltiplo de 3, vamos somar esse valor do contador na variável total.

Prontinho, nosso programa percorre de 1 até 1 milhão e soma tudo que não for múltiplo de 3:

total=0

for count in range(1000000):
    count += 1
    if(count % 3 == 0 ): continue
    total += count
    
print(total)


Python - Gerar Todos os Palpites da Mega-Sena

Neste tutorial de nosso Curso de Python, vamos ensinar como criar um programa que exibe todos os palpites possíveis para se jogar na Mega-Sena.



Python e Programação

Faça um script em Python que exiba todos os possíveis palpites da Mega-Sena.
Dados:

  1. Cada palpite possui 6 dezenas
  2. As dezenas variam de 1 até 60
  3. Não pode repetir dezena

Solução:

Existem diversos estudos e pesquisas que tentam usar a programação para ajudar, de alguma maneira, as pessoas sobre como ganhar na Mega-Sena.

Antes de iniciarmos a parte da programação Python, precisamos definir algumas coisas.

Vamos usar 6 variáveis, para representar as 6 dezenas da Mega-Sena, ok?
Elas serão:
dez1 dez2 dez3 dez4 dez5 dez6

A princípio, você poderia pensar:
Só usar laço FOR dentro de laço FOR, para cada uma das dezenas, variando de 1 até 60.

Parece um raciocínio que faz sentido.
Mas temos um problema: se fizer isso, você vai criar palpites com dezenas repetidas, experimente:


O script acima tem vários e vários palpites com dezenas repetidas:
1 1 1 1 1 1
1 2 3 4 5 5
etc etc

Podemos resolver isso deixando uma coisa bem clara:
O palpite "dez1 dez2 dez3 dez4 dez5 dez6" está em ordem crescente.

Ou seja:
dez1 > dez2 > dez3 > dez4 > dez5 > dez6

Isso quer dizer algumas coisas interessantes.
Por exemplo, a última dezena vai de 6 até 60.

Não tem como a última dezena ser 5, por exemplo.
Pois teríamos o menor palpite: 1 2 3 4 5...e a última dezena tem que ser 6 pra cima.

O grande segredo para esse tipo de questões é fazer com que:
dez2 > dez1
dez3 > dez2
dez4 > dez3
dez5 > dez5
dez6 > dez5

Ou seja, para dez1, vamos deixar o intervalo como range(60).
Já para dez2, o range deve começar de modo a ser sempre maior que dez1, e isso é feito assim: range(dez1+1, 60).

A dez3 deve ser sempre maior que dez2, isso é feito usando o seguinte intervalo: range(dez2+1,60), e assim sucessivamente.

Script Que Exibe Todos os Palpites da Mega-Sena


Nosso script fica então:

for dez1 in range(60):
    for dez2 in range(dez1+1,60):
        for dez3 in range(dez2+1,60):
            for dez4 in range(dez3+1,60):
                for dez5 in range(dez4+1,60):
                    for dez6 in range(dez5+1,60):
                        print(dez1+1,dez2+1,dez3+1,dez4+1,dez5+1,dez6+1)


Se você rodar o script acima, certamente vai levar um bom tempo para ver todos os possíveis palpites, que são mais de 50 milhões.

Ao invés de exibir todos, você pode usar um contador, para contar o número de possíveis palpites, veja:

total=0
for dez1 in range(60):
    for dez2 in range(dez1+1,60):
        for dez3 in range(dez2+1,60):
            for dez4 in range(dez3+1,60):
                for dez5 in range(dez4+1,60):
                    for dez6 in range(dez5+1,60):
                        total += 1
print(total)


Entrando no site oficial da Meg-Sena:
http://loterias.caixa.gov.br/wps/portal/loterias/landing/megasena/

Lá, na seção "Probabilidade", vemos que a chance de uma pessoa ganhar é de 1 em 50.063.860

Mas, hora, esse é o número que nosso programa calculou.
Ou seja, nosso script está correto.

Loops Aninhados (Laço dentro de laço)

Neste tutorial de nosso Curso Completo de Python, vamos ensinar o que são loops aninhados (nested), ou seja, vamos colocar laços dentro de laços, ver como é isso, para que serve, como funciona e exemplos reais de uso.




Loops Aninhados

Já falamos aqui em nosso curso sobre Testes Condicionais IF e ELSE aninhados, inclusive demos alguns exemplos de uso.

Agora voltamos ao assunto, porém vamos usar WHILE e FOR dentro de outros WHILE e FOR, por um motivo bem direto: aninhamento é absurdamente importante e usado.




Quando você se tornar uma programador profissional (clique para saber como ganhar dinheiro programando em Python), vai usar muito isso, muito mesmo.

Se você já entendeu a lógica dos IF e ELSE aninhados, já sabe tranquilamente aninhar, em teoria, os laços.

Exemplo de loopings aninhados

O melhor exemplo de loop dentro de loop, é o nosso calendário/relógio.

O ano tem 12 meses.
Todo santo ano, começa em Janeiro, depois Fevereiro, Março...até Dezembro.
Depois conta-se tudo de novo, e de novo, e de novo...é um looping.

Porém, dentro de cada mês tem os dias do mês.
Começa no dia 1, dia 2, dia 3...até o último dia do mês (que varia).
Mas quando acaba, volta tudo de novo...looping.

E dentro do dia temos as horas!
00h...01h...02h...12h...23h...e depois repete, repete.

Dentro de cada hora?
Loop dos minutos.

Dentro de cada minuto?
Loop dos segundos.

Sim, vivemos em loops aninhados.
Vamos colocar isso em prática programando em Python ?

Criando um Tabuleiro

Faça um programa em Python que solicite um número positivo inteiro ao usuário, e depois exiba um tabuleiro na tela, com igual número de linhas e colunas.

Por exemplo, se ele digitar 3 deve aparecer na tela:
x  x  x
x  x  x
x  x  x

Se digitar 2:
x  x
x  x

Se digitar 4:
x  x  x  x
x  x  x  x
x  x  x  x
x  x  x  x

Solução:

Vamos criar um tabuleiro de tamanho N x N, onde esse N o usuário fornece e armazenamos na variável n.

Usaremos duas varáveis de controle: linha e coluna, ok?




O primeiro laço FOR vai ser responsável por percorrer as linhas.
Ele vai percorrer um intervalo de n linhas, ou seja: range(n)

Dentro de cada linha dessa, precisamos desenhar as colunas, onde cada coluna printamos um "". E quantas vezes isso é feito? n vezes.
Ou seja, vamos usar outro intervalo de valor n: range(n)

Vamos usar uma variação da função print, que não quebra a linha automaticamente. Para isso, basta adicionar o end='' na função print, pra definir que no fim dela não fala nada, não coloque nenhum caractere (por padrão ela coloca \n de quebra de linha).

Quando terminar de imprimir cada linha, o que fazemos?
Precisamos dar uma quebra de linha, para o tabuleiro ficar bonitinho, então usamos  print() (isso mesmo, sem nada dentro).

Veja como nosso código ficou:

print("Vamos criar um tabuleiro de tamanho:  N x N")
n=int(input("Valor de N: ") )

for linha in range(n):
    for coluna in range(n):
        print("x  ",end='')
    print()


Guarde esse código com carinho, vamos usar no futuro quando formos programar diversos jogos, como jogo da velha, batalha naval etc.

Exercício resolvido de Python

Crie um programa que exiba todos os segundos e minutos no intervalo de uma hora, no seguinte formato: XXmin YYs
Por exemplo:
12min59s

Vamos usar duas variáveis, a minuto e segundo.
Ambas vão de 0 até 59, ou seja, vamos usar o intervalo de 60: range(60)

O primeiro FOR é para os minutos.
Primeiro o minuto 0. Dentro dele vamos imprimir do 0s até 59s.
Depois o minuto 1. Dentro deles imprimimos de 0s até 59s.
...
Por fim, minuto 59.

O FOR que vai estar aninhado é o responsável por imprimir os segundos.
Veja como ficou o código do programa:


for minutos in range(60):
    for segundos in range(60):
        print(minutos,"min",segundos,"s")

Exercício Resolvido de Python

Faça o mesmo do exemplo acima, mas adicione as horas para ficar no formato: XXh YYmin ZZs
Aqui, basta notar que as horas vão de 0h até 23h: range(24)

for horas in range(24):
    for minutos in range(60):
        for segundos in range(60):
            print(horas,"h",minutos,"min",segundos,"s")

(se demorar muito, e vai demorar, dê um control+C que o shell do Python vai parar de rodar)

Exercício Resolvido de Laço Aninhado

Você foi contratado por uma escola para fazer o seguinte script em Python:
Primeiro, pergunta a quem vai usar o script quantos alunos tem na sala.
Depois, quantas matérias cada aluno estuda.

Em seguida o usuário vai preenchendo a nota de cada matéria, de cada aluno.
Seu programa deve fornecer a média de cada aluno e a média geral da turma.

Solução:

Vamos armazenar o número de alunos na variável alunos e o número de matérias em materias.

O primeiro laço é o que vai percorrer os alunos:
Aluno 1, depois aluno 2, o aluno 3...ou seja: range(alunos)

Depois, para cada aluno vamos dar as respectivas notas de cada matéria.
A cada nota que o usuário der, vamos somar ela na variável 'mediaAluno', e ao final basta dividirmos esse número pelo número de matérias e temos a média daquele aluno.
A cada iteração do primeiro FOR, antes de digitarmos as notas de cada matéria, devemos zerar essa variável!

Quando tivermos a 'mediaAluno', vamos somar esse valor na variável 'mediaTurma', e no final do programa dividimos essa variável pelo número de alunos, para ter a média geral da turma.

Veja como ficou o código final:


alunos=int(input("Quantos alunos tem na turma: ") )
materias=int(input("Quantas matérias eles estudam: ") )

mediaTurma=0
for aluno in range(alunos):
    print("Aluno",aluno+1,":")
    
    mediaAluno=0
    for materia in range(materias):
          print("Nota da materia",materia+1,":", end='')
          nota=int(input())
          mediaAluno += nota

    mediaAluno /= materias
    print("Media desse aluno:",mediaAluno,"\n")
    
    mediaTurma += mediaAluno

mediaTurma /= alunos
print("Media da turma:",mediaTurma)

Python na Mega-Sena

Faça um script em Python que exiba todos os possíveis palpites da Mega-Sena.
Dados:
  1. Cada palpite possui 6 dezenas
  2. As dezenas variam de 1 até 60
  3. Não pode repetir dezena

Como calcular Fatorial em Python

Neste tutorial de nosso Curso de Python Online Grátis, vamos te ensinar o que é o número fatorial, para que serve, e como implementar ele tanto usando o laço FOR como o laço WHILE.

Já pensou em ir além de apenas aprender Python...e trabalhar com isso?
Leia:

Fatorial na Matemática

O fatorial é uma operação matemática, representada pelo símbolo de exclamação: !



A fórmula de fatorial de um número n é:
n! = n * (n-1) * (n-2) * ... * 3 * 2 * 1

Ou seja, o valor de n! (leia-se: n fatorial) é o produto de 1, por 2, por 3, ..., por (n-1) e n.

Por exemplo:
4! = 4 x 3 x 2 x 1 = 24
5! = 5 x 4 x 3 x 2 x 1 = 120 (ou: 5! = 5 x 4! = 5x24 = 120)

E por ai vai.

O fatorial é muito usado em um ramo da Matemática chamado Análise Combinatória. Muito mesmo. Se você fez ensino médio, certamente sabe o que é um fatorial.

Agora, vamos levar isso pro nosso amado Python.


Fatorial com o laço WHILE em Python

Vamos aprender agora como calcular o fatorial de número usando o laço While em Python.



Vamos lá, tente o máximo que puder:
Crie um programa em Python que pede um número inteiro ao usuário e calcule seu fatorial.


Vamos pedir um número inteiro e positivo ao usuário, e armazenar na variável numero.

Agora precisamos calcular o produto:
1*2*3*...*(numero-1) * numero

Vamos armazenar esse produto na variável resultado.
Inicialmente, vamos iniciar a variável resultado com 1:

resultado = 1

Agora vamos precisar de um contador, vamos usar a variável count para ir de 1 até numero, a cada iteração do laço WHILE, ela é incrementada.

Então, dentro do laço while, fazemos com que resultado seja multiplicado por count, pois count vai assumir os valores de 1, 2, 3, ..., até numero.

Quando chegar em numero, nosso looping while deve parar.
Logo, o teste condicional do while deve ser: count <= numero , ok?

Veja como ficou nosso script em Python:


numero = int(input("Fatorial de: ") )

resultado=1
count=1

while count <= numero:
    resultado *= count
    count += 1

print(resultado)


Lembrando que:
  • resultado *= count é o mesmo que: resultado = resultado * count
Ou seja, o novo valor de 'resultado' vai ser o valor antigo multiplicado por 'count'.

  • Já: count += 1 significa: count = count + 1
Ou seja, estamos incrementando o valor de 'count' em uma unidade, a cada iteração do laço WHILE.


Calcular fatorial usando laço FOR em Python

A lógica deve ser a mesma. Na verdade, tudo que um laço WHILE faz o FOR faz, e vice-versa.



"Ué, então pra que criar os dois?"
Porque tem situações que é melhor usar um e situações que é melhor usar outro.

Neste caso, você vai ver que é melhor usar o FOR.

Vamos repetir a ideia: Precisamos fazer várias multiplicações, do número 1 até o valor inserido pelo usuário, numero.
Do intervalo 1 até numero.

Isso te lembra algo? Intervalo?

Sim, range.
Nossa querida, amada função range do Python, que é unha e carne com o laço FOR.

Como queremos um intervalo que vai de 1 até numero, basta usarmos:
range(1, numero+1)

Veja como nosso código fica bem mais enxuto e fodástico usando o laço FOR:

numero = int(input("Fatorial de: ") )

resultado=1
for n in range(1,numero+1):
    resultado *= n

print(resultado)

Exercício de Python

Seu  professor de Matemática, cansado de ficar fazendo multiplicações para achar o fatorial, te encomendou um script em Python (obviamente pagou, pois você possui um certificado do curso de Python).

Porém, ele quer fazer vários e vários cálculos.
Nos exemplos anteriores a gente pede o número uma vez, mostra o fatorial e fecha o script.

Ele não, ele quer um looping infinito, que só acabe quando ele fornecer o número 0 como entrada.

Se garante? Faça aí e poste nos comentários.

Estruturas Aninhadas - IF ELSE dentro de IF ELSE

No tutorial de Python anterior de nosso curso grátis, falamos em mais detalhes sobre a estrutura de controle IF e apresentamos a sua companheira ELSE.

Fizemos um programinha simples, e hackeamos ele, encontrando alguns problemas, reveja o tutorial:

IF e ELSE em Python




Corrigindo Bugs

No tutorial anterior, propomos uma questão:
O usuário deve dizer qual o maior e melhor time de futebol do mundo.
Se digitar 1, diz que é o Corinthians.
Se digitar 2, afirma que o Flamengo é tal clube.

Nosso código Python ficou assim:

print('1. Corinthians')
print('2. Flamengo')      
resposta = int (input('Qual melhor time: ') )

if resposta == 1: 
    print('Você deve ser corinthiano')
else:             
    print('Você deve torcer Flamengo')

Mas aí notamos um problema: se você digitar 3, 4, -1, 0 ou qualquer outro número que não seja 1, diz que você torce Flamengo.

Isso está errado (nada contra o Flamengo), é que se você digitou 3, 4 ou outro número, você não está escolhendo o Flamengo, então por que raios aparece que sou torcedor do Flamengo?

A resposta é simples.
Se você digitar 1, o teste condicional do IF vai dar verdadeiro e cai no print do Corinthians. Até ai ok.

Mas para qualquer outro número que digitar, vai cair no ELSE e falar do Flamengo!

Isso é um bug, uma falha. Vamos consertar!
Devemos incrementar o seguinte ao nosso programa: qualquer outro número que não seja 1 ou 2, o script deve exibir a mensagem na tela "É, você não deve ser torcedor de Corinthians o Flamengo".

Pronto, agora sim vai ficar bacana.
Vamos resolver esse bug de nosso código.




Estruturas Aninhadas - IF ELSE dentro de IF ELSE

Veja que, inicialmente, fazemos o teste no código, pra verificar se a resposta foi 1. Se sim, ok, fala do Corinthians.

Quando a resposta não for 1, devemos fazer outro teste: checar se o número digitado foi 2. Se for, exibir a mensagem do Flamengo. Se não (else), exibir a mensagem que o usuário deve torcer outro time.

E como fazer esse outro teste?
Ué, usando IF e ELSE.

A diferença é que vamos fazer esse outro teste dentro o else,
Ou seja, estamos aninhando as estruturas de controle IF e ELSE, colocando uma dentro da outra.

Nosso código vai ficar assim:

print('1. Corinthians')
print('2. Flamengo')      
resposta = int (input('Qual melhor time: ') )

if resposta == 1: 
    print('Você deve ser corinthiano')
else:             
    if resposta == 2:
        print('Você deve torcer Flamengo')
    else:
        print('Certamente você não torce Corinthians nem Flamengo')

Nossa lógica é a seguinte: Se digitar 1, ok é corintiano.
Se não for 1, vai pro ELSE e vamos fazer outro teste.
Dentro do ELSE, colocamos um IF pra testar se ele digitou 2.
Se sim, ok é flamenguista.

Se não for, cai dentro do ELSE, mas desse novo ELSE, ok?
O usuário só cai dentro desse novo ELSE se não digitar nem 1 e nem o 2.

Faz sentido, né?




Aninhar e Indentar em Python

Note algumas coisas sobre IF e ELSE
Para cada IF, temos um ELSE.
Podemos criar um IF sem um ELSE, mas não existe ELSE sem IF
Você tem sempre que alinhar o IF de seu ELSE
Se usar IF ELSE aninhado, ele deve estar abaixo e um pouco mais pra frente que o IF ou ELSE anterior

O molde de IF ELSE's aninhados é o seguinte:

if condição1:       # Primeiro IF
   [codigo]
   
   if condição2:    # Segundo IF
      [codigo]
   else:            # ELSE é do segundo IF
       [codigo]

else:               # ELSE do primeiro IF
    if condição3:
        [codigo]
    else:           # ELSE do terceiro IF
        [codigo]


Não tem limite de aninhamento.
O importante é um estar dentro (aninhado) do outro, e alinhado (indentado).
Ok ?

IF e ELSE aparecem aos pares, e o Python só vai saber a qual IF o ELSE pertence, de acordo com o alinhamento, por isso você deve deixar tudo muito bem aninhado e organizado.

Por isso que dizemos que o código Python é 'organizado', pois somos obrigados a deixar tudo bem alinhado, senão não funciona seu código.