Jump to content

Carrinho de compras/mercado python


Recommended Posts

Alana

Bom dia, preciso escrever um código que apresente ao usuário um meno dando opções de cadastrar, listar, comprar produtos, visualizar o carrinho e sair da aplicação. Porém, preciso que ao adicionar um produto no carrinho, verificar se ele já está presente no carrinho, e caso esteja, mudar apenas sua quantidade, sem adicioná-lo novamente ao carrinho. Meu código está assim, alguém pode me ajudar nessa parte de mudar apenas a quantidade?

 

escolha=0
lista=[]

while escolha !="0":
  print("Menu")
  print("0 - Fim")
  print("1 - Cadastro de Produtos")
  print("2 - Lista de Produtos")
  print("3 - Confirmação do Produto")
  print("4 - Total")
  escolha = input("Escolha uma opção:")
  if escolha == 0:
    escolha = input("Tem certeza que quer finalizar o programa? 0 - Sim , 5 - Não")
  if escolha == 1:
    print("Cadastrando produto")
    produto = input("Escolha o nome do produto:")
    quantidade = input("Escolha a quantidade do produto:")
    

  if escolha=="2":
    print("Exibindo produtos...")
    contador=0
    for produto in lista:

      print(contador,"#",produto[0]," ",produto[1],"-",produto[2])
      contador=contador+1
  if escolha=="3":
    print("Confirmando produto...")
    posicao=input("Digite a posição do produto:")
    posicao_int=int(posicao)
    preco=input("Digite o preco do "+lista[posicao_int][1] +":")
    lista[posicao_int][0]="OK"
    lista[posicao_int][3]=preco
  if escolha=="4":
    print("Mostrando Todos Produtos...")
    print("Produtos que não foram comprados...")
    contador=0
    for produto in lista:
      if produto[0]=="":
        print(contador,"#",produto[0]," ",produto[1],"-",produto[2], "R$", produto[3])
        contador=contador+1
    print("Produtos que foram comprados...")
    contador=0
    precototal=0
    for produto in lista:
      if produto[0]=="OK":
        print(contador,"#",produto[0]," ",produto[1],"-",produto[2], "R$", produto[3])
        contador=contador+1
        precototal=precototal+int(produto[2])*float(produto[3])
    print("Preco Total: R$",precototal)


print("Fim do programa!")

 

Edited by Alana
Link to post
Share on other sites

Para atualizar em vez de criares fazes um loop pelos produtos que já tens e caso o encontres, então atualizas, caso não encontres, então crias.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to post
Share on other sites
Alana
4 horas atrás, M6 disse:

Para atualizar em vez de criares fazes um loop pelos produtos que já tens e caso o encontres, então atualizas, caso não encontres, então crias.

Tentei isso, mas agora tenho outro problema, quando adiciono um produto ao carrinho, por exemplo, se tinha uma maçã de quantidade 5 no carrinho, e adiciono uma uva de quantidade 3 no carrinho, a quantidade de maçãs muda para 3.

carrinho = []
print("""
Menu
0 - Finalizar programa
1 - Cadastra produto
2 - Ver carrinho
3 - Confirma produto
4 - Ver total
0 - sair
""")

escolha = input('Escolha uma opção')

while escolha != 0:
    if escolha == 1:
        item = input('Entre com um produto')
        if item in carrinho:
            print('Produto já está no carrinho:')
            x = int(input('Deseja mudar a quantidade? 1 para sim, 2 para não:'))
            if x == 1:
                novaquantidade = int(input('Informe a nova quantidade do produto:'))
                item = 0
                quantidade = novaquantidade
                input(item)
        else:
            quantidade = int(input("Entre a quantidade:"))
            carrinho.append(item)


    if escolha == 2:
        print("Exibindo produtos...")
        contador = 0
        for item in carrinho:
            print(contador,item,":",quantidade)
            contador = contador + 1

    if escolha == 3:
        posicao = int(input(f'Digite a posição do item'))
        posicao_int = int(posicao)
        preco = input(f"Digite o preço do produto {carrinho[posicao_int][1]}")
        carrinho[item] = "OK"
        carrinho[posicao][3] = preco
    escolha = int(input("Escolha uma opção"))



else:
   print("Programa encerrado")

 

Link to post
Share on other sites

Creio que o que está ai a falhar é uma estrutura de apoio.

Repara que estás a guardar é apenas o item (o nome pelo que percebi) no carrinho. Cada posição do carrinho deverá ter um produto com uma quantidade, mas não estás a guardar mais nenhuma informação relativa além do nome do produto.
A variável quantidade não está a ser guardada no carrinho em lado algum, é apenas uma variável que tem apenas o último valor que introduziste, independentemente do que seja.

O que guardas no carrinho deve ser uma estrutura, por exemplo um objeto ou um array que tenha a informação toda do item e não só no seu nome.
Se o teu item for um dicionário onde guardas a informação toda que necessitas já não terás esses problema. 
Deixo-te um exemplo abaixo recorrendo a um dicionário - atenção que este código não foi testado, serve apenas para ilustrar como podes resolver esse problema, pelo que poderá não correr.

carrinho = []

# cria e adiciona batatas ao carrinho
item = {'nome': 'batatas', 'quantidade': 1}
carrinho.append(item)
print("\nO carrinho tem: ")
print(carrinho)

# cria e adiciona arroz ao carrinho
item = {'nome': 'arroz', 'quantidade': 10}
carrinho.append(item)
print("\nO carrinho tem: ")
print(carrinho)

# mostra a quantidade de batatas
for item in carrinho:
  if item['nome'] == 'batatas':
    print("\nQuantidade de batatas no carrinho: ")
  	print(item['quantidade'])

