Python - Cantidad de vuelos realizados(ficheros)

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

Cantidad de vuelos realizados(ficheros)

Publicado por Aldo (18 intervenciones) el 29/03/2021 04:37:42
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
arch = open("vuelos.txt","r")
 
linea = arch.readline().strip()
partes = linea.split(',')
origen = partes[0]
destino = partes[1]
cant_pasajeros = int(partes[2])
#print(linea)
n = 0
for linea in arch:
    n +=1
#print(n)
 
while linea != "":
    linea = arch.readline().strip()
    for i in range (n+1):
      partes = linea.split(',')
      origen = partes[0]
      destino = partes[1]
      cant_pasajeros = int(partes[2])
 
linea = arch.readline().strip()

Buenas noches, alguien me puede orientar para resolver la pregunta a, pues es nivel principiante y debo seguir una estructura similar a la que estoy haciendo, sin embargo, trato de imprimir partes, con tal de probar si estoy bien y me sale vacío, entonces quedo pegado ahí y no puedo llegar al segundo ciclo for para poder sumar las cantidades. Agradezco tiempo y disponibilidad, saludos, espero respuesta!
ejercicio-7
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 Jaime
Val: 528
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cantidad de vuelos realizados(ficheros)

Publicado por Jaime (136 intervenciones) el 29/03/2021 05:26:13
Pues el código está un poco enredado. La verdad no entiendo porque te sale las linea en vacías. De pronto debe ser la función strip().
En fin, te dejo un código más limpio que te puede servir o te puede inspirar a tu solución. Modifiquele lo que necesites de acuerdo a tu necesidad.
1
2
3
4
5
6
7
8
9
10
with open("vuelos.txt","r") as arch:
    cant_pasajeros = 0
    lineas = arch.readlines()
    if len(lineas) > 0:
        for linea in lineas:
            partes = linea.split(',')
            origen = partes[0]
            destino = partes[1]
            cant_pasajeros +=int( partes[2])
        print(f"La cantidad total de pasajeros son: {cant_pasajeros}")
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
sin imagen de perfil
Val: 49
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Cantidad de vuelos realizados(ficheros)

Publicado por Aldo (18 intervenciones) el 29/03/2021 05:37:19
Muchas gracias por la solución. De pronto tengo muchas consultas
1. En la primera línea, al poner with (...) as arch, es similar a poner arch = open(“...” , “r”)?
2. Al poner arch.readlines(), en un comienzo lo intenté así, y luego en el ciclo for, en vez de poner lineas como tú, hacía for linea in range (len(arch.readlines())+1) para llegar hasta la fila numero n, que era la número 4(dado que, parte desde 0) y me salía out of range de error al iterar i veces, por qué?”
3. Ese lineas es un str o un int, cuandi se ocupa en el ciclo for y cómo es que sería la iteración(recorrido) en ese caso, eso me dejó con mucha duda, porque lo vi en otro lado igual y no entendí como funciona

De antemano agradecerte por tu tiempo, dedicación y amabilidad.
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
Imágen de perfil de Jaime
Val: 528
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cantidad de vuelos realizados(ficheros)

Publicado por Jaime (136 intervenciones) el 29/03/2021 05:58:25
Claro que te ayudo:
1. with es un keyword que lo que hace es más legible el código y no tienes que preocuparte en cerrar el archivo, ya q se cierra sólo. No solo sirve para abrir archivos, sirve para toda función que abra un recurso y que se tenga que cerrar, como una BD.

2. Creo que se debe a que la funcion Len devuelve un int, por lo que tendrias que wrappear el Len dentro de un range.
1
2
3
...
for i in range(len(arch.readlines())):
...

3. Yo creo que tienes el chip del lenguaje de Java. Lineas es una lista de STrings. En muchos lenguajes se usa el ciclo for de 2 formas: para recorrer un indice y para recorrer por los valores. Lo que hace el ciclo del código es que cada valor se guarda en la variable linea.
1
2
3
4
# lineas = ['Santiago,PuntoArenas,45\n', 'Concepcion,PuertoMontt,43\n', 'LaSerena,Antofagast,144\n']
# linea en una iteración del ciclo = 'Santiago,PuntoArenas,45\n'
# linea en otra iteración del ciclo = 'Concepcion,PuertoMontt,43\n'
# linea en ultima iteración del ciclo = 'LaSerena,Antofagast,144\n'

Yo uso VScode para desarrollar en todo lo que sé. Te lo recomiendo, ya que este IDE me permite debuggear de una manera muy facil y examinar que valor tiene cada variable en cada momento. Solo basta con poner un punto de quiebre (break) y ejecuto el programa hasta ahí, luego examino la variable y ejecuto paso a paso para ver como se comporta el programa.
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 Jaime
Val: 528
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cantidad de vuelos realizados(ficheros)

Publicado por Jaime (136 intervenciones) el 29/03/2021 06:25:42
Una correción al código. Como el archivo no hay que volverlo a leer porque se traspasó a memoria, entonces conviene cerrar el recurso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
lineas = []
with open("vuelos.txt","r") as arch:
    lineas = arch.readlines()
 
cant_pasajeros = 0
 
if len(lineas) > 0:
    for linea in lineas:
        partes = linea.split(',')
        origen = partes[0]
        destino = partes[1]
        cant_pasajeros +=int( partes[2])
 
    print(f"La cantidad total de pasajeros son: {cant_pasajeros}")
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