Alana Posted April 17, 2021 at 02:06 PM Report Share #622018 Posted April 17, 2021 at 02:06 PM (edited) 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 April 17, 2021 at 02:08 PM by Alana Link to comment Share on other sites More sharing options...
M6 Posted April 19, 2021 at 08:59 AM Report Share #622028 Posted April 19, 2021 at 08:59 AM 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 comment Share on other sites More sharing options...
Alana Posted April 19, 2021 at 01:10 PM Author Report Share #622035 Posted April 19, 2021 at 01:10 PM 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 comment Share on other sites More sharing options...
M6 Posted April 19, 2021 at 01:49 PM Report Share #622037 Posted April 19, 2021 at 01:49 PM 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 comment Share on other sites More sharing options...
Alana Posted April 19, 2021 at 02:54 PM Author Report Share #622038 Posted April 19, 2021 at 02:54 PM 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 comment Share on other sites More sharing options...
M6 Posted April 20, 2021 at 12:52 PM Report Share #622050 Posted April 20, 2021 at 12:52 PM (edited) 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 April 20, 2021 at 12:55 PM 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 comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now