Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Se guarda en csv solo si se sale desde el menu con 'q'
- import csv
- def abrir_archivo_materia(csv_materias):
- '''Abre el archivo de materias y lo lee, devuelve los codigos de las materias y sus datos (correlativas, nombre, creditos).'''
- diccionario_codigos={}
- mi_archivo=open(csv_materias,'r')
- diccionario_materias=csv.DictReader(mi_archivo)
- for diccionario in diccionario_materias:
- codigo = diccionario['codigo']
- diccionario.pop('codigo')
- diccionario_codigos[codigo] = tuple(diccionario.values()) #{codigo:(correlativas,nombre,creditos)}
- return diccionario_codigos
- mi_archivo.close()
- def abrir_archivo_aprobadas():
- '''Intenta abrir el archivo de materias aprobadas, y devuelve su contenido. Si no existe, inicializa el listado de materias aprobadas.'''
- try:
- lista_aprobadas=[]
- aprobadas_r=open('aprobadas.csv','r')
- leer_aprobadas=csv.reader(aprobadas_r)
- for lista in leer_aprobadas:
- lista_aprobadas.append(lista)
- return lista_aprobadas[1:]
- aprobadas_r.close()
- except IOError:
- return []
- def escribir_csv_aprobadas(lista_aprobadas):
- '''Recibe las materias aprobadas y guarda su codigo en el archivo aprobadas.csv bajo el encabezado "codigo"'''
- encabezado=['codigo']
- aprobadas_w=open('aprobadas.csv','w')
- escribir_aprobadas=csv.writer(aprobadas_w)
- if lista_aprobadas[0]!=encabezado:
- lista_aprobadas.insert(0,encabezado)
- for codigo in lista_aprobadas:
- escribir_aprobadas.writerow(codigo)
- aprobadas_w.close()
- def marcar_como_aprobada(diccionario_codigos,lista_aprobadas,lista_habilitadas):
- '''Pide el codigo de una materia, valida que exista (si no vuelve al menu),
- pide confirmacion mostrando el nombre (si no vuelve al menu) y la aniade a la lista de aprobadas si ya se aprobaron las correlativas.'''
- ingreso_codigo=raw_input('Ingrese el codigo de la materia: ')
- if ingreso_codigo in diccionario_codigos:
- if ingreso_codigo in lista_habilitadas:
- nombre_materia=diccionario_codigos[ingreso_codigo][1]
- print '\n>>>>>>> '+ingreso_codigo+' - '+nombre_materia+'\n'
- if not [ingreso_codigo] in lista_aprobadas:
- confirmacion=raw_input('Marcar materia como aprobada?[s/n]: ')
- if confirmacion=='s':
- lista_aprobadas.append([ingreso_codigo])
- print '\n>>>>>>> Registraste satisfactoriamente la materia como aprobada.\n'
- elif confirmacion=='n':
- pass
- else:
- print '\n>>>>>>> Ingrese <s> para confirmar o <n> para volver al menu.\n'
- else:
- print '\n>>>>>>> Ya aprobaste esta materia!\n'
- else:
- print '\n>>>>>>> No es posible marcarla como aprobada ya que hay correlativas sin aprobar.\n'
- else:
- print '\n>>>>>>> Su ingreso no corresponde al codigo de una materia, intente otra vez.\n'
- return lista_aprobadas
- def ver_aprobadas_y_creditos(diccionario_codigos,lista_aprobadas):
- '''Muestra el codigo, nombre y creditos de todas las materias marcadas como aprobadas. Al final muestra el total de creditos sumados.'''
- total_creditos=0
- if len(lista_aprobadas)==0:
- print '\n>>>>>>> No aprobaste ninguna materia.\n'
- else:
- for lista_materia in lista_aprobadas:
- for str_materia in lista_materia:
- nombre_materia=diccionario_codigos[str_materia][1]
- creditos=int(diccionario_codigos[str_materia][2])
- total_creditos+=creditos
- print '>>>>>>> '+str_materia+' - '+nombre_materia+' '+str(creditos)+'c'
- print '>>>>>>> ----------------------------\n>>>>>>> Total creditos: '+str(total_creditos)
- def materias_habilitadas(diccionario_codigos,lista_aprobadas):
- '''Devuelve las materias habilitadas para cursar'''
- lista_str_aprobadas=[]
- lista_habilitadas=[]
- for lista in lista_aprobadas:
- str_aprobadas=''.join(lista)
- lista_str_aprobadas.append(str_aprobadas)
- for codigo in diccionario_codigos:
- correlativas_aprobadas=0
- lista_correlativas=diccionario_codigos[codigo][0].split('-')
- numero_correlativas=len(lista_correlativas)
- for n in range (numero_correlativas):
- if lista_correlativas[n] in lista_str_aprobadas:
- correlativas_aprobadas+=1
- else:
- break
- if correlativas_aprobadas==numero_correlativas or lista_correlativas==['']:
- lista_habilitadas.append(codigo)
- return lista_habilitadas
- def print_materias_habilitadas(diccionario_codigos,lista_habilitadas):
- '''Imprime el codigo, nombre y creditos de todas las materias habilitadas para cursar.
- Es decir, todas las materias cuyas correlativas estan aprobadas.'''
- print '\n>>>>>>> Materias habilitadas para cursar:\n'
- for codigo in lista_habilitadas:
- nombre_materia=diccionario_codigos[codigo][1]
- creditos=diccionario_codigos[codigo][2]
- print '>>>>>>> '+codigo+' - '+nombre_materia+' '+creditos+'c'
- def ver_informacion_materia(diccionario_codigos,lista_aprobadas):
- '''Pide el codigo de una materia, y luego muesta el codigo, nombre y creditos de la misma.
- Tambien muestra si esta aprobada o no, lista las materias correlativas y muestra cuales de ellas estan aprobadas y cuales no.'''
- ingreso_codigo=raw_input('Ingrese el codigo de la materia: ')
- if ingreso_codigo in diccionario_codigos:
- nombre_materia=diccionario_codigos[ingreso_codigo][1]
- lista_correlativas=diccionario_codigos[ingreso_codigo][0].split('-')
- print lista_correlativas
- creditos=diccionario_codigos[ingreso_codigo][2]
- if [ingreso_codigo] in lista_aprobadas:
- estado_materia='Si'
- else:
- estado_materia='No'
- print '\n>>>>>>> '+ingreso_codigo+' - '+nombre_materia+'\n>>>>>>> Creditos: '+creditos+'\n\nAprobada: '+estado_materia+'\n\n>>>>>>> Correlativas:'
- for correlativa in lista_correlativas:
- if correlativa=='':
- print 'No tiene correlativas'
- continue
- if [correlativa] in lista_aprobadas:
- estado_correlativa='(Aprobada)'
- else:
- estado_correlativa='(No aprobada)'
- nombre_correlativa=diccionario_codigos[correlativa][1]
- creditos_correlativa=diccionario_codigos[correlativa][2]
- print '\n>>>>>>> '+correlativa+' - '+nombre_correlativa+'\n>>>>>>> '+creditos_correlativa+'c - '+estado_correlativa
- return
- else:
- print '\n>>>>>>> Su ingreso no corresponde al codigo de una materia, intente otra vez.\n'
- return
- def main():
- '''Ejecuta las funciones principales del programa a traves de un menu interactivo, maneja los errores en las funciones
- que manejan archivos'''
- try:
- diccionario_codigos=abrir_archivo_materia('materias.csv')
- except IOError:
- print "\n>>>>>>> Hubo un problema al intentar abrir o cerrar el archivo de materias.\n"
- return
- lista_aprobadas=abrir_archivo_aprobadas()
- opcion=''
- while opcion!='q':
- opcion=raw_input('\nBienvenido a Fiuba Companion\nIngrese la letra deseada indicada en el menu de opciones y oprima enter\n\nQue desea hacer?\n\n(a): Marcar una materia como aprobada\n\n(b): Ver las materias aprobadas y la cantidad de creditos\n\n(c): Ver las materias habilitadas para cursar\n\n(d): Ver la informacion detallada de una materia\n\n(q): Guardar y salir\n').lower()
- if opcion=='a':
- lista_habilitadas=materias_habilitadas(diccionario_codigos,lista_aprobadas)
- lista_aprobadas=marcar_como_aprobada(diccionario_codigos,lista_aprobadas,lista_habilitadas)
- continue
- elif opcion=='b':
- ver_aprobadas_y_creditos(diccionario_codigos,lista_aprobadas)
- continue
- elif opcion=='c':
- lista_habilitadas=materias_habilitadas(diccionario_codigos,lista_aprobadas)
- print_materias_habilitadas(diccionario_codigos,lista_habilitadas)
- continue
- elif opcion=='d':
- ver_informacion_materia(diccionario_codigos,lista_aprobadas)
- continue
- elif opcion=='q':
- continue
- else:
- print '\n>>>>>>> Ingrese una letra que corresponda a una opcion\n'
- continue
- if lista_aprobadas!=[]:
- try:
- prueba=escribir_csv_aprobadas(lista_aprobadas)
- except IOError:
- print '\n>>>>>>>Ocurrio un error al crear o cerrar el archivo csv de materias aprobadas.\n'
- print '\n>>>>>>> Ha salido de Fiuba Companion.'
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement