Enviar um café pro programador

Python - Três números em ordem decrescente

"Faça um Programa que leia três números e mostre-os em ordem decrescente."



Invertendo dois a dois

O grande segredo desse tipo de algoritmo, é comparar e trocar valor das variáveis, duas a duas.

Por exemplo, vamos pegar a sequência: 10 - 20 - 30
Primeira posição: 10
Segunda posição: 20
Terceira posição: 30

Primeiro vamos comparar a segunda posição com a terceira.
A terceira posição é maior que a segunda? Se for, inverte.
Agora fica: 10 - 30 - 20

Pronto, colocamos em ordem decrescente as duas últimas posições.
Agora vamos comparar a primeira posição com a segunda.

A segunda posição tem um valor maior (30) que a primeira (10)?
Sim! Tem! Então inverte essas duas.
Agora fica: 30 - 10 - 20

Note que ao fazer isso, da direita pra esquerda, pegando duas a duas a posição, jogamos sempre o maior número pro começo da ordem.

Por fim, vamos comparar novamente a segunda com a terceira posição.
A terceira é maior que a segunda? Se for, troca! E é.
Agora fica: 30 - 20 - 10

Algoritmo:
1. Compara as duas últimas posições
2. Compara as duas primeiras posições
3. Compara novamente as duas últimas posições


primeiro = int(input('Primeiro numero: '))
    segundo  = int(input('Segundo numero : '))
    terceiro = int(input('Terceiro numero: '))

    print(primeiro,'-',segundo,'-',terceiro)

    if(terceiro > segundo):
        aux = terceiro
        terceiro = segundo
        segundo = aux

    if(segundo > primeiro):
        aux = segundo
        segundo = primeiro
        primeiro = aux

    if(terceiro > segundo):
        aux = terceiro
        terceiro = segundo
        segundo = aux

    print(primeiro,'-',segundo,'-',terceiro)

Mais a frente, estudaremos o algoritmo de bubble sort, onde vamos aprender a ordenar listas de números de qualquer tamanho. A lógica é a mesma: ir comparando dois a dois, do fim pro começo (ou começo pro fim - depende se quer ordem crescente ou decrescente).






Treinando mais ordenação

Só pra treinar, vamos pegar uma sequência maior, de 4 números:
10 - 20 - 40 - 30

Vamos comparar dois a dois.
1. Quarta posição com a terceira: tá ok, 40 é maior que 30, não invertemos.
Ordem: 10 - 20 - 40 - 30

2. Agora a terceira posição (40) com a segunda (20):
40 é maior, então inverte.
Agora fica: 10 - 40 - 20 - 30

3. Segunda com a primeira posição: inverte, pois 40 > 10
Agora fica: 40 - 10 - 20 - 30

4. Chegamos no começo da lista. A primeira posição tem o maior número, que é o correto. Agora vamos comparar tudo de novo, da direita pra esquerda, porém vamos até a segunda posição, pois a primeira já tem o maior.

5. Comparando quarta com terceira: inverte, pois 30 > 20
Temos: 40 - 10 - 30 - 20

6. Comparando terceira com segunda: inverte, pois 30 > 10
Temos: 40 - 30 - 10 - 20
Chegamos ao fim, e colocamos o segundo maior valor na segunda posição, como desejamos. Não mexemos mais na primeira nem na segunda posição da lista.

Agora, vamos pro começo de novo, na direita.

7. Comparando a quarta com a terceira posição: inverte, pois 20 > 10
Temos: 40 - 30 - 20 - 10

Chegamos ao fim, o terceiro maior número na terceira posição.
Automaticamente, a última posição foi preenchida e...tcharam, a lista ficou ordenada, do maior pro menor!

