To achando esse código uma gambiarra,muito feio, tem outra maneira de fazer que seja mais elegante?
produtos = {}
def addProduto(self,produto):
if (produto.nome != None and produto.valor > 0 and produto.quantidade >= 0): #Verifica os campos
achou = False
for x in self.produtos.items(): #Percorre o dict em busca do nome do produto
busca = str(x[1]) #transforma os valores em string
if busca.split()[1].__eq__(produto.nome): #verifica se já existe o nome do produto no dict
achou = True
break
if not achou:
self.produtos.__setitem__(produto.id,produto.toString())
return f'Produto {produto.nome} adicionado'
return 'Produto já existe'
return 'Produto com informações invalidas'
da pra remover a variável achou e melhorar a semântica dos nomes, acho que isso já deixa mais legível
def addProduto(self,novoProduto):
if (verificaCamposProduto):
produtosCadastrados = self.produtos.items()
for produtoExistente in produtosCadastrados:
busca = str(produtoExistente[1]) #transforma os valores em string
if busca.split()[1].__eq__(novoProduto.nome): #verifica se já existe o nome do produto no dict
return 'Produto já existe'
#em caso do produto não existir
self.produtos.__setitem__(novoProduto.id,novoProduto.toString())
return f'Produto {novoProduto.nome} adicionado'
#Em caso de o produto estar com informações incompletas
return 'Produto com informações invalidas'
def verificaCamposProduto(produto):
if (produto.nome != None and produto.valor > 0 and produto.quantidade > 0):
return True;
return False;
2 curtidas
Cara, você está usando dicionário, na minha opinião nem precisa de um for para ver se o produto existe já que a chave é o id…
def addProduto(self, novoProduto):
if (not produtoOK(novoProduto)):
return 'Produto com informações invalidas'
if novoProduto.id in self.produtos: # ou if self.produtos[novoProduto.id]:
return 'Produto já existe'
#em caso do produto não existir (outra forma de criar uma nova chave!)
self.produtos[novoProduto.id] = novoProduto.toString()
return f'Produto {novoProduto.nome} adicionado'
A segunda função nem precisa de dois returns…
def produtoOK(produto):
return (produto.nome != None and
produto.valor > 0 and produto.quantidade > 0)
@leonardodias914 mudei o nome da função apenas para melhorar um pouco a leitura do not lá em cima ok? Fica bravo não beleza?
1 curtida