Python - Encontrar el nombre del de mayor edad

 
Vista:
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 25/03/2021 02:24:52
ejercicio-12

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
database = []
personas =[]
mayor = -1
 
n = int(input("Cantidad de personas: "))
 
while len(database) < n:
    nombre = input("Ingrese nombre: ")
    edad = int(input("Ingrese edad: "))
    personas.append([nombre, edad])
    database.append(personas)
 
for i in range(len(database)):
    for nombre in personas[i]:
        if edad > mayor:
            print(nombre)

Necesito ayuda urgente, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 25/03/2021 05:28:28
Se me ocurrió lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def mayor_edad():
 
    n = int(input("¿Cuántos datos ingresará?: "))
    edad_nombre = []    # Acá se agregan los datos ingresados, con el formato (edad, nombre)
 
    while len(edad_nombre) < n:
        nombre = input("Ingrese el nombre de la persona: ")
        edad = input("Ingrese la edad: ")
        edad_nombre.append((edad,nombre))
 
    edad_nombre.sort()
    print(edad_nombre)
    print(edad_nombre[-1][1])        # Como la lista esta ordenada por edades, elegí el nombre del último elemento y listo.
 
mayor_edad()

El único posible problema es qué pasa si hay dos personas con la misma edad (si es que son los más grandes). Solamente imprime el primero por orden alfabético, pero no debería ser muy difícil de arreglar (de paso, te lo podes plantear como ejercicio extra).

EDIT: modifiqué el programa porque me fui dando cuenta de formas para ahorrar pasos. No debería tardar mucho en ningún caso, pero todo lo que se ahorra sirve.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 25/03/2021 05:29:30
A propósito, no le presté mucha atención al código que anotaste. ¿Cuál es el problema que estabas teniendo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 25/03/2021 19:20:28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
database = []
mayor = -1
 
n = int(input("Cantidad de personas: "))
 
while len(database) < n:
    nombre = input("Ingrese nombre: ")
    edad = int(input("Ingrese edad: "))
    database.append([edad, nombre])
 
for i in range(len(database)):
    for j in range(len(database)):
        if edad[i] > mayor:
            nombre_mayor_edad = database[j]
 
 
print(nombre_mayor_edad)

Debo imprimir el nombre de la persona de mayor edad, siguiendo la estructura que tengo en el código, que está mal por cierto, porque no resulta lo que necesito. Agradezco de antemano tu forma de resolverlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 25/03/2021 22:44:00
Perdón, no terminé de entender si es que lo que hice soluciona el problema o si necesitas implementar el código que anotaste con alguna modificación.

Si es la segunda opción, el problema lo veo a partir de la línea 12.

Al escribir
1
for j in range(len(database)):
y
1
nombre_mayor_edad = database[j]
Siempre te va a devolver el último nombre. Tene en cuenta que por cada 'i', revisará cada 'j'. Por lo tanto, cuando llegue al último 'i', asignará a 'nombre_mayor_edad' el valor del último 'j' para database. Si no me explique bien, proba agregando un print(nombre_mayor_edad) debajo la línea 14 y fijate lo que imprime.

Por otra parte, en la línea 12, 'edad' no esta definido como lista, si no como una variable, por lo que no se le puede asignar un índice.

Por último, no se modifica el valor de 'mayor'. Por lo que siempre comparará con -1. La solución es agregar una línea después del 'if' que modifique el valor de mayor al indicado por la lista (asumiendo que sea mayor al ya asignado).

En palabras de Python:
1
2
3
4
for i in range(len(database)):          # borro el 'for j in...' ya que no es necesario
    if database[i][0] > mayor:          # Cambio edad[i] por database[i][0]. Es doble índice porque debe verificar el primer valor (o 0) de cada elemento
        mayor = database[i][0]          # SI el valor revisado (databse[i][0]) es mayor a 'mayor', le asigna a 'mayor' dicho valor.
        nombre_mayor_edad = database[i][1]  # Asigna el valor del nombre a la variable (nuevamente, doble índice y asumiendo que el SI se cumple)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 00:54:29
En parte resolvió el problema, puesto que ordenó de mayor a menor los valores, por consiguiente, permite o conocer el nombre del de mayor valor,. Ahora bien, con lo que pusiste y me corregiste, era lo que no sabía cómo recorrer ambos elementos de la(s) tupla(s) de la lista database, por lo pronto, probaré ahora con esa corrección y lo más seguro es que es la forma correcta. Muchas Gracias estimado Jorge
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 01:14:39
Ojo. Nuevamente tiene el problema que si hay dos o más personas con la edad mayor, devuelve un solo nombre. Para que devuelva todos, habría que hacer alguna modificación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 03:11:43
En ese caso estimado, como sería la modificación, imprimir ambos nombres mayores? disculpa que pregunte varias veces, estoy intentando aprender y entender a medida de lo posible, lo otro, para el ejercicio siguiente(ejercicio 13), me piden lo siguiente.
ejercicio-12
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 03:19:21
Te entiendo. En realidad, yo también estoy aprendiendo. Ahora no puedo verificar la modificación ni el punto 13 porque estoy con otra de Python que me esta quemando la cabeza. Pero en cuanto puedo te contesto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 03:20:32
Gracias Jorge!, te pasaste, mientras voy de a poco aprendiendo, intento hacer varias cosas a la vez(varios codigos) jaja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 03:39:27
Como el ejercicio que estaba haciendo me esta quitando las ganas de vivir (chiste) me fijé cómo hacer la modificación del ejercicio 12. En este caso, imprime la cantidad de personas mayores (aunque sean mil). Sería así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
database = []
mayor = -1
n = int(input("Cantidad de personas: "))
 
while len(database) < n:
    nombre = input("Ingrese nombre: ")
    edad = int(input("Ingrese edad: "))
    database.append([edad, nombre])
 
for i in range(len(database)):
    if database[i][0] > mayor:
        mayor = database[i][0]                      # Si es mayor:
        lista_de_nombres = [database[i][1]]         # Crea una nueva lista donde se agregarán los nombres
    elif database[i][0] == mayor:                   # Si es igual
        lista_de_nombres.append(database[i][1])     # Agrega el nombre a la lista (no se crea una nueva)
 
# Hay dos formas de imprimir los nombres
print(lista_de_nombres)
 
# o
 
for nombre in lista_de_nombres:
    print(nombre)
 
# La diferencia es que la primera imprime la lista y la segunda imprime un nombre por cada renglón.

Para el ejercicio 13 dejame pensar un poco más. Creo que lo puedo hacer, pero hay que cambiar bastante el código.

Espero que sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 03:43:22
Se me ocurría ordenar la lista alfabeticamente con la función sort(key = lambda x: ......) pero, no sé como implementarlo en ese sentido, o sea, crear una lista que se acompañe con el sort y luego imprimir dicha lista
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 03:53:29
En sí se podría usar la primer opción que mostré, pero modificando el código un poco al final. Es decir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def mayor_edad():
 
    n = int(input("¿Cuántos datos ingresará?: "))
    edad_nombre = []    # Acá se agregan los datos ingresados, con el formato (edad, nombre)
 
    while len(edad_nombre) < n:
        nombre = input("Ingrese el nombre de la persona: ")
        edad = input("Ingrese la edad: ")
        edad_nombre.append((edad,nombre))
 
    edad_nombre.sort()
 
    if n < 4:
        for i in range(1,n+1):
            print(edad_nombre[-i][1])
    else:
        for i in range(1,4):
            print(edad_nombre[-i][1])
    # Debe haber alguna manera más conveniente de hacer esto, pero sólo así me puede asegurar que funcione aunque sean menos de 3 personas.
mayor_edad()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 03:58:33
Ocupé de base tu código y me salió esto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
database = []
mayor = -1
 
 
n = int(input("Cantidad de personas: "))
 
while len(database) < n:
    nombre = input("Ingrese nombre: ")
    edad = int(input("Ingrese edad: "))
    database.append([edad, nombre])
 
database.sort(key=lambda e: e[1], reverse=True)
 
if n < 4:
    for i in range(1,n+1):
        print(database[-i][1])
else:
    for i in range(1,4):
        print(database[-i][1])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 04:01:58
No entendí. Sirvió o sale algún error? Podrías encerrar el código entre los tags code y /code así se lee mejor?

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 04:16:43
Si sirvió, a la perfección.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 04:18:27
Espectacular. Cualquier cosa, pregunte no más.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 04:18:58
Gracias, saludos igual!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 04:32:05
a
Si yo quisiera hacerlo, con la i en positivo, en vez de negativa, me sale un error, aludiendo a que está fuera de rango, por qué?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 05:05:32
Porque los índices de las listas arrancan desde 0. Supongamos que elegís 3 datos a ingresar. La lista queda algo así:

1
database = [(32, Jorge),(25, Bastian)(26, Aldo)]

Si te fijas la longitud de la lista, obtenes 3. Pero si intentas encontrar el valor 3, te arroja un error, porque solamente llega hasta el índice 2. Podes revisar esto con:

1
2
3
len(database)
print(database[3])     # Este arroja error
print(databse[2])       # Este imprime (26, Aldo)

Fijate qué sucede si buscas el índice 1 o el 0 y queda más claro.

Cuando usas:

1
2
3
4
5
6
7
8
9
10
11
while len(database) < n:
    nombre = input("Nombre: ")
    edad = int(input('Edad: '))
    database.append((edad,nombre))
 
database.sort(reverse=True)
print(database)
 
if n < 4:
    for i in range(n+1):
        print(database[i][1])

La longitud de la lista será n, pero solamente tiene n-1 indices. Si usas el intervalo (0,n+1), intentará encontrar el elemento con índice 'n', el cual no existe (de ahí, el error "out of range").
La solución es simplemente is desde 0 hasta n.

EXTRA: cuando recorres un rango desde 0 hasta un número m, no es necesario agregar el 0. Los siguientes códigos hacen lo mismo:
1
2
for i in range(0,n)
for i in range(n)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 05:06:58
Ahhh detalle. No sucede lo mismo si usas la 'i' negativa porque si recorres desde el último elemento hasta el primero, la lista arranca desde -1 y no desde 0. No sé por qué, pero así las cosas jaja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 05:11:54
Algo que me ayuda mucho para encontrar errores es usar la opción print en lugares críticos (es decir, donde es probable que se encuentren errores). Por ejemplo, en el primer comentario que hice, podes ver que dejé un print innecesario en la línea 12. Cuando estas probando el programa, puede ayudarte a detectar el error (puede que no). Lo único, una vez finalizada la etapa de prueba, hay que borrar todos los prints innecesarios.

Otra forma es mediante el 'bug' que tienen algunos programas. En general yo uso un programa llamado Thony porque me resulta muy práctico, pero casi todos los programas tienen su propio 'bug' donde vas viendo paso a paso lo que hace la función. Ahí, podes visualizar específicamente a dónde se encuentra el error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 49
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Aldo (18 intervenciones) el 26/03/2021 19:46:13
Jorge, si yo ocupase el código a continuación, esto también serviría para cuándo los datos son menor a 3 y quiero recorrer desde 0 hasta 2 por ejemplo, teniendo en cuenta que, los índices correrían desde 0 - 2.
1
2
3
if n<3:
For i in range (n)
print (database [i][0])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 21:05:23
Casi. Como n es menor a 3 (línea 1), el máximo valor que toma es 2. Por lo que en la línea 2 recorrerá el intervalo [0,2). Es decir, sin contar el 2. Como mucho irá hasta el 1. Podes modificar la línea 1 alguna de las dos siguientes:

1
2
3
if n<4
 
if n<=3

En ese caso, funiona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Damian
Val: 45
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Encontrar el nombre del de mayor edad

Publicado por Damian (6 intervenciones) el 08/04/2021 10:58:22
A mi se me ocurrio esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
database = []
 
# n = int(input("Cantidad de personas: "))
 
# while len(database) < n:
#    nombre = input("Ingrese nombre: ")
#    edad = int(input("Ingrese edad: "))
#    database.append([edad, nombre])
 
n= 6
 
database.append([25, "nombre25"])
database.append([18, "nombre18"])
database.append([17, "nombre17"])
database.append([20, "nombre20"])
database.append([15, "nombre15"])
database.append([19, "nombre19"])
 
data_sort = sorted(database)                          #ordena de menor a mayor y devuelve una lista
 
for i in range(3):
    d=data_sort.pop()                                        #extraigo los ultimos 3
    print("Nombre: ", d[1] , "edad: ", d[0])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar