Ir ao conteúdo

Python Achar o sucessor e antecessor em uma lista.


Ir à solução Resolvido por Visitante,

Posts recomendados

Postado

Estou querendo, fazer uma função que procure dentro de uma lista uma string ou numeral, e diga o sucessor e antecessor dele nessa lista.

Por exemplo [ 2 , 0 , 5 , 8 ,  9]

Ai se eu digitasse o numero 5, a programa me falasse que o 0 vem antes do 5 na lista e o 9 vem depois.

  • Solução
Postado

Boa noite Rafael!

 

Para resolver esta questão você precisa verificar primeiro se o número que procura existe dentro da lista.

Independente do tamanho que ela tenha, no seu exemplo o tamanho dela é 5 e é numérica, então vou basear minha resposta desses dois parâmetros, pois se fosse string muda um pouco o método de busca e verificação.

 

1º) Você deve colocar uma variável recebendo um input de um inteiro e pedir ao usuário que digite um número para verificar se ele existe na lista:

 

  • Primeiro verifique se NÃO existe o valor digitado e retorne a mensagem: "Este número digitado não existe na lista".

Caso ele exista na lista:

 

  • Guarde em uma variável o indice do valor encontrado na lista.
  • Guarde em uma variável o tamanho de sua lista.
  • Guarde em uma variável o valor do indice -1 do valor encontrado na lista.(Este será o seu antecessor ao valor digitado)
  • Faça um teste de Try Except(testando IndexError) para o valor do indice +1 do valor encontrado na lista.

Por que isso?

O se você tomar o 9 da sua lista por exemplo, ele não terá um sucessor por ser o último da lista, por tanto o valor acrescido em +1, vai gerar um erro de IndexError: list index out of range, mas e porque então com o 2 da lista isso não ocorre e ele me retorna o 9 da lista?

 

Isso ocorre porque o tamanho da lista é de 5 números positivos e 5 números negativos, conforme a lista do exemplo está criada.

0, 1, 2, 3, 4, -1 -2 -3 -4 -5

 

Quando ocorrer isso e você tratar o except Index Error:

voce deve passar uma mensagem dizendo que o valor digitado foi encontrado na lista e que o seu antecessor é o número X e que não há sucessor na lista para Y(informe aqui o último número da lista) e nesse ponto voce deve finalizar o programa com um exit().

 

Se tudo correr bem e o número pesquisado na lista contiver um antecessor e um sucessor faça o mesmo que acima, passar uma mensagem dizendo que o valor digitado foi encontrado na lista e que o seu antecessor é o número X e que o seu sucessor é o número Y, após isso finalizar o programa com um exit().

 

Veja as telas dos testes que fiz

Com o número 5

image.png.22b3ddcb94aa5a55a560209895f0577e.png

 

Com o número 2

image.png.faccf4abdd04dfe699bb2c71500ed882.png

 

Com o número 9

image.png.9a82dd47642e2c2fe6f8aa787b147603.png

 

Caso o valor digitado não exista na lista

image.png.0f72593a0f83bf00947a878aa4a62f8e.png

Com base nessas explicações que lhe passei acredito que você vai conseguir terminar este código, caso ainda tenha dúvidas, poste aqui o seu código mesmo que incompleto, que eu vejo o que precisa ser corrigido!👍

Postado
8 horas atrás, Rafaelmos disse:

Opa @fspjonny valeu, desculpe por demorar a responder, eu conseguir aqui. Agradeço.

Mas conseguiu por outros meios ou as dicas que passei ajudaram?🤔

Postado
4 minutos atrás, fspjonny disse:

Mas conseguiu por outros meios ou as dicas que passei ajudaram?🤔

Ajudaram sim, fui meio lento para entender, mas terminei entendendo.

Postado
28 minutos atrás, Rafaelmos disse:

Ajudaram sim, fui meio lento para entender, mas terminei entendendo.

 

Muito obrigado pelo feedback👍

 

É excelente saber disso, pois eu tô tentando desenvolver didática para ajudar a resolver os problemas, mas sem dar a resposta ou o código pronto diretamente, com isso eu me ajudo a lembrar coisas que já ví há algum tempo e posso novamente fixar elas na mente.

 

Qualquer dúvida, estou aqui para ajudar!😀👍

Postado

Bom tenho outra duvida, eu você pode ver minha outra pergunta, https://www.clubedohardware.com.br/forums/topic/1413058-sobre-o-antecessor-e-sucessor-de-uma-arvore-binária/?tab=comments#comment-7640117

 

Essa pergunta que fiz aqui, antes dessa da arvore, era para tentar fazer uma gambiarra, mas notei que não ia funcionar, devido que a lista ficava poderia só ficar em InOrdem, PosOrdem ou em PreOrdem, assim, não dava para eu fazer dessa maneira.

Ai tentei de outra maneira, mas não estou conseguindo chamara função sucessor nem a antecessor.

Postado
2 horas atrás, fspjonny disse:

 

Muito obrigado pelo feedback👍

 

É excelente saber disso, pois eu tô tentando desenvolver didática para ajudar a resolver os problemas, mas sem dar a resposta ou o código pronto diretamente, com isso eu me ajudo a lembrar coisas que já ví há algum tempo e posso novamente fixar elas na mente.

 

Qualquer dúvida, estou aqui para ajudar!😀👍

Esqueci de te mostrar como ficou o código kkk.

lista = [ 2 , 0, 5 , 8 ,  9]
print (lista)
v = int(input("Digite o valor a ser procurado: "))
if v not in  lista:
    print ("valor nao existe na lista")
else:
    indice = lista.index(v)
    antecessor = indice-1
    tamanho = len(lista)
    sucessor = indice+1
    if sucessor >= tamanho:
        print(f"Antecessor de {v} é {lista[antecessor]}")
        print(f"Sucessor não exite")
    elif antecessor <= tamanho-(tamanho+1):
        print(f"Antecessor não exite")
        print(f"Sucessor de {v} é {lista[sucessor]}")
    elif antecessor >= tamanho-(tamanho+1) and tamanho >= sucessor:
        print(f"Antecessor de {v} é {lista[antecessor]}")
        print(f"Sucessor de {v} é {lista[sucessor]}")

 

Postado

Ficou ótimo, mas você não considerou os números negativos posicionais na sua lista, simplesmente limitou ela até o valor do primeiro índice da lista e o último índice da lista, mas ok, tá valido porque retorna o resultado esperado nesse caso em particular.

 

Quanto a sua outra questão sobre sucessor e antecessor em arvore binária, tem lá no tópico uma resposta.👍

Postado

@fspjonny Certo obrigado novamente, eu limitei assim, por que não manjo muito de usar algumas funções, como estou aprendendo tentei fazer de uma forma que eu consiga compreender melhor e também que alguém que não saiba muito programação entenda.

Postado
38 minutos atrás, Rafaelmos disse:

@fspjonny Certo obrigado novamente, eu limitei assim, por que não manjo muito de usar algumas funções, como estou aprendendo tentei fazer de uma forma que eu consiga compreender melhor e também que alguém que não saiba muito programação entenda.

 

Isso vem com o tempo e estudo mesmo, daqui uns dias, semanas e meses, tudo que você aprender hoje, você verá que já és de tí uma versão mais sábia do você de hoje, portanto não tenha pressa, e continue aprendendo.👏👏👏👏

 

Precisando, estou aí para ajudar se eu puder!👍

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...