26 comentários:

  1. Melhor tutorial, melhor explicação, melhor exemplo...simplesmente fantástico o site.

    Indiquei pra toda turma da facul em fevereiro, e recebo agradecimentos até hoje dezembro

    ResponderExcluir
  2. Eu não fiz como tá aí mas parece que deu certo
    # 6º Ordem Decrescente
    n1=float(input("Digite o 1º número: "))
    n2=float(input("Digite o 2º: "))
    n3=float(input("Digite o 3º: "))
    if n1 > n2 > n3:
    print("Do maior para o menor:", n1,"-", n2,"-", n3)
    elif n2 > n1 > n3:
    print("Do maior para o menor:", n2,"-", n1,"-", n3)
    elif n3 > n2 > n1:
    print("Do maior para o menor:", n3,"-", n2,"-", n1)
    elif (n1 == n2 == n3) or (n2 == n1 == n3) or (n3 == n2 == n1):
    print("Números iguais!")

    ResponderExcluir
  3. excelente explicação... Eu tentei fazer de outro modo é ficou assim.

    num1 = int(input("Digite um nnumero:"))
    num2 = int(input("Digite um nnumero:"))
    num3 = int(input("Digite um nnumero:"))

    if num1 > num2 and num2 > num3:
    print(num1, num2, num3)
    elif num1 > num2 and num3 > num2:
    print(num1, num3, num2)
    elif num2 > num3 and num3 > num1:
    print(num2, num3, num1)
    elif num2 > num3 and num1 > num3:
    print(num2, num1, num3)
    elif num3 > num2 and num2 > num1:
    print(num3, num2, num1)
    elif num3 > num2 and num1 > num2:
    print(num3, num1, num2)

    ResponderExcluir
    Respostas
    1. Bom Dia, e se eu quisesse colocar o nume de do cliente junto com os valores

      Excluir
    2. Óla Maycon seu codigo apresenta alguns erros nas respostas então eu melhorei ele pra voce :)
      num1 = int(input("Digite um numero:"))
      num2 = int(input("Digite um numero:"))
      num3 = int(input("Digite um numero:"))
      if num1 > num2 and num1>num3 and num2 > num3:
      print(num1, num2, num3)
      elif num1 > num2 and num1>num3 and num3 > num2:
      print(num1, num3, num2)
      elif num2 > num3 and num2 > num1 and num3 > num1:
      print(num2, num3, num1)
      elif num2 > num3 and num2 > num1 and num1 > num3:
      print(num2, num1, num3)
      elif num3 > num1 and num3>num2 and num2 > num1:
      print(num3, num2, num1)
      elif num3 > num1 and num3 > num2 and num1 > num2:
      print(num3, num1, num2)

      Excluir
  4. Pode se retirar o último if e coloca um while para aproveitar o primeiro if

    ResponderExcluir
  5. Meu codigo ficou gigante, mas funcionou....

    num1=int(input("Digite um numero inteiro:"))
    num2=int(input("Digite aqui outro numero inteiro:"))
    num3=int(input("Digite o terceiro numeo inteiro:"))

    if num1>num2 and num1>num3:
    maior=num1
    if num2>num3:
    meio_termo=num2
    menor=num3
    else:
    meio_termo=num3
    menor=num2
    if num2>num1 and num2>num3:
    maior=num2
    if num1>num3:
    meio_termo=num1
    menor=num3
    else:
    meio_termo=num3
    menor=num1
    if num3>num1 and num3>num2:
    maior=num3
    if num1>num2:
    meio_termo=num1
    menor=num2
    else:
    meio_termo=num2
    menor=num1
    print(maior, meio_termo, menor)

    ResponderExcluir
  6. Achei um meio bem fácil e rapido de fazer, e funciona com o número fixo de variaveis, como nos exemplos acima:

    lista =(a,b,c)
    ordenada = sorted(lista)
    print(ordenada[2])
    print(ordenada[1])
    print(ordenada[0])

    ResponderExcluir
    Respostas
    1. Nesse ponto do curso, ainda não estudamos sequências (listas, tuplas...), que foi o que você usou. O Python tem muita funcionalidade pronta, realmente.

      Lembrando que não foi você quem fez, na verdade foi o Python. O objetivo da gente ter ensinado do jeito que fizemos foi ensinar a lógica por trás da coisa, é importante saber, melhora seu raciocínio, criatividade e te faz um programador melhor, mais 'resolvedor de problema'.

      Excluir
    2. Estou tendo muita dificuldade com problemas assim com 3 variáveis. Teria alguma dica para pode melhorar o raciocínio? perco muito tempo tentando entender algo 'simples'. Obrigado!

      Excluir
  7. """Faça um Programa que leia três números e mostre o maior e o menor deles."""
    num1 = int(input('Digite o primeiro número: '))
    num2 = int(input('Digite o segundo número: '))
    num3 = int(input('Digite o terceiro número: '))
    maior = num1
    menor = num1
    if num2 > maior:
    maior = num2
    if num3 > maior:
    maior = num3
    if num2 < menor:
    menor = num2
    if num3 < menor:
    menor = num3
    print(f'O maior número é {maior} e o menor é {menor}.')

    ResponderExcluir
  8. Eu fiz em Lua Script, mas mesmo assim eu gostaria de mostrar como ficou o resultado segundo minha lógica:

    --[[

    9 - Faça um Programa que leia três números e mostre-os em ordem decrescente.

    --]]

    print('Digite um número: ')
    num1 = io.read()

    print('Digite um número: ')
    num2 = io.read()

    print('Digite um número: ')
    num3 = io.read()

    maior, meio, menor = num1, num1, num1

    -- EM BAIXO DEFINE QUEM VAI SER O MAIOR NÚMERO

    if num2 > maior and num2 > num3 then
    maior = num2
    elseif num3 > maior and num3 > num2 then
    maior = num3
    end

    -- EM BAIXO DEFINE QUEM VAI SER O MENOR NÚMERO

    if num2 < menor and num2 < num3 then
    menor = num2
    elseif num3 < menor and num3 < num2 then
    menor = num3
    end

    --[[
    EM BAIXO DEFINE QUEM VAI SER O NÚMERO ENTRE O MAIOR E O MENOR. OBSERVE QUE ESTA VERIFICAÇÃO FICOU POR ÚLTIMO. A LÓGICA DISSO É FAZER COM QUE DECIDA, APÓS TER O MAIOR E MENOR NÚMERO, QUEM FICARÁ ENTRE O MAIOR E O MENOR DOS NÚMEROS. CASO ESTA VERIFICAÇÃO NÃO ESTEJA POR ÚLTIMO, O PROGRAMA IRÁ FAZER COM QUE OS RESULTADOS PASSAM A SE IGUALAR ENTRE OS OUTROS.
    --]]

    if num2 < maior and num2 > menor then
    meio = num2
    elseif num3 < maior and num3 > menor then
    meio = num3
    end

    print(maior, meio, menor)

    ResponderExcluir
  9. confesso que já estava com vontade de chorar em posição fetal, porém decide fazer essa lógica no papel para eu poder visualizar melhor e bingo! finalmente entendi uma coisa simples que pode ser bem poderoso em certas ocasiões.

    ResponderExcluir
  10. n1 = input('Digite o primeiro: ')
    n2 = input('Digite o segundo: ')
    n3 = input('Digite o terceiro: ')

    if n1 > n2 and n2 > n3:
    print('Do maior para o menor: {} {} {}'.format(n1, n2, n3))

    elif n2 > n1 and n1 > n3:
    print('Do maior para o menor: {} {} {}'.format(n2, n1, n3))

    elif n1 < n3 and n2 > n3:
    print('Do maior para o menor: {} {} {}'.format(n2, n3, n1))

    elif n3 > n2 and n2 > n1:
    print('Do maior para o menor: {} {} {}'.format(n3, n2, n1))

    elif n1 > n2 and n2 < n3 and n1 < n3:
    print('Do maior para o menor: {} {} {}'.format(n3, n1, n2))

    elif n1 > n2 and n3 > n2:
    print('Do maior para o menor: {} {} {}'.format(n1, n3, n2))

    elif n1 == n2 == n3 or n2 == n1 == n3 or n3 == n2 == n1:
    print('Numeros iguais!')

    ResponderExcluir
  11. maior = menor = 0
    for n in range(1,4):
    num = int(input(f"{n}º número: "))
    if n == 1:
    maior = menor = num
    if num > maior:
    maior = num
    if num < menor:
    menor = num
    print("O número maior é:",maior)
    print("O número menor é:",menor)

    ResponderExcluir
  12. n1 = int (input ('Digite um número: '))
    n2 = int (input ('Digite um número: '))
    n3 = int (input ('Digite um número: '))

    print (n1,'-',n2,'-',n3)

    if n1 > n2 and n1 > n3:
    maior = n1
    if n2 > n3:
    meio = n2
    menor = n3
    else:
    meio = n3
    menor = n2

    if n2 > n1 and n2 > n3:
    maior = n2
    if n1 > n3:
    meio = n1
    menor = n3
    else:
    meio = n3
    menor = n1

    if n3 > n1 and n3 > n2:
    maior = 3
    if n1 > n2:
    meio = n1
    menor = n2
    else:
    meio = n2
    menor = n1

    print (maior,'-',meio,'-',menor)
    input ()

    ResponderExcluir
  13. Boa noite! Primeiro gostaria de agradecer pelo curso.
    Tenho uma dúvida. Existe uma forma de saber quantas vezes eu devo verificar a sequência baseando-se no número de termos? Se alguém puder responder eu agradeço.

    ResponderExcluir
  14. Aqui, fiz em duas formas para responder a questão:

    '''
    Forma 01
    '''

    number_01 = int(input('Informe o valor do número_01: '))
    number_02 = int(input('Informe o valor do número_02: '))
    number_03 = int(input('Informe o valor do número_03: '))

    if number_01 < number_02 < number_03:
    print(number_01, number_02, number_03)
    elif number_01 < number_03 < number_02:
    print(number_01, number_03, number_02)
    elif number_02 < number_01 < number_03:
    print(number_02, number_01, number_03)
    elif number_02 < number_03 < number_01:
    print(number_02, number_03, number_01)
    elif number_03 < number_02 < number_01:
    print(number_03, number_02, number_01)
    else:
    print(number_03, number_01, number_02)

    '''
    Forma 02
    '''

    number_01 = int(input('Informe o valor do número_01: '))
    number_02 = int(input('Informe o valor do número_02: '))
    number_03 = int(input('Informe o valor do número_03: '))

    numeros = []

    numeros.append(number_01)
    numeros.append(number_02)
    numeros.append(number_03)

    print(sorted(numeros, reverse=True))

    ResponderExcluir
  15. Caros, preferi criar uma lista auxiliar e ir adicionando os números com o método WHILE e as condições do IF. No final ,utilizei o FOR para printar os números, já em ordem decrescente, em uma única coluna:

    lista_nrs = []

    while len(lista_nrs) != 3:
    numero = input( 'Digite um numeral aqui').strip()
    if not numero.isnumeric or numero == '':
    print( 'Digite um número válido' )
    else:
    lista_nrs.append(numero)

    lista_nrs.sort(reverse = True)

    for numero in lista_nrs:
    print(numero)

    Output:

    6
    5
    4

    ResponderExcluir
  16. Caros, preferi criar uma lista auxiliar e ir adicionando os números com o método WHILE e as condições do IF. No final ,utilizei o FOR para printar os números, já em ordem decrescente, em uma única coluna:

    lista_nrs = []

    while len(lista_nrs) != 3:
    numero = input( 'Digite um numeral aqui').strip()
    if not numero.isnumeric or numero == '':
    print( 'Digite um número válido' )
    else:
    lista_nrs.append(numero)

    lista_nrs.sort(reverse = True)

    for numero in lista_nrs:
    print(numero)

    Output:

    6
    5
    4

    ResponderExcluir
  17. Eu pensei desse jeito:

    nume1 = int(input('Primeiro numero:'))
    nume2 = int(input('Segundo numero:'))
    nume3 = int(input('Terceiro numero:'))

    listert = [nume1, nume2, nume3]

    listert.sort(reverse = True)

    print(listert)

    ResponderExcluir