Este é um problema muito fácil em todas as suas alíneas. Chama a atenção para a necessidade de sabermos o que existe, de básico, na linguagem Python sobre listas, para assim evitarmos alguns incómodos. Comecemos pela alinea 5. em que nos é pedido para determinar o menor e o maior elemento existente numa lista. Admitamos que se trata de números. A solução trivial é:
1.
def
idades_5c(lista):
2.
return
max(lista), min(lista)
Mas,e se não soubermos que essas operações primitivas existem? Programamos nós a solução!
01.
def
idades_5d(lista):
02.
menor
=
lista[
0
]
03.
maior
=
lista[
0
]
04.
05.
for
indice
in
range(
1
,len(lista)):
06.
if
lista[indice] < menor :
07.
menor
=
lista[indice]
08.
if
lista[i] > maior:
09.
maior
=
lista[indice]
10.
return
maior,menor
O código acima começa por ter um pressuposto: alista tem pelo menos um elemento. Altere por forma a que essa limitação desapareça. Começamos por aceitar que o maior e o menor coincidem com o primeiro elemento. Depois, percorremos todos os elementos, de modo sequencial, da esquerda para a direita e comparamos com os nossos maior e menor. Actualizamos de acordo. A alínea 6. (cálculo da soma dos valores na lista) é ainda mais fácil.
01.
def
idades_6a(lista):
02.
return
sum(lista)
03.
04.
def
idades_6b(lista):
05.
soma
=
0
06.
for
indice
in
range(len(lista)):
07.
soma
=
soma
+
[lista[indice]]
08.
return
soma
09.
10.
def
idades_6c(lista):
11.
soma
=
0
12.
for
elem
in
lista:
13.
soma
=
soma
+
elem
14.
return
soma
A primeira solução (6a), é directa e emprega a operação sum. A segunda (6b), usa um acumulador, a variável soma. Começa por ser zero e em cada etapa do ciclo é actualizada com o acréscimo de mais um elemento. A terceira solução (6c), é equivalente à anterior, mas em vez de percorrer a lista pelos índices, vai buscar directamente os elementos, pois as listas são objectos iteráveis. A questão 7. pretende determinar quantos e quais os elementos inferiores a um outro elemento dado como referência. Uma vez mais temos uma questão com um ciclo e, no seu interior, um filtro, o if.
1.
def
idades_7(lista,ref):
2.
quantos
=
0
3.
quais
=
[]
4.
for
elem
in
lista:
5.
if
elem < ref:
6.
quantos
=
quantos
+
1
7.
quais
=
quais
+
[elem]
8.
return
quantos,quais
A mesma ideia. Um ciclo e um filtro. Dois acumuladores: um para a contagem, e outro para guardar os elementos que satisfazem a condição. Finalmente, a questão 8.: existe um elemento com 17 anos?
01.
def
idades_8a(lista):
02.
return
17
in
lista
03.
04.
def
idades_8b(lista, idade):
05.
return
idade
in
lista
06.
07.
def
idades_8c(lista, idade):
08.
tem_idade
=
False
09.
for
elemento
in
lista:
10.
if
elemento
=
=
idade:
11.
tem_idade
=
True
12.
return
tem_idade
A primeira solução é a trivial: usa o que existe. A segunda, é semelhante só que generaliza. Notar que tal se traduziu pela incorporação de mais um parâmetro. A última (8c), responde à necessidade de substituir o teste in. Como nas outras situações, usámos um ciclo, percorremos toda a lista, fazemos um teste que, se for positivo, nos leva a alterar o valor de uma variável que serve de bandaeira (flag).
Como se pode ver todos estes exemplos seguem um padrão semelhante!!
Sem comentários:
Enviar um comentário