The logic is quite simple, but a little laborious. Having the two lists, one of names and another of ages, follows:
- Search for the youngest in the age list;
- Find the position in the list where the minor is;
- Check in the list of names, in that same position, the name of the youngest person;
The code would be something like:
menor_idade = min(idades)
posicao_menor_idade = idades.index(menor_idade)
nome = pessoas[posicao_menor_idade]
print(f'{nome} é a pessoa mais nova, com {menor_idade} anos')
That’s one way raw to do, which somewhat compromises the readability of the code. In my view, the ideal is not to store two related information in different lists, but rather in a single structure, such as a tuple. For example:
pessoas = []
for _ in range(10):
nome = input('Digite o nome da pessoa: ')
idade = int(input('Digite agora a idade da pessoa: '))
pessoas.append((nome, idade))
And look for the youngest person with:
pessoa_mais_nova = min(pessoas, key=lambda p: p[1])
Having thus, a return as: ('João', 10)
.
To further improve, you can use the namedtuple
:
Pessoa = namedtuple('Pessoa', ['nome', 'idade'])
pessoas = []
for _ in range(10):
nome = input('Digite o nome da pessoa: ')
idade = int(input('Digite agora a idade da pessoa: '))
pessoas.append(Pessoa(nome, idade))
pessoa = min(pessoas, key=lambda p: p.idade)
See working on Repl.it | Github GIST
Getting the return: Pessoa(nome='João', idade=10)
, may display it:
print(f'{pessoa.nome} é a pessoa mais nova, com {pessoa.idade} anos')
The syntax of print()
prefixed f
works only in versions 3.6+. For earlier versions, use the method format
.
Python version 3.7 included the default Data Class, which can be used in this situation, much like what the LINQ put in your answer, but in a simpler way:
from dataclasses import dataclass
@dataclass
class Pessoa:
nome: str
idade: int
And follow in the same way:
pessoas = []
for _ in range(10):
nome = input('Digite o nome da pessoa: ')
idade = int(input('Digite agora a idade da pessoa: '))
pessoas.append(Pessoa(nome, idade))
pessoa = min(pessoas, key=lambda p: p.idade)
I didn’t know this whole
f
with interpolation. You are the master!– Jéf Bueno
@LINQ Works in 3.6+
– Woss