#definir lista de n "filas" y 4 "columnas" L=[] #leer lineas de primer archivo

18
Problem a. Escribirun program a que produzca la planilla finalde lasnotasde la prueba 2. D atos. N otas1.txt:archivo con lasnotasdela pregunta 1. Cada línea con nom bre (20 caracteres)y nota (2 dígitos). N otas2.txt:archivo con lasnotasdela pregunta 2. Cada línea con nom bre (20 caracteres)y nota (2 dígitos). R esultado. Planilla.txt:archivo que en cada línea contendránom bre y notas de pregunta 1, 2 y prom edio.

description

#definir lista de n "filas" y 4 "columnas" L=[] #leer lineas de primer archivo for linea in open("notas1.txt"): #agregar lista con sección, nombre y nota L.append ( [ linea [0], \ linea [1:21], \ int ( linea [21:23])] ) #leer lineas de segundo archivo - PowerPoint PPT Presentation

Transcript of #definir lista de n "filas" y 4 "columnas" L=[] #leer lineas de primer archivo

Page 1: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

Problema. Escribir un programa que produzca la planilla final de las notas de la prueba 2. Datos. Notas1.txt: archivo con las notas de la pregunta 1. Cada línea con nombre (20 caracteres) y nota (2 dígitos). Notas2.txt: archivo con las notas de la pregunta 2. Cada línea con nombre (20 caracteres) y nota (2 dígitos). Resultado. Planilla.txt: archivo que en cada línea contendrá nombre y notas de pregunta 1, 2 y promedio.

Page 2: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

Solución 1. Con 3 listas nombres: lista para mantener los nombres de los alumnos Ej: nombres=[“gabriela”,”jose”,”rosa”,”matias”] notas1: lista para mantener las notas de la pregunta1 Ej: notas1=[62,48,56,49] notas2: lista para mantener las notas de la pregunta2 Ej: notas2=[45,52,35,48] ¿Estructura del programa? 1. leer primer archivo y guardar en listas nombres y notas1 2. leer segundo archivo y guardar en lista notas2 3. calcular y grabar planilla final

Page 3: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#leer primer archivo y guardar #en listas nombres y notas1 #inicializar listas vacias nombres=[] notas1=[] #leer todas las lineas del archivo for linea in open("notas1.txt"): #agregar nombre a la lista de nombres nombres.append(linea[0:20]) #agregar nota a la lista de notas1 notas1.append(int(linea[20:22]))

Page 4: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#leer segundo archivo y guardar en lista notas2 #inicializar lista con “n” ceros notas2=[0]*len(nombres) #leer todas las líneas del archivo for linea in open("notas2.txt"): #buscar nombre en lista de nombres i=nombres.index(linea[0:20]) #guardar nota correspondiente al nombre notas2[i]=int(linea[20:22])

Page 5: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#calcular y grabar planilla final archivo=open("planilla.txt","w") #recorrer las 3 listas paralelamente for i in range(len(nombres)): #calcular promedio redondeado promedio=int((notas1[i]+notas2[i])/2.0+0.5) #grabar línea con nombre y 3 notas archivo.write(nombres[i]+ \ str(notas1[i])+ \ str(notas2[i])+ \ str(promedio)+"\n") archivo.close()

Page 6: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