# procura o arroz e atualiza a quantidade para 10
for item in carrinho:
	novo_item = item
    if novo_item['nome'] == 'arroz':
		novo_item['quantidade'] = 10
	novo_carrinho.append(novo_item)
carrinho = novo_carrinho
print("\nO carrinho tem: ")
print(carrinho)

# procura as batatas e atualiza cria uma nova propriedade 'sabor'
for item in carrinho:
	novo_item = item
	if novo_item['nome'] == 'batatas':
  		novo_item['sabor'] = 'ketchup'
	novo_carrinho.append(novo_item)
carrinho = novo_carrinho
print("\nO carrinho tem: ")
print(carrinho)

 

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to post
Share on other sites
Alana
1 hora atrás, M6 disse:

Creio que o que está ai a falhar é uma estrutura de apoio.

Repara que estás a guardar é apenas o item (o nome pelo que percebi) no carrinho. Cada posição do carrinho deverá ter um produto com uma quantidade, mas não estás a guardar mais nenhuma informação relativa além do nome do produto.
A variável quantidade não está a ser guardada no carrinho em lado algum, é apenas uma variável que tem apenas o último valor que introduziste, independentemente do que seja.

O que guardas no carrinho deve ser uma estrutura, por exemplo um objeto ou um array que tenha a informação toda do item e não só no seu nome.
Se o teu item for um dicionário onde guardas a informação toda que necessitas já não terás esses problema. 
Deixo-te um exemplo abaixo recorrendo a um dicionário - atenção que este código não foi testado, serve apenas para ilustrar como podes resolver esse problema, pelo que poderá não correr.


carrinho = []

# cria e adiciona batatas ao carrinho
item = {'nome': 'batatas', 'quantidade': 1}
carrinho.append(item)
print("\nO carrinho tem: ")
print(carrinho)

# cria e adiciona arroz ao carrinho
item = {'nome': 'arroz', 'quantidade': 10}
carrinho.append(item)
print("\nO carrinho tem: ")
print(carrinho)

# mostra a quantidade de batatas
for item in carrinho:
  if item['nome'] == 'batatas':
    print("\nQuantidade de batatas no carrinho: ")
  	print(item['quantidade'])

# procura o arroz e atualiza a quantidade para 10
for item in carrinho:
	novo_item = item
    if novo_item['nome'] == 'arroz':
		novo_item['quantidade'] = 10
	novo_carrinho.append(novo_item)
carrinho = novo_carrinho
print("\nO carrinho tem: ")
print(carrinho)

# procura as batatas e atualiza cria uma nova propriedade 'sabor'
for item in carrinho:
	novo_item = item
	if novo_item['nome'] == 'batatas':
  		novo_item['sabor'] = 'ketchup'
	novo_carrinho.append(novo_item)
carrinho = novo_carrinho
print("\nO carrinho tem: ")
print(carrinho)

 

Estou tentando aqui, fiz isso

 

carrinho = []

print("""
Menu
0 - Finalizar programa
1 - Cadastra produto
2 - Ver carrinho
3 - Confirma produto
4 - Ver total
5 - Mudar quantidade do produto
0 - sair
""")

escolha = input('Escolha uma opção')

while escolha != 0:
    if escolha == 1:
        item = input('Entre com um produto')
        if item in carrinho:
            print('Produto já está no carrinho:')
            nova_quantidade = int(input('Digite a nova quantidade:'))
            novo_produto = produto
            produto = {'nome': item, 'quantidade': nova_quantidade}

        else:
            quantidade = int(input('Digite a quantidade do produto:'))
            produto = {'nome': item, 'quantidade': quantidade}
            carrinho.append(produto)

, mas ao trocar a quantidade de algo que ja esta no carrinho, ele adiciona de novo, exemplo, tenho uma maçã de quantidade 2 no carrinho, mudo a quantidade da maçã para 5, ao invés de ter 5 maçãs no carrinho, fico com o carrinho assim: 

Exibindo produtos...
0 {'nome': 'maçã', 'quantidade': 2} : 5
1 {'nome': 'maçã', 'quantidade': 5} : 5

                             

Link to post
Share on other sites

Só estás a falhar a parte da validação da existência do produto no carrinho. Repara que agora o teu carrinho não guarda um nome - "item" na tua versão original - mas sim uma estrutura, por isso não podes usar

if item in carrinho

Tens de fazer um ciclo pelo conteúdo do carrinho e verificar se o item existem na propriedade "nome" de algum produto (de novo código não testado):

# Ler produto e quantidade
item = input('Entre com um produto')
quantidade = int(input('Digite a quantidade do produto:'))

# Preparar variáveis auxiliares
prod_edit = null
carrinho_aux = []

# Preparar o carrinho auxiliar para receber as alterações necessárias aos produtos
for prod in carrinho:
	if item in prod.nome:
		# Produto encontrado, obter o valor atual e não o guardar no carrinho auxiliar (será adicionado mais tarde)
		prod_edit = prod
	else:
		# Transportar o produto encontrado para o carrinho auxiliar
		carrinho_aux.append(prod)

if prod_edit != null:
	print('Produto já está no carrinho, a atualizar a quantidade')    
	prod_edit['quantidade'] = quantidade
else:
	print('A inserir novo produto no carrinho')	
	prod_edit = {'nome': item, 'quantidade': quantidade}

# Adicionar o produto ao carrinho auxiliar e transportar tudo para o carrinho
carrinho_aux.append(prod_edit)
carrinho = carrinho_aux

 

Edited by M6
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.