docsity

Exercício Resolvido e Funções em Python

João começou a desenvolver um programa para cálculos de contabilidade em Python. Após algum tempo, ele verificou que partes de seu código eram redundantes – um mesmo conjunto de linhas de código, que realizavam uma mesma operação, aparecia várias vezes em seu programa.


Pesquisando na Internet, João verificou que é comum em linguagens de programação o uso de funções. Elas ajudam a modularizar e organizar melhor o programa, permitindo que determinados trechos pré-definidos possam ser invocados e executados quando necessário. Para treinar o uso de funções, João fez os seguintes programas. Para cada situação, indique o que será exibido na tela quando o programa for executado. Caso o interpretador encontre algum erro, indique o motivo e em qual linha ele ocorre.


e.

def inverte_lista(l):
  for i in range(1, l):
    l[i] = -l[i]
  print(l)
  return l

l = [8, 2, 7]
inverte_lista(l.copy())
print(l)
Quer assistir a aula completa?
Torne-se Premium e tenha acesso ilimitado a todos os cursos.
leandro-soder-8
pedro-ormond
lidelmar-braga-1
walter-macena
susana-maria-maia-dos-santos
filipe-vila
charles-beserra
etique-te
david-j-yoryor
higor-freitas-4
Outros alunos 1 146 estão fazendo este curso na Docsity

Para resolvermos este exercício, precisaremos simular o código feito por João para descobrirmos o que será exibido na tela.


Neste exemplo de código, é muito mais interessante começarmos analisando o trecho que está fora da função inverte_lista()inverte\_lista() definida. Fazemos isso justamente pois este trecho que é executado quando rodarmos o programa.


Dessa forma, temos que a linha que será inicialmente executada é a seguinte:



l = [8, 2, 7]


Ou seja, está sendo criada uma lista com o nome ll composta por 33 elementos. Temos então que:


l[0]=8l[0]=8

l[1]=2l[1]=2

l[2]=7l[2]=7


Vamos para a próxima linha:



inverte_lista(l.copy())


Ou seja, está sendo enviado ll.copy().copy() como argumento para a função inverte_lista()inverte\_lista(). Mas o que é exatamente ll.copy().copy()?


O argumento ll.copy().copy() corresponde a uma cópia da lista ll. Mas por que não foi simplesmente enviada a lista ll como argumento?


Quando enviamos uma lista diretamente para uma função, temos o problema de que não podemos alterar um valor da lista no interior da função sem prejudicar a lista original.


Por outro lado, se enviamos uma cópia da lista como argumento para a função, evitamos este problema.


Vamos então analisar o que é feito dentro da função inverte_listainverte\_lista:



def inverte_lista(l):


Note que a função é definida justamente esperando receber 11 argumento. Portanto, temos que o valor de ll no interior da função será igual a ll.copy().copy().


Note aqui que a alteração de qualquer valor na lista dentro da função não alterará a lista fora da função. Portanto a lista ll que está dentro da função não é a mesma lista ll fora da função (atenção às cores das variáveis).


Então, temos que:


l[0]=8l[0]=8

l[1]=2l[1]=2

l[2]=7l[2]=7


Vamos para a próxima linha:



  for i in range(1, l):


Aqui, está sendo criado um laço do tipo forfor que gera uma variável ii para percorrer valores inteiros de 11 até ll (não inclui o limite superior).


Mas note que ll não é um número inteiro, afinal ll é uma lista. Portanto, temos que o programa apresentará mensagem de erro e terá sua execução imediatamente interrompida, afinal range()range() espera receber somente valores inteiros, e não listas.


Resposta esperada: O programa apresentará mensagem de erro. Isso ocorre pois ll não pode ser interpretado como um valor inteiro.

Premium
Anterior
Aulas
Materiais
Próximo