Solución 2. Con una tabla de 3 filas y n columnas (n: n° alumnos) ¿tabla? lista de listas (“lista de 2 dimensiones”) [ [“gabriela”,”jose”,”rosa”,”matias”], \ #fila 0: lista de nombres [62,48,56,49], \ #fila 1: lista de notas pregunta 1 [45,52,35,48] #fila 2: lista de notas pregunta 2 ] Estructura del programa 1. Leer primer achivo y guardar nombres y notas en primeras 2 filas

2. Leer 2° archivo y guardar notas de pregunta2 en 3ª fila 3. Calcular y grabar planilla final

Page 7: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#lista de 3 listas (inicialmente vacías) L=[[],[],[]] #guardar nombre y notas en primeras 2 filas #leer líneas del primer archivo for linea in open("notas1.txt"): #agregar nombre a primera fila L[0].append(linea[0:20]) #agregar nota a segunda fila L[1].append(int(linea[20:22])) #guardar notas de pregunta2 en 3ª fila L[2]=[0]*len(L[0]) #lista con “n” ceros #leer líneas del sgdo archivo for linea in open("notas2.txt"): #buscar nombre en lista de nombres i=L[0].index(linea[0:20]) #guardar nota correspondiente al nombre L[2][i]=int(linea[20:22])#en fila 2 col i

Page 8: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#calcular y grabar planilla final archivo=open("planilla.txt","w") #recorrer 3 filas en paralelo for i in range(len(L[0])): promedio=int((L[1][i]+L[2][i])/2.0+0.5) archivo.write(L[0][i] + \ #nombre str(L[1][i]) + \ #nota1 str(L[2][i]) + \ #nota2 str(promedio)+"\n") archivo.close()

Page 9: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

Solución 3. Con una tabla de n filas y 3 columnas [ [“gabriela”,62,45], \ #fila 0: lista de datos de primer alumno [“jose”,48,52], \ #fila 1: lista de datos de segundo alumno [“rosa”,56,35], \ [“matias”,49,48] \#fila n-1: lista de datos de último alumno ] Estructura del programa 1. leer primer archivo y guardar nombre y nota de los alumnos en primeras

dos columnas de las filas

2. leer segundo archivo y guardar notas de pregunta2 en tercera columna de las filas

3. calcular y grabar planilla final

Page 10: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#Lista para n listas con 3 valores L=[] #leer todas las líneas del primer achivo for linea in open("notas1.txt"): #agregar lista con nombre y nota de pregunta1 L.append( [linea[0:20],int(linea[20:22])] ) #leer todas las líneas del 2° archivo for linea in open("notas2.txt"): #buscar nombre en lista alumnos for alumno in L: if alumno[0]==linea[0:20]: break #agregar nota a la lista del alumno alumno.append(int(linea[20:22]))

Page 11: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#calcular y grabar planilla final archivo=open("notas.txt","w") #recorrer alumnos de lista de alumnos for alumno in L: #calcular promedio redondeado promedio=int((alumno[1]+alumno[2])/2.0+0.5) #grabar línea en planilla archivo.write(alumno[0]+ \ str(alumno[1])+ \ str(alumno[2])+ \ str(promedio)+"\n") archivo.close()

Page 12: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

¿Cómo grabar la lista ordenada por nombre? archivo=open("planilla.txt","w") L.sort() #ordena la lista #recorrer las “filas” for alumno in L: … L.sort() ordena de acuerdo a los valores del primer elemento de cada lista Propuesto. Grabar la planilla ordenada por nombre en las soluciones 1 y 2 Hint. Crear inicialmente una lista de nombres y ordenarla

Page 13: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

Ejercicio. Escribir un programa que produzca la planilla final de las notas de la prueba 2. Datos. Notas1.txt: archivo con las notas de la pregunta 1. Cada línea con sección(un dígito),nombre (20 caracteres) y nota (2 dígitos). Notas2.txt: archivo con las notas de la pregunta 2. Cada línea con sección,nombre (20 caracteres) y nota (2 dígitos). Resultado. Planilla.txt: archivo que en cada línea contendrá sección, nombre y notas de pregunta 1, 2 y promedio. Ordenada por sección y nombre (dentro de cada sección por nombre)

Page 14: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#definir lista de n "filas" y 4 "columnas"L=[]

#leer lineas de primer archivofor linea in open("notas1.txt"): #agregar lista con sección, nombre y nota L.append( [linea[0], \ linea[1:21], \ int(linea[21:23])] )

#leer lineas de segundo archivofor linea in open("notas2.txt"): #buscar nombre en lista alumnos de seccion for alumno in L: if alumno[1]==linea[1:21]: break #agregar nota a lista de alumno alumno.append(int(linea[21:23]))

Page 15: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#ordenar lista por sección y nombre L.sort()

#calcular y guardar planilla final ordenadaarchivo=open(“planilla.txt","w")for alumno in L: promedio=int((alumno[2]+alumno[3])/2.0+0.5) archivo.write(alumno[0]+ \ alumno[1]+ \ str(alumno[2])+ \ str(alumno[3])+ \ str(promedio)+"\n")archivo.close()

Page 16: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

Solución 2: Con lista de 8 listas (una por sección)

#definir lista de 8 listas (inicialmente vacías)L=[]for i in range(8): L.append([])

#leer lineas primer archivofor linea in open("notas1.txt"):

#obtener indice de lista de secciones i=int(linea[0])-1

#agregar [nombre,nota] a lista de seccion L[i].append([linea[1:21],int(linea[21:23])])

Page 17: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#leer lineas segundo archivofor linea in open("notas2.txt"):

#obtener indice de lista secciones isec=int(linea[0])-1

#buscar nombre en lista de la sección for alumno in L[isec]: if alumno[0]==linea[1:21]: break

#agregar nota a lista de alumno de seccion alumno.append(int(linea[21:23]))

Page 18: #definir lista de n "filas" y 4 "columnas" L=[] #leer  lineas  de primer archivo

#grabar planillaarchivo=open("planilla.txt","w")#recorrer indices de seccionesfor i in range(len(L)): #obtener lista de la seccion seccion=L[i] #ordenar lista de la seccion seccion.sort() #recorrer alumnos de la seccion for alumno in seccion: #grabar datos del alumno en planilla promedio=int((alumno[1]+alumno[2])/2.0+0.5) archivo.write(str(i+1)+alumno[0]+ \ str(alumno[1])+str(alumno[2])+ \ str(promedio)+"\n") archivo.close()