-
Notifications
You must be signed in to change notification settings - Fork 0
/
fp7.py
127 lines (112 loc) · 3.65 KB
/
fp7.py
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
def ler_dados(ficheiro):
try:
file = open(ficheiro, "r")
#cria uma variavel (file) que e uma "copia" do ficheiro para poder manipular NO PYTHON
#nao podemos manipular no ficheiro original EM PYTHON
disc = ler_disciplinas(file)
alunos = ler_dados_alunos(file)
file.close()
return (disc,alunos)
except IOError:
raise IOError("ficheiro inexistente")
def ler_disciplinas(file):
ndisc = int(file.readline())
disciplinas = [('None',0)]
for i in range(ndisc): # disciplina[i] fica associada ao codigo i
nome = str(file.readline())
ano = int(file.readline())
disciplinas.append((nome[:len(nome)-1],ano))
return disciplinas
def ler_dados_alunos(file):
alunos = {}
nalunos = int(file.readline())
for i in range(nalunos):
nome = str(file.readline())
linha = list(map(int,file.readline().split()))
alunos[linha[0]] = (nome[:len(nome)-1],linha[1],linha[2:])
return alunos
def anoAluno(codigo):
ano = codigo//1000000
return ano
def cursoAluno(codigo):
curso = (codigo%1000000)//1000
return curso
#auxiliar p/discAluno
def nomeAluno(codigo,alunos):
return alunos[codigo][0]
#falta o 7)
def discAluno(codigo,alunos,disciplinas,ficheiro):
try:
f = open(ficheiro,"w")
f.write("Disciplinas de %d (%s)"%(codigo,nomeAluno(codigo,alunos)))
for i in (alunos[codigo][2]):
f.write("%s" % (disciplinas[i][0]))
#f = open(ficheiro,"r")
#txt = f.read()
#return txt
f.close()
except KeyError:
f.close()
raise KeyError("codigo inexistente")
def discAno(ano,disciplinas):
list = []
for i in range (1,len(disciplinas)):
if disciplinas[i][1]==ano:
list.append(i)
return list
def alunos_em_disc(disc,alunos):
if type(disc)!=int or disc<1:
raise ValueError("Erro de tipos")
lista=[]
for i in (alunos):
list = alunos[i][2]
for j in range(len(list)):
if list[j]==disc:
lista.append(i)
return lista
def codigoAluno(nome,alunos):
list=[]
for i in alunos:
if (alunos[i][0]==nome):list.append(i)
return list
#auxiliar para inscritos_dic
#nome = nome da disciplina
def codigo_disc(nome,disciplinas):
for i in range(1,len(disciplinas)):
if (disciplinas[i][0]==nome):
return i
return 0 #retorna 0 se o nome da disciplina nao existe
def inscritos_disc(nome,disciplinas,alunos):
disc = codigo_disc(nome,disciplinas)
if (disc==0): raise ValueError("disciplina nao existe")
return alunos_em_disc(disc,alunos)
def media_ndisc(curso,disciplinas,alunos):
soma_disc=0 #no curso
n_alunos=0
for codigo in alunos:
if (cursoAluno(codigo)==curso):
soma_disc += alunos[codigo][1]
n_alunos += 1
if (n_alunos!=0):
return soma_disc//n_alunos
return 0
def totais_por_disciplina(disciplinas,alunos,ficheiro):
file = open(ficheiro,"w")
file.write("Numero de alunos inscritos\n")
contadores = len(disciplinas)*[0]
for i in alunos:
for j in alunos[i][2]:
contadores[j] += 1
for d in range(len(disciplinas)):
file.write("%s: %d\n" %(disciplinas[d][0],contadores[d]))
file.close()
#porque nao da assim??
#file = open(ficheiro,"w")
#file.write("Numero de alunos inscritos\n")
#for i in range(len(disciplinas)):
# sum = 0
# list = inscritos_disc(disciplinas[i][0],disciplinas,alunos)
# for j in range(len(list)):
# sum += 1
# file.write("%s: %d\n" %(disciplinas[i][0],sum))
#file.close()