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???
#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:
O trecho while n == 0
produzirá um loop infinito e assim irá imprimir infinitamente números na tela (não queremos isso).
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP