-
Notifications
You must be signed in to change notification settings - Fork 0
/
estafeta.py
100 lines (75 loc) · 2.96 KB
/
estafeta.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
from transporte import *
class Estafeta:
listaEstafeta = [] #mudar para dicionario talvez seja melhor
ultimo_id = 0
#acho que nao precisa ter aqui localização
def __init__(self, id, nome, somaAvaliacao, nrEncomendas):
self.id = id
self.nome = nome
self.somaAvaliacao = somaAvaliacao
self.nrEncomendas = nrEncomendas
Estafeta.listaEstafeta.append(self)
Estafeta.ultimo_id = id
def getId(self):
return self.id
def getNome(self):
return self.nome
def getSomaAval(self):
return self.somaAvaliacao
def getNrEnc(self):
return self.nrEncomendas
def getAvaliacao(self):
if self.nrEncomendas == 0:
return 0
return round((self.somaAvaliacao / self.nrEncomendas),2)
def __str__(self):
return "("+ str(self.id) + ", " + self.nome + ", " + str(self.getAvaliacao()) + ")"
def __repr__(self) -> str:
return str(self)
def adicionarEstafeta(nome, soma, nr):
id = Estafeta.ultimo_id + 1
Estafeta(id, nome, soma, nr)
def updateAvaliacao(self,aval):
self.somaAvaliacao += aval
self.nrEncomendas += 1
def chooseTransport(self,peso,custo,tempoLimite):
mota = True
bicla = True
if peso > 5:
bicla = False
if peso > 20:
mota = False
tempoBicla = (custo/(10-(peso*0.6))) * 60
tempoMota = (custo/(35-(peso*0.5))) * 60
tempoCarro =(custo/(50-(peso*0.1))) * 60
atrasoDesejado = tempoLimite + tempoLimite*(self.somaAvaliacao/self.nrEncomendas)/5
#print(f"Tempo Bicla: {tempoBicla}")
#print(f"Tempo Mota: {tempoMota}")
#print(f"Tempo Max: {atrasoDesejado}")
if tempoBicla <= atrasoDesejado and bicla:
return "Bicicleta",tempoBicla
if tempoMota <= atrasoDesejado and mota:
return "Mota",tempoMota
else:
return "Carro",tempoCarro
def carregarEstafetas(nome_ficheiro):
try:
with open(nome_ficheiro, 'r') as ficheiro:
for linha in ficheiro:
campo = linha.strip().split(',')
id_estafeta = int(campo[0])
nome_estafeta = campo[1]
soma_avaliacao = int(campo[2])
nr_encomendas = int(campo[3])
Estafeta(id_estafeta, nome_estafeta,soma_avaliacao,nr_encomendas)
except FileNotFoundError:
print(f"O arquivo {nome_ficheiro} não foi encontrado.")
except PermissionError:
print(f"Sem permissão para ler o arquivo {nome_ficheiro}.")
except Exception as e:
print(f"Erro ao ler o arquivo {nome_ficheiro}: {e}")
def guardarEstafetas(nome_ficheiro):
with open(nome_ficheiro, 'w') as ficheiro:
for estafeta in Estafeta.listaEstafeta:
linha = f"{estafeta.getId()},{estafeta.getNome()},{estafeta.getSomaAval()},{estafeta.getNrEnc()}\n"
ficheiro.write(linha)