Dúvida instrução Python

Olá tudo bem?

Bom estou fazendo trabalho da faculdade, o mesmo foi solicitado para interpretar e descrever um comando de instruções em Python, o mesmo realizei , entretanto colocando este mesmo código para rodar num compilador, o mesmo quando digitava números ele me retornava eles novamente, colocando eles em parênteses . Mas antes disso o mesmo pensei que era função de busca e agora com isso deixou mais confuso. Segue abaixo a instrução.

Se puder ajudar agradeço, pois já estou mais confuso que barata perdida ! ksks Desde já agradeço.

def busca(lista, valor):
    navegar = lista.head
    while navegar and navegar.data != valor:
        navegar = navegar.nextItem
        return navegar

Olá, @Micael_Beilke! Uma das grandes sacadas do Python é a questão da indentação.
Da forma como está escrito, o return está dentro do while.
Experimente recuar o return um tab para trás (coloque-o alinhado ao while acima dele) e tente novamente.

Olá como vai @danielrosa ?

Fiz como solicitou mas foi o mesmo resultado, e se não digitar ele não acontece nada ( como se fosse no cmd, não sei consegui exemplificar o que quiz dizer) segue o print .

Você chamou a função? Definiu a lista e o valor para passar para ela como parâmetros?

@danielrosa

Não, pois na atividade só tem esse comando, tem como te chamar no privado ?

Bom, acabo de ver uma questão aqui.

O compilador não vai ajudar você sem você ter uma definição clara para ele sobre o que é uma lista - ela vai precisar do head (início da lista), de data (o dado que você está analisando) e de nextItem. Essas coisas não vem prontas no compilador e seria preciso que você criasse os métodos para criar a lista vinculada, nesse caso.

Somente colocar a definição da função busca no compilador não a executa.
Se você apertar run, nada acontece, a menos que você criasse a definição da lista, inserisse elementos nessa lista (digamos teste = [1, 2, 3]) e então mandasse o compilador executar algo como busca(teste, 1).

Ao inserir números no lado do shell, você não está fazendo nada relativo à função que está do lado esquerdo. Apenas está dando números para o Python não relacionados à função. Por isso que seu 1 retorna 1 e que 1, 2, 3 retorna um conjunto de números (que o Python declara entre parênteses). Consegui ajudar?

Se a pergunta que você quer responder é essa que está aqui, o que eu posso dizer é que, se os métodos que criam as listas estiverem definidos e se estiver claro que head é o início da lista, data é o dado que você está analisando no momento e nextItem é o próximo item a ser analisado, então a função busca que aparece ali faz isso mesmo, percorre a lista do primeiro item até o final tentando encontrar o valor que você passou. Quando ela o encontra, retorna aquele valor. Do contrário, ela não tem o que retornar - sinal que não achou o valor na lista.

Estou começando a entender um pouco, então esse trecho de código com função de busca ? pois tem os parâmetros lista e valor e o .head seria as primeiras linhas desta lista como você falou

a head pertence ao Pandas pelo que pesquisei.

Isso. Mas é preciso que a estrutura para se fazer uma lista (vinculada, nesse caso) tenha sido passada para o compilador com esses atributos definidos (head, data e nextItem). Aí, depois de definir esse método busca junto dos outros, é só chamar busca como função, dando a ela uma lista e um valor (exemplo: busca(listaQualquer, 1)).

1 Like

Assim, em minha resposta que tinha respondido no trabalho foi mais nesse contexto, mas depois que tinha usado o compilador tinha ficado com pulga atrás da orelha, mas agora está ficando mais claro esse trecho da instrução.

Show. Achei um site bem legal e que ajuda a entender em português o que está acontecendo ali. Você vai ver nele que a função busca está beeeeeem parecida com o seu exemplo. Boa leitura! :smiley:

1 Like

Obrigado @danielrosa

1 Like

Olá @danielrosa

Este trecho de comando é só usado para busca em lista encadeada ?

O encadeamento da lista vai se dar justamente em função de você estabelecer esses conceitos de head (onde a lista se inicia), data (dado a ser analisado) e nextItem (próximo dado na sequência). Uma lista regular do Python tem índices, semelhante ao array em JavaScript. Para percorrer uma lista em Python, você não precisaria dessa função. E se tentar criar uma lista regularl e fazer uma busca com ela, dará erro porque o compilador do Python não saberá o que é “head”, “data” ou “nextItem”, já que eles nunca foram definidos. Espero ter explicado direito. Bons estudos! :smiley:

1 Like

Olá Micael, conseguiu resolver? Tenho a mesma questão da faculdade.
Foi passado-me que só precisaria descrever esse código, então temos os seguintes comandos bult-in, def, while e return.
Desde já, peço desculpas pelos erros de português, mas não corrigirei, digitarei direto.

Def é um comando que indica a criação de uma método ou função, seguido do nome e dos parâmetros, podemos observar que o esse metodo chamado busca solicita os parametros lista e valor. segunda linha a variavel navegar recebe o valor do atributo head de lista.
terceira linha a estrutura condicional while utiliza o operador booleano and, para vereficar se os dois argumentos são verdadeiros, sabemos que enquato while for verdadeiro a linha contida nele continuará a ser executada, o argumento navegar, que sabemos que é uma variavel, só sera falso se nela estiver condia o objeto do tipo bool(boleano) False, 0 do tipo Int(inteiro) ou for vazio, o proximo argumento verifica se o atributo data da variavel navegar é diferente do atributo valor, a linha contida no while será executada enquando o while for verdadeiro, nessa linha define que navegar recebe o valor do atributo NextItem da mesma variavel, e por ultimo o comando built-in return, retorna como saida do metodo busca o valor da variavel navegar. Como já foi colocado, o return deve está fora do while.

Em fim, sabemos que a lista solicitada pelo o metodo, não é um objeto qualquer ou interable tipo um str, list, tuple, dict, set. posso afirmar que neles não há os atributos presente no codigo, sei que tabém não é uma series ou um dataframe da biblioteca pandas ou um array da biblioteca numpy, por mais que exista o atributo head, o mesmo não há os atributos data. Realmente esse metodo é uma função de busca, pois se traduzirmos os atributos teremos, head-cabeça, data-dados, nextItem-Proximo item.

Concluindo essa biblioteca necessaria para executar a função busca, deve ser tipo uma pilha da linguagem c. ou vc pode converter esse codigo para rodar como um objeto interavel tipo um list, por exemplo em lista.head fazer uma implementação para o resultado ser um lista[0], no while navegar a implementação seria a pilha ou seja, a lista sem o valor de indice 0, e em navegar.data a implementação seria um simples navegar. em navegar.nextItem, o valor seria navegar = lista[1], ou sejá isso tudo com operações matematicas. claro que seria necessario criar um objeto, ou seja uma class. Ficou meio complicado essa minha explicação, mas espero que te dê uma luz.

1 Like

A função espera ter algo a ser retornado, nem que seja:

def function():
    return pass

Mas da forma que você colocou, o return esta dentro do while, ele deveria ficar assim:

def busca(lista, valor):
    navegar = lista.head
    while navegar and navegar.data != valor:
        navegar = navegar.nextItem
   return navegar
1 Like