Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Ajuda no resultado do exercício 16 da lista dexercícios: exercicios com Listas

103 views
Skip to first unread message

Leo

unread,
May 7, 2023, 6:30:10 AM5/7/23
to Python Brasil
Galera bom dia!

seguinte, eu tenho usado todas alista disponíveis no site para melhorar minha compreenção e ajudar na fixação dos conceitos que venho aprendendo nessa caminhanda como programador.
Ontem na sexta eu comecei a fazer o exercícios 16, e de longe, até agora, foi o maior desafio para mim. Era como se tudo que eu tivesse aprendido não tivesse rodando em harmonia, e pela primeira vezes sinti a tão falada sindrome do impostor hehe.

Depois de muito pensar e ler algumas coisas tanto no livro do professor Nilo Ney e também o livro PY4E e revisar minhas anotações... eu finalmente consegui fazer algo, que pelo menos faça algum sentido na resolução desse exercício.

Eu gostaria de compartilhar com vocês minhas linhas de códigos para:
primeiro, verificar se essa resolução encontrada é realmente o que está sendo pedido no enunciado.
segundo, caso esteja correto, gostaria de tentar melhorar o código tornando mais enxuto e funcional.

A primeira parte do meu código eu fiz para automatizar a entrada de dados. Logo quando precisava realizar os testes eu poderia a qualquer momento variar a quantidade de vendedores e suas respectivas faixa de comissão.

Já a segunda parte eu trabalhei para resolver o exercícios, e foi ai que meus problemas começaram. Pois estava com dificuldades de acessar os index da listas dentro da lista e depois acessar esses valores. Que agora depois de resolver o exercícios, claro se estiver correto, parece bem simples. Mas acreditem, foi um trabalho arduo para mim pensar uma forma de fazer com que essa engrenagem rodasse harmonicamente.

Bom... segue o código:

from random import randint, uniform

comissoes = [[200, 299], [300, 399], [400, 499], [500, 599], [600, 699], [700, 799], [800, 899], [900, 999], [1000, 5000]]
vendedores = []
comissao = []
contadores = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
rank = []

#Gerador de valores para automatizar a entrada de dados.

n = 300 #int(input('Informe quantos vendedores trabalharam essa semana: '))

for v in range(1, n + 1):
    v = round(uniform(2250, 15000))
    comis = round(v * 0.09)
    vendedores.append(v)
    comissao.append(comis)
#print(vendedores)
#print(comissao)

# Corpo do programa, antendendo o exercicio 16

for i, v in enumerate(comissoes):
    for c in comissao:
        if c >= v[0] and c <= v[1]:
            #print(i, v, c)
            contadores[i]+= 1
print(f'''Tabela de pagamento de comissões
Comissão entre R$200  - R$299  = {contadores[0]}
Comissão entre R$300  - R$399  = {contadores[1]}
Comissão entre R$400  - R$499  = {contadores[2]}
Comissão entre R$500  - R$599  = {contadores[3]}
Comissão entre R$600  - R$699  = {contadores[4]}
Comissão entre R$700  - R$799  = {contadores[5]}
Comissão entre R$800  - R$899  = {contadores[6]}
Comissão entre R$900  - R$999  = {contadores[7]}
Comissão entre R$1000 - R$5000 = {contadores[8]}''')

Espero ter colocado todos os meu questionamentos de forma clara para que possa ajudar aos senhore(a)s na compreensão das minhas dúvidas.

Caso tenha algo que não tenha ficado claro ou se por alguma falha minha eu possa ter deixado alguma informação ou até mesmo questionamento incompreensível, por favor, não hesite em me questionar.

De ante mão quero agradecer logo todos o que puderem colaborar de alguma forma com o crescimento do meu conhecimento.

Atenciosamente,

Leonardo Sampaio.



Regis Godoy Barros

unread,
May 7, 2023, 7:08:10 AM5/7/23
to python...@googlegroups.com
Bom dia Leonardo 
Poderia compartilhar toda a sua lista de exercícios em PDF

Grato

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/0a2fb60e-39eb-45f6-9c77-477da6fafa69n%40googlegroups.com.

Marcelo Valle

unread,
May 7, 2023, 10:30:37 AM5/7/23
to Python Brasil
Leo, você está falando do exercício 16 dessa lista? https://wiki.python.org.br/ExerciciosListas

Por favor confirme, se for eu escrevo uma resposta detalhada quando chegar em casa

Leo

unread,
May 7, 2023, 1:15:21 PM5/7/23
to Python Brasil
Isso Marcelo, ela mesmo.

Leo

unread,
May 7, 2023, 1:16:20 PM5/7/23
to Python Brasil
Regis, a lista que to seguinda a aque ta disponível no site: https://wiki.python.org.br/ListaDeExercicios
Espero que atenda ao seu pedido.

