Largest item in a shopping list

Asked

Viewed 113 times

-3

I need to find the most expensive item within a list.

The entry must contain the product code, quantity and price entered by the user in the same row in that order and each row is a product. Then the code needs to calculate the quantity * the value of all products that the user enters and check which is the most expensive item within the inserted items.

Output must be the product code, quantity and value only of the most expensive item among all the entered items.

I’ve tried absolutely everything I know and I can’t fix it because I can’t break the infinite loop.

Code

temp = []

listacustos = []

maior = 0

while True:

    item = input().split()
    temp.append(item)
    if len(temp) == 0:
        print ("nao tem compras")
    else:
        qtd = int(item[1])
        valor = float(item[2])
        custo = valor * qtd
        item.append(custo)
        listacustos.append(custo)
    for c in range(len(listacustos)):
        if listacustos[c] > maior:
            maior = listacustos[c]
    for p in temp:
        if p[2] == maior:
            print("Quantidade: {}".format(p[0]))
            print("Codigo: {}".format(p[1]))
            print("Custo: {}".format(p[3]))
  • If you want to know how to leave a loop, swap the title for something more descriptive. Ex: "How to abandon the while true loop: ?" and start the question by, "I made a program that calculates the highest value of a shopping list, the code is wrapped in a loop while true: would like to know how to wax this loop after the user has typed 0 0 0?"

2 answers

0

line 7

while True: # este laço não tem break

line 9

item = input().split() # aqui não foi usado como lista, mas algumas linhas abaixo há item.append() o que gera erro

line 11

if len(temp) == 0: # ficaria melhor assim: if not temp:

line 17

item.append(custo) # a variável precisa está associada a uma lista para poder usar .append(custo), ESTA LINHA GERA ERRO

line 20

if listacustos[c] > maior: # Erro: não foi criada uma variável nomeada maior, ESTA LINHA GERA ERRO

0


Well, although my solution is different from yours, run a code scan and see if it helps.

# Lista de produtos
produtos = []

while True:
    # Entrada
    if input('Adicionar novo produto? s/n: ') != 's':
        # Obtém o maior 
        maior_valor = [0,0,0]
        for produto in produtos:
            if produto[2] > maior_valor[2]:
                maior_valor = produto
        
        # Saída
        print(f'Código: {maior_valor[0]}')
        print(f'Qtde: {maior_valor[1]} un.')
        print(f'Valor: R$ {maior_valor[2]:.2f}')
        break
    
    # Entrada
    codigo, qtde, preco = [i for i in input().split()]
    
    # Adiciona produto na lista de produtos
    produtos.append([codigo, qtde, float(preco)*float(qtde)])
  • Oh yes. I made a comparison here and forgot to mention that the infinite loop ends when the user type '0 0'. But I managed to make some things right. Thank you very much!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.