Skip to content

Instantly share code, notes, and snippets.

@felipebastosweb
Created January 5, 2017 05:29
Show Gist options
  • Save felipebastosweb/f56c7ea941f21243f04cf1fc7d6a9ba4 to your computer and use it in GitHub Desktop.
Save felipebastosweb/f56c7ea941f21243f04cf1fc7d6a9ba4 to your computer and use it in GitHub Desktop.
"""
Análise inicial da autonomia do combustível (gasolina) de um veículo para uma viagem, ajudando a prever a probabilidade de faltar gasolina.
Cálculo incompleto, use por sua conta e risco.
Precisa de refatoração.
"""
class Fabricante(object):
nome = ''
def __init__(self, nome):
self.nome = nome
class Modelo(object):
fabricante = Fabricante
nome = ''
fabricacao = 0
venda = 0
tanque = 0
#rendimento
gasolina_cidade = 0
gasolina_estrada = 0
def __init__(self, fabricante, nome, fabricacao, venda):
self.fabricacao = fabricacao
self.venda = venda
"""
@var integer cidade km/l na cidade
@var integer estrada km/l na estrada
@return void
"""
def set_rendimento_gasolina(self, cidade, estrada):
self.gasolina_cidade = cidade
self.gasolina_estrada = estrada
def set_tanque(self, tanque):
self.tanque = tanque
def tanque(self):
return self.tanque
def rendimento_gasolina_cidade(self):
return self.gasolina_cidade
def rendimento_gasolina_estrada(self):
return self.gasolina_estrada
class Veiculo(object):
modelo = Modelo
gasolina = 0
def __init__(self, modelo):
self.modelo = modelo
def set_gasolina(self, gasolina):
self.gasolina = gasolina
class Percurso(object):
tipo = ''
distancia = 0
def __init__(self, tipo, distancia):
self.tipo = tipo
self.distancia = distancia
"""
52km / 13km/l = 4l
"""
def litros(self):
if self.tipo == 'estrada':
return self.distancia / veiculo.modelo.rendimento_gasolina_estrada()
else:
return self.distancia / veiculo.modelo.rendimento_gasolina_cidade()
class Viagem(object):
veiculo = Veiculo
percursos = []
__distancia_total = 0
def __init__(self, veiculo):
self.veiculo = veiculo
def add_percurso(self, percurso):
self.percursos.append(percurso)
def calcula_distancia(self):
for p in self.percursos:
self.__distancia_total += p.distancia
def distancia_total(self):
return self.__distancia_total
def calcula_litros(self):
litros = 0
for p in self.percursos:
litros = p.litros()
return litros
def autonomia(self):
litros = self.calcula_litros()
if self.veiculo.gasolina > litros:
return ((self.veiculo.gasolina - litros) / self.veiculo.modelo.tanque) * 100
fabricante = Fabricante('Ford')
modelo = Modelo(fabricante, 'Ka 1.0 SE', 2015, 2015)
modelo.set_rendimento_gasolina(11, 13)
modelo.set_tanque(51)
veiculo = Veiculo(modelo)
veiculo.set_gasolina(25)
percurso1 = Percurso('cidade', 16)
percurso2 = Percurso('estrada', 88)
viagem = Viagem(veiculo)
viagem.add_percurso(percurso1)
viagem.add_percurso(percurso2)
viagem.calcula_distancia()
print('Distancia Total: \n')
print(viagem.distancia_total())
print('\nLitros Total: \n')
print(viagem.calcula_litros())
print('\nAutonomia:\n')
print(viagem.autonomia())
@felipemfp
Copy link

felipemfp commented Jan 5, 2017

Esse jeito de escrever classes é muito Java ou C#...

class Veiculo(object):
    modelo = Modelo
    gasolina = 0
    
    def __init__(self, modelo):
        self.modelo = modelo
    
    def set_gasolina(self, gasolina):
        self.gasolina = gasolina

Uma reescrita seria:

class Veiculo(object):
    
    def __init__(self, modelo, gasolina=0):
        self.modelo = modelo
        self.gasolina = gasolina

Você não precisa de um set_gasolina, pois gasolina não é privado ao objeto.


É apenas uma sugestão de escrita.

@felipebastosweb
Copy link
Author

Perfeito Felipe, eu fui acrescentando os atribuitos e os gets e sets a medida que validava o calculo de autonomia (previsibilidade de sobra de combustivel). Vou refatorar estes pontos pra ficar mais pythonico.
Quero inclusive relembrar como setar definindo a variavel .. ex

method(attr1 = value, attr2 = value2)

pq na hora nao lembrei.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment