Informática, perguntado por amargedom1234567, 6 meses atrás

Uma sorveteria vende cinco produtos diferentes, cada um com um preço de
acordo com a tabela abaixo:
Código Produto Preço (R$)
A Refrigerante 3,50
B Casquinha Simples 4,00
C Casquinha Dupla 5,50
D Sundae 7,50
E Banana Split 9,00
O programa deve armazenar essa tabela numa matriz, onde cada linha representa um
produto. Cada linha tem 3 colunas. A primeira coluna contém o código do produto, a
segunda contém o nome do produto, e a terceira contém o preço.
Faça um programa que processe diversas vendas, lembrando que cada venda efetuada
pode ser composta por diversas unidades de diversos produtos. O programa deverá
utilizar:
(a) uma função que apresente na tela um menu indicando os preços dos produtos. Esse
menu deve ser apresentado no início de cada venda.
(b) uma função que processe cada venda individual e forneça o valor a pagar.
(c) uma terceira função que emita um relatório no final do dia, informando dados gerais
das vendas do dia (número total de itens vendidos de cada produto, total pago para cada
produto, total arrecadado e valor médio de cada compra)
Em python

Soluções para a tarefa

Respondido por GeBEfte
4

O programa abaixo (e na figura anexada) não executa uma validação completa dos dados, portanto deve-se ter cuidado ao passar os dados como, por exemplo, as quantidades dos itens, já que o programa aceita quantidades negativas e retornará uma exceção caso seja digitado um dado não inteiro.

Foram importadas duas bibliotecas para auxiliar na estética do programa, 'os' para limpar a tela e 'time' para gerar 'pausas'.

Como o programa tem alguns detalhes, deixo aberto o campo dos comentários para dúvidas.

Obs.: Os pontos que precedem as linhas de programação não fazem parte do programa, foram colocadas apenas para garantir a indentação do código aqui no site.

import os

from time import sleep

def mostra_menu(matriz_produtos):

.....print(f'{"Código":<8}  {"Produto":<19}  {"Preço (R$)":<10}')

.....for produto in matriz_produtos:

..........print(f'{produto[0]:^8}  {produto[1]:<19}  {produto[2]:^10.2f}')

.....return

def nova_venda():

.....tot_pagar = 0

.....os.system('cls' if os.name == 'nt' else 'clear')

.....mostra_menu(produtos)

.....while True:

..........codigo = str(input('\nDigite o código do produto (0 para finalizar): ')).upper().strip()

..........if codigo not in ('A', 'B', 'C', 'D', 'E', '0'):

...............print('Produto não disponível')

...............continue

..........if codigo == '0':

...............print(f'\nTotal a pagar nesta compra: R${tot_pagar:.2f}')

...............sleep(2)

...............os.system('cls' if os.name == 'nt' else 'clear')

...............break

..........qnt = int(input(f'Quantidade de {vendas[codigo][0]}?: '))

..........vendas[codigo][2] += qnt

..........tot_pagar += qnt*vendas[codigo][1]

..........vendas[codigo][3] += qnt*vendas[codigo][1]

.....return

def relatorio():

.....total = 0

.....print(f'{"Relatório do dia":^49}\n{"-"*49}\n{"Produto":<19}  {"Quantidade":<10}  {"Total do produto" :<16}')

.....for produto in vendas.values():

..........print(f'{produto[0]:<19}  {produto[2]:^10}  {produto[3]:^16.2f}')

..........total += produto[3]

.....print(f'\nTotal arrecadado no dia: R${total:.2f}')

.....print(f'Valor médio em cada compra: R$', end='')

.....if contador_vendas == 0:

..........print('0.00')

.....else:

..........print(f'{total/contador_vendas:.2f}')

 

produtos = [['A', 'Refrigerante', 3.50], ['B', 'Casquinha Simples', 4.00], ['C', 'Casquinha Dupla', 5.50], ['D', 'Sundae', 7.50], ['E', 'Banana Split', 9.00]]

vendas = {'A': ['Refrigerante', 3.50, 0, 0], 'B': ['Casquinha Simples', 4.00, 0, 0], 'C': ['Casquinha Dupla', 5.50, 0, 0], 'D': ['Sundae', 7.50, 0, 0], 'E': ['Banana Split', 9.00, 0, 0]}

contador_vendas = 0

while True:

.....op = str(input('''

Sistema Sorveteria

[1] Nova venda

[2] Fechar  

''')).strip()

.....if op == '1':

..........contador_vendas += 1

..........nova_venda()

.....elif op == '2':

..........os.system('cls' if os.name == 'nt' else 'clear')

..........relatorio()

..........break

.....else:

..........print('Opção não reconhecida')

..........sleep(2)

..........os.system('cls' if os.name == 'nt' else 'clear')

\Huge{\begin{array}{c}\Delta \tt{\!\!\!\!\!\!\,\,o}\!\!\!\!\!\!\!\!\:\,\perp\end{array}}Qualquer~d\acute{u}vida,~deixe~ um~coment\acute{a}rio

Anexos:

monicasantos96: tem como testar sem o break e o os.system significa o que ?
GeBEfte: Se entendi sua pergunta, sim, seria possível deixar de utilizar o comando break, no entanto deverão ser feitas algumas alterações, claro.
Por exemplo, dentre outras alterações, a condição que leva ao comando break deverá ser colocada como condição de parada do laço while.

Quanto a função os.system(), é uma função importada da biblioteca os que nos permite diversas interações com o sistema operacional. Neste programa utilizamos pra algo simples, limpar a tela do console.
GeBEfte: ex. com e sem break:

while True:
.....x = input('')
.....if x == '0':
..........break
.....print('Ainda não saiu do while')
print('Saiu')

x = input('')
while x!='0':
.....print('Ainda não saiu do while')
.....x = input('')
print('Saiu')
Perguntas interessantes