Atenciosamente.

Regis Godoy Barros

unread,
May 7, 2023, 1:22:14 PM5/7/23
to python...@googlegroups.com

Marcelo Valle

unread,
May 7, 2023, 4:16:35 PM5/7/23
to python...@googlegroups.com
Leo, 

Vamos lá. Você achou uma solução para o exercício, parabens. É difícil fazer isso sozinho quando se está aprendendo, então em primeiro lugar, fique feliz e parabenize-se!
A única parte que você não fez foi o requisito "$1000 em diante" - você usou um valor máximo de 5000.

Sugestões de melhorias:

  1. Você  não está usando `randint`, pode remover do import
  2. Você não está usando a variável `vendedores`, pode removê-la. Idem variável `rank`
  3. A variável `comissao` aponta para uma lista de valores, deveria se chamar `comissoes_vendedores` ou algo assim, para maior legibilidade
  4. Na parte dos prints, onde você imprime a tabela final, você poderia ter gerado os valores com um loop for:
    print("Tabela de pagamento de comissões")
    for i, (inicio, fim) in enumerate(comissoes):
        print(f"Comissão entre R${inicio}  - R${fim}  = {contadores[i]}")

  5. O seu loop onde você calcula o valor dos contadores está correto e genérico. Num programa "real", se você quisesse mudar a vontade a faixa de valores para cada comissão, poderia deixar exatamente como está. Contudo, todas as comissões entre 200 e 1000 seguem a mesma regra: vão de 100 em 100. Abaixo de 200 é um caso de exceção e acima de 1000  é  outro... Perceba que no enunciado, não diz valor final = 5000, diz "$1000 em diante". Então você poderia ter usado uma lógica como abaixo:
    for comissao_real in comissao:
        if comissao_real >=200 and comissao_real < 1000:
            i = (comissao_real - 200) // 100        
        elif comissao_real >= 1000:
            i = 9
        else:
            continue
        contadores[i] += 1
        # print(f"comissao de {comissao_real} entra na faixa {i}")
  6. Alternativa ao código acima:
    for comissao_real in comissao:
        if comissao_real < 200:
            continue
        i = (comissao_real - 200) // 100            
        max_i = len(contadores) - 1
        contadores[min(i, 9)] += 1
        # print(f"comissao de {comissao_real} entra na faixa {min(i, 9)}")
  7. Ainda outra alternativa, é usar `float('inf')` como valor final ao invés de 5000, ai o codigo fica ainda mais simples:
    for comissao_real in comissao:
        if comissao_real >= 200:    
            contadores[(comissao_real - 200) // 100 ] += 1
            # print(f"comissao de {comissao_real} entra na faixa {i}")

Se quiser tentar melhorar seus códigos usando as dicas acima e enviar uma nova versão para darmos uma olhada, posso dar mais feedback.

Abracos,
Marcelo.

Leo

unread,
May 8, 2023, 7:46:17 AM5/8/23
to Python Brasil
Salve Marcelão! Muito obrigado pelo sua análise e o apoio a minha solução. 

FEITO!
  1. Você  não está usando `randint`, pode remover do import
  2. Você não está usando a variável `vendedores`, pode removê-la. Idem variável `rank`
Quanto  isso "A única parte que você não fez foi o requisito "$1000 em diante" - você usou um valor máximo de 5000." Esse foi  com certeza o causador da minha dor de cabeça, mas também fiquei feliz em perceber o problema, que neste ponto estava me impedindo de correr toda lista. Toda vez que eu corria a lista para poder verificar os valores, quando chegava nesse último valor ele dava um erro da range... e eu acabei descobrindo isso sem querer, pois eu comecei a testar índice por índice. De fato eu não sei dizer se esse era realmente o causador do meu problema, talvez não, mas foi apartir deste ponto eu comecei a raciocinar diferente e a construção do programa voltou a fluir. 

Quanto as outra revisões que você me indicou, eu vou ver um pouco mais tarde pois, agora, eu não consegui entender muito bem. Então, com mais calma, espero compreender melhor.


Cara, mais um vez muito obrigado pela ajuda e eu fiquei tão feliz com resolução desse exercício que nem voltei para revisar hehe.

Atenciosamente, 

Leonardo Sampaio.

Rubens Santo

unread,
Mar 7, 2025, 6:44:26 AMMar 7
to Python Brasil
Eu não estou encontrando mais a lista de exercicios de logica de programação onde posso encontrar?
Essa que estava nesse link:  https://wiki.python.org.br/ExerciciosListas

Em domingo, 7 de maio de 2023 às 11:30:37 UTC-3, Marcelo Valle escreveu:
Reply all
Reply to author
Forward
0 new messages