Jump to content
Fórum Script Brasil
  • 0

[Resolvido] Dúvida em resultado do exercicio.


Acneto

Question

Boa noite.

Estou no começo do aprendizado, tanto na linguagem python quanto em lógica.

Tenho um exercicio que até alterei um pouco por conta, mas a parte em que não alterei e apenas copiei para estudar, algumas partes não estou conseguindo interpretar o funcionamento.

O exercicio é para obter a quantidade de uma area a ser pintada, onde cada litro cobre 6 metros, então teria galão de tinta com 3 litros e lata de tinta com 18 litros, no final fazer com que

saia mais barato misturando galão e lata se necessário.

O programa adiciona 10% a mais na area, então eu faço a area inicial com 65 metros, onde vai para 71 metros, dividido por 6 me resta 12 que seria a quantida de litros a ser usada.

No programa também tem uma parte onde tiro o decimal para deixar um valor redondo como 12 citado a cima.

Vai ter umas linhas com "print("####################", isso é um debug que inventei para ver na hora o retorno das variáveis, só para estudo.

A dúvida em si, se eu tenho 12 litros que é jogado na variável total, neste caso "print ("\n2) Comprar apenas latas de 18 litros")" onde a variável latas vai receber total//18, isso retorna 0.

Mas no meu debug improvisado, latas recebe 1 e total recebe 12, aqui não entendi a lógica ou regra que é aplicada, sendo que uma divisão direta 12//18 retorna 0 no terminal.

Outra dúvida é na etapa em que faz a combinação para obter o melhor preço, não consegui ver claramente a lógica utilizada ali, funciona perfeito, mas fiquei com dúvida

print("\n3) Misturar latas e galões, de forma que o preço seja o menor.")

Estou batendo cabeça nesse exercicio simples porque quero sair dele compreendendo bem o funcionamento, para aplicar em futuros exercicios.

Código completo.

metros = int(input("Digite a area: "))

metros = metros*1.1

print()

print("#################### Metros atual",metros,"Com 10%")

print()

# Inicio Arredondando a área da seguinte maneira.

extra = metros - int(metros) # extra recebe casa decimal de metros.

print()

print("#################### Extra atual",extra)

print()

metros = int(metros) # metros recebe valor inteiro.

# Fim Arredondando a área.

print()

print("#################### Metros inteiro",metros)

print()

area = metros//6 # Area recebe divisão inteira de metros po 6

print()

print("#################### Area atual",area)

print()

litros = 1

total = 1



if extra > 0: # Extra aqui serve para adicionar area caso exista uma sobra na divisão.

area += 1

total = litros * area

print("Litros a usar: ",total)

print()

print("#################### Extra atual",extra)

print()



print ("\n1) Comprar apenas galões de 3 litros")

galao = total//3

if total % 3 > 0:

galao += 1

print()

print("#################### Galao atual",galao)

print("#################### Total atual",total)

print()



print ("Serão necessárias:", galao, "galões")

print ("Obteremos:", galao*3, "litros")

print ("Total: R$", galao*25)

print()

print("#################### total atual",total)

print()

print ("\n2) Comprar apenas latas de 18 litros")

latas = total//18 # Recebe 0 caso o total seja 12 ?

if total % 18 > 0:

latas += 1

print()

print("#################### Latas atual",latas)

print("#################### total atual",total)

print()



print("Serão necessários: ", latas, "latas")

print("Obteremos: ",latas*18, "Litros")

print("Total: R$",latas*80)

print()



print("\n3) Misturar latas e galões, de forma que o preço seja o menor.")

latas = total//18

galoes = 0

litros_restantes = total % 18

print()

print("#################### latas atual",latas)

print("#################### litros restantes atual",litros_restantes)

print()

if litros_restantes <= 3*3:

#Ou seja, o numero de galões necessários seja menor do que três.

galoes = litros_restantes // 3

if litros_restantes % 3 > 0:

galoes += 1



else:

latas += 1

print("#################### galoes atual",galoes)

print("#################### litros restantes atual",litros_restantes)



print ("Serão necessárias:", latas, "lata(s)")

print ("Serão necessários:", galoes, "galão(s)")

print ("Obteremos:", latas*18 + galoes*3, "litros")

print ("Total: R$", galoes*25 + latas*80)
 
Edited by Acneto
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Ola vamos tentar no passo a passo dos resultados:

print("2)")
latas = total//18 # Recebe 0 caso o total seja 12 ? Sim recebe zero
# vc pode fazer o teste no console interativo

if total % 18 > 0: # no console 12 % 18 é 12 então 12 > 0? Sim então latas vai para 1
    latas += 1

#total vai continuar 12 pois ñ tem comandos para alterar

Na parte 3 tem alguns pontos a corrigir

print("\n3) Misturar latas e galões, de forma que o preço seja o menor.")

latas = total//18 #Aqui vc tem o numero de galões ñ de latas

galoes = 0 #Ñ nessessario, na teoria a linha passada ja deu o numero de galões

litros_restantes = total % 18 #isso vc retira um galão do total de litros, oq acontece se vc precisar de 100 litros? Comprar 28 latas?

print()

print("#################### latas atual",latas) # galões, ñ latas

print("#################### litros restantes atual",litros_restantes)

print()

if litros_restantes <= 3:

#Ou seja, o numero de galões necessários seja menor do que três.

    galoes = litros_restantes // 3

if litros_restantes % 3 > 0:

    galoes += 1



else:

    latas += 1

print("#################### galoes atual",galoes)

print("#################### litros restantes atual",litros_restantes)



print ("Serão necessárias:", latas, "lata(s)")

print ("Serão necessários:", galoes, "galão(s)")

print ("Obteremos:", latas*18 + galoes*3, "litros")

print ("Total: R$", galoes*25 + latas*80)

O if da parte 3 você deve arrumar para trabalhar em cima das latas. Tem comentários no código a cima apontando algumas correções

Link to comment
Share on other sites

  • 0

ArteEN, obrigado pela resposta, mas ainda tenho dúvidas nas sujestões.

print("2)")
latas = total//18 # Recebe 0 caso o total seja 12 ? Sim recebe zero
# você pode fazer o teste no console interativo

if total % 18 > 0: # no console 12 % 18 é 12 então 12 > 0? Sim então latas vai para 1
latas += 1

O retorno atual desta parte do código é o seguinte, usando metragem de 65 mts

2) Comprar apenas latas de 18 litros
#################### Latas atual 1 # Então aqui ele recebe o resultado do resto da divisão, recebendo o + 1 latas.
Serão necessários: 1 latas
Obteremos: 18 Litros
Total: R$ 80

Mas na parte 3 fazendo como sujerido o retorno é incorreto, trocando latas por galoes, a resposta final fica com galoes em excesso, onde seria a vantagem ter latas.

Código original.

print("\n3) Misturar latas e galões, de forma que o preço seja o menor.")
latas = total//18
galoes = 0
litros_restantes = total % 18
print("#################### latas atual",latas)

Retorno do código original, Valor de 65 mts.

Serão necessárias: 1 lata(s)
Serão necessários: 0 galão(s)
Obteremos: 18 litros
Total: R$ 80

Valor de 1136 mts

Serão necessárias: 12 lata(s)
Serão necessários: 0 galão(s)
Obteremos: 216 litros
Total: R$ 960

12 latas * 18 = 216 litros

Onde o necessário é 209 litros real.

Fazendo o que você sujeriu.

print("\n3) Misturar latas e galões, de forma que o preço seja o menor.")
galoes = total//18 # Troquei a variável latas por galoes
#galoes = 0 # Comentei galoes
litros_restantes = total % 18
print("#################### galoes atual",galoes) # Aqui é só para ver em tempo real, no código real não precisa, mas segui o padrão.

if litros_restantes <= 3: # Removi o *3

Resultado em 65 mts

#################### galoes atual 0
Serão necessárias: 2 lata(s)
Serão necessários: 0 galão(s)
Obteremos: 36 litros
Total: R$ 160

Com 1136 mts

#################### galoes atual 11
Serão necessárias: 13 lata(s)
Serão necessários: 11 galão(s)
Obteremos: 267 litros
Total: R$ 1315

Mudei as divisões para 3.

galoes = total//3
#galoes = 0
litros_restantes = total % 3
print("#################### galoes atual",galoes)

Resultado em 1136.

#################### galoes atual 69
Serão necessárias: 12 lata(s)
Serão necessários: 1 galão(s)
Obteremos: 219 litros
Total: R$ 985

Ele volta um galão a mais desnecessário.

Desculpa a quantidade de exemplos.

Abraço.

Link to comment
Share on other sites

  • 0

Eu fiz um pequena confusão

você diz latas de 18 litros, eu digo galão de 18 litros , isso me confundiu nas variaveis

Então vamos a logica para o calculo da etapa 3.

Recipiente de 18 litros é mais barato. então começamos o calculo por ele

e depois a parte mais demorada é calcular o restante em latas

total_gal_18 = litros_necessários // 18
resto = litros_necessários % 18

total_latas_3 = resto / 3

if total_latas_3 > int(total_latas_3):
    total_latas_3 = int(total_latas_3) + 1 

Então você tem o total de em recipientes de 18 litros: total_gal_18

O necessário em recipientes de 3 litros: total_latas_3

Basta calcular o valor.

Edited by ArteEN
Link to comment
Share on other sites

  • 0

total_gal_18 = litros_necessários // 18 # Trocado por variável total
resto = litros_necessários % 18  # Trocado por variável total

total_latas_3 = resto // 3  #  deixei divisão real

if total_latas_3 > int(total_latas_3):  # Essa parte do if comparando e recebendo int(total....) não entendi a lógica implantada, se puder esclarecer.
    total_latas_3 = int(total_latas_3) + 1 

Retirei o Else:

Adicionei as linhas a baixo para informar valor. 

print("Serão necessárias:", total_gal_18, "galão(s)")
print("Serão necessários:", total_latas_3, "lata(s)")
print("Obteremos:", total_gal_18*18 + total_latas_3*3, "litros")
print("Total: R$", total_latas_3*25 + total_gal_18*80)

A variável total é quem recebe os litros desde o começo, por isso troquei ela.

Só com essas mudanças que voltou algum resultado, mas não exato, em 65 mts, vantagem é 1 Galão 18 e volta então 4 latas.

Desculpa a demora para responder, muito trabalho fora de hora.

Abraço.

Edited by Acneto
Link to comment
Share on other sites

  • 0

Ola.

A parte do if na linha 6 e 7 é para arredondar o numero de latas.

litros_necessarios = 24.3

total_gal_18 = litros_necessarios // 18 # 1 galão de 18 litros
resto = litros_necessarios % 18 # resta 6.3 litros para serem convertidos em latas

total_latas_3 = resto / 3 # retorna 2.1 latas  # .1 na verdade são .3 litros

if total_latas_3 > int(total_latas_3): # conversão para int desconsidera o quebrado, então 2.1 > 2
    total_latas_3 = int(total_latas_3) + 1 #acrescenta mais uma lata para cobrir os .3 litros que falta para a pintura

Ainda sim, isso ainda tem que ser refinado.

Eu fiz o codigo ao meu estilo, claro ainda da para melhorar em algumas declarações mas não se assuste, ainda estou aprendendo .

##
sep = "-" * 30 # separador para o print


##Recipientes e seus valores
latas_l = 3 #latas de tinta de tres litros e seu valor
latas_v = 25

galao_l = 18 #galões de tinta de 18 litros e seu valor
galao_v = 80

tinta_r = 6 #rendimento da tinta, 1 litro para 6 metros


##Definindo area
metros = float(input("Entre com a area: ")) #pega a area total em float

area = metros * 1.1 #acrescimo de 10 %

area_i = int(area) #convertendo para int desconsidera o quebrado
area_r = area - area_i #pegamos o resto da area

area_total = area_i if area_r == 0 else area_i + 1 #ternario para arredondar o valor


print("\n{}\nArea inicial: {:.2f} metros\nArea acrescida em 10%: {:.2f} metros\nArea final: {:.2f} metros\n\n{}".format(sep, metros, area, area_total, sep))


##Definindo litros a usar
litros_i = area_total // tinta_r #litros nessessarios
litros_f = area_total % tinta_r #sobra

litros_final = litros_i if litros_f == 0 else litros_i + 1 #ternario para arrendodar o valor

print("Litros nessessarios: {}lt\n\n{}".format(litros_final, sep))


##Calcular galões e latas
galao_1 = litros_final // galao_l #galões de 18 litros
galao_2 = litros_final % galao_l #sobra
galao_3 = galao_1 + 1 if galao_2 > 0 else galao_1 #arredonda o numero de galões

latas_1 = litros_final // latas_l #latas de 3 litros
latas_2 = litros_final % latas_l #sobra
latas_3 = latas_1 + 1 if latas_2 > 0 else latas_1 #arredonda o numero de latas


##Calcular valores
#apenas latas 
latas_lt = latas_3 * latas_l #total de litros
latas_ls = latas_lt - litros_final #litros a mais
latas_vt = latas_3 * latas_v #valor total

print("Valor calculado sobre latas de {}lt\nNº de latas: {}\nTotal em litros: {}lt\nSobra: {}lt\nValor: {:.2f}R$\n\n{}".format(latas_l, latas_3, latas_lt, latas_ls, latas_vt, sep))


#apenas galões
galao_lt = galao_3 * galao_l #total de litros
galao_ls = galao_lt - litros_final #litros a mais
galao_vt = galao_3 * galao_v # valor total

print("Valor calculado sobre galões de {}lt\nNº de galões: {}\nTotal em litros: {}lt\nSobra: {}lt\nValor: {:.2f}R$\n\n{}".format(galao_l, galao_3, galao_lt, galao_ls, galao_vt, sep))


#mesclando galões e latas
latas_4 = galao_2 / 3 #calcular latas a partir do resto de galões
latas_5 = int(latas_4) + 1 if latas_4 > int(latas_4) else int(latas_4) #arredondar latas
valor_3 = galao_1 * galao_v #valor de galões
valor_4 = latas_5 * latas_v #valor de latas
valor_5 = valor_3 + valor_4 #soma final

litros_t = galao_1 * galao_l + latas_5 * latas_l #soma de litros entre galão e latas   
sobra = litros_t - litros_final 

print("Valor calculado sobre galões de {}lt e latas de {}lt\nNº de galões: {}\nNº de latas: {}\nTotal em litros: {}lt\nSobra: {}lt\nValor: {:.2f}R$".format(galao_l, latas_l, galao_1, latas_5, litros_t, sobra, valor_5))
Link to comment
Share on other sites

  • 0

ArteEN

Obrigado pelos esclarecimentos, como estou iniciando ainda, falta entender até coisas que você adicionou em seu código, mas já deixei ele separado aqui para tentar mesclar com o meu para estudo.

A dúvida inicial já está mais esclarecida, então vou seguir o curso que baixei, e assim que tiver dúvida volto aqui.

Abraço.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...