TransWikia.com

Invertendo sequência (PYTHON 3)

Stack Overflow em Português Asked by Reginaldo Barros da Cunha on December 19, 2021

Tenho que implementar o seguinte:

Escreva um programa que recebe uma sequência de números inteiros terminados por 0 e imprima todos os valores em ordem inversa. **Note que 0 (ZERO) não deve fazer parte da sequência.

Exemplo:

Digite um número: 1
Digite um número: 7
Digite um número: 4
Digite um número: 0

4
7
1

Fiz o seguinte código, mas não consigo restringir o 0.

seq = []
i = 1

while i > 0:
    n = int(input("Digite n: "))    
    seq.append(n)

    while n == 0:

        for i in seq[i]:

            print (i)
            i -= 0

Alguém poderia me dizer o que fiz de errado???

8 Answers

#inverter apenas um numeros

n = input("Digite um número:")
print (''.join(reversed(n)))

#inverter letras (de uma palavra)

n = input("Digite uma Palavra:")
print (''.join(reversed(n)))

Answered by Juliana on December 19, 2021

Pelo que entendi, o número 0 não será contabilizado e nem inserido na lista. Neste caso, o 0 funcionará apenas como flag de parada, ou seja, quando for digitado o valor "0", o fluxo normal do programa será encerrado. A partir deste momento, o programa exibirá todos os valores digitados anteriormente em ordem inversa, exceto o valor "0".

Para resolver esta questão pode ser utilizado o seguinte código:

lista = list()
while True:
    n = int(input(f'Digite um número: '))

    if n != 0:
        lista.append(n)
    else:
        cont = 0
        while len(lista) >= 1:
            print(lista[-1])
            del(lista[-1])
            cont -= 1
        break

Observe que, ao ser digitado um valor, o programa verifica se o mesmo é diferente de "0". Se for diferente de "0", o referido valor será inserido em lista e o laço de repetição - que alimenta a lista - será reiniciado. Caso contrário, o laço de repetição será encerrado e a lista será exibida em ordem inversa sem o valor "0".

Observe também que, quem controla a exibição dos elementos da lista é o 2º while. Para isso, ele verifica se o tamanho da lista é maior ou igual a "1". Caso seja, é exibido o último elemento da lista (lista[-1]). Depois, deleta o referido elemento da lista e decrementa o contador. Em seguida, todo esse processo é refeito até a lista inicial não possuir mais elementos.

Outra forma de resolver esta questão seria:

lista = list()
while True:
    n = int(input(f'Digite um número: '))

    if n != 0:
        lista.append(n)
    else:
        for c in sorted(lista, reverse=True):
            print(c)
        break

Answered by Solkarped on December 19, 2021

retorne = input("Digite seu número: ") 

def InverterNum():
    reverter =[]
    reverter.extend(retorne)
    reverter.reverse()

    revertido = str(reverter).strip('[]')
    revertido = ''.join(reverter)

    return revertido

ver = print("Seu número invertido: " + InverterNum())

Answered by Hérika Ströngreen on December 19, 2021

O código permanece no loop enquanto n é diferente de zero, sai quando n=0 e não adiciona o zero à lista. Segue o código

seq = []
#inicia n com 1 para entrar no loop
n = 1

while n:
    n = int(input("Digite n: "))
    # só adiciona na lista se for diferente de zero
    if n!=0 : seq.append(n)
print(seq)
# para inverter uma lista, é só usar [::-1]
print(seq[::-1])

A saída ficou:

Digite n: 1
Digite n: 2
Digite n: 3
Digite n: 4
Digite n: 5
Digite n: 0
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

Answered by fabincarmo on December 19, 2021

def numReverse(n,numInv = 0):
  while n > 0:
    resto = n % 10
    n = n // 10
    numInv = numInv * 10 + resto
  print(numInv)

exemplo usa

numReverse(123)
numReverse(918273563)

Answered by izaque on December 19, 2021

Se você quer ter um estilo Pythonico de programar, pode fazer assim:

Para ler os dados pode considerar o exemplo do nosso amigo Arcashaid. Seguindo com a parte de inverter a lista, veja como é elegante no estilo pythonico:

seq.reverse()

Ou simplesmente:

seq = seq[::-1]

Answered by Andrey França on December 19, 2021

Problemas:

  1. O trecho while n == 0 produzirá um loop infinito e assim irá imprimir infinitamente números na tela (não queremos isso).

  2. O valor seq[i] será um valor inteiro e portanto não é iterável; fazer for i in seq[i] não faz sentido algum.

Uma dica: para aprender Python da forma pythonica você precisará se livrar de qualquer vício de programação que você talvez tenha com outras linguagens.

Eu resolveria seu problema assim:

# Lista de valores:
seq = []

# Executa até ocorrer `break`
while True:

    # Pede ao usuário um valor inteiro:
    n = int(input("Digite n: "))    

    # Se for zero, pare o loop:
    if n == 0: break

    # Se não, adiciona o valor a lista:
    seq.append(n)

# Percorre toda a lista de trás para frente:
for i in reversed(seq):

    # Exibe o valor na tela:
    print(i)

Com um loop infinito você lê os valores até encontrar zero, enquanto isso adiciona-os à lista. Ao final, percorre toda a lista de trás para frente, com a função reversed, exibindo os valores.

Você pode ver o código funcionando aqui.


Na versão 3.8 do Python foi adicionado a assignment expression que permitiria simplificar o código acima, que gera uma lista de valores a partir da entrada enquanto não for informado o número 0:

seq = []

while (n := int(input('Digite n: '))) != 0:
    seq.append(n)

A lista seq possuirá todos os números informados enquanto não for informado o valor 0. Só um cuidado deve ser tomado quanto à validação da entrada, pois a estrutura int lança uma exceção ValueError se o valor informado não for numérico; a exceção não está sendo tratada no exemplo.

Answered by Woss on December 19, 2021

seq = []
while True:
    numero = int(input())
    if (numero != 0):
        seq.append(numero)
    else:
        break

for i in seq[::-1]:
    print (i)

Eu fiz desse modo por que gosto de utilizar while com breaks, mas teria como fazer na mesma condição do while, espero ter entendido direito o que vc queri, se não for isso avise-me que eu modifico a resposta

Answered by user53006 on December 19, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP