Jump to content
Nunaixan

Programa para loja

Recommended Posts

Nunaixan

Boa tarde,

Venho aqui apresentar-vos uma dúvida que tive hoje quando estava a fazer um programa para resolver o seguinte exercício:

Exercício:

A store is having a sale. They’re giving 10 percent off purchases of $10 or lower, and 20

percent off purchases of greater than $10. Write a program that asks the purchase

price and displays the discount (10% or 20%) and the final price.

A minha resolução para o exercício:

print "Sistema de compras da loja VA"

preco = float (raw_input ("Preço do produto: ") )
if 0 < preco <= 10.0:
    desconto = preco * 10 /100
    print "Preço inicial: ",preco,"€"
    print "Desconto: ",desconto,"€ (10% do inicial)"
    print "Total a pagar: ",preco - desconto,"€"
if preco > 10:
    desconto = preco * 20 /100
    print "Preço inicial: ",preco,"€"
    print "Desconto: ",desconto,"€ (20% do inicial)"
    print "Total a pagar: ",preco - desconto,"€"
else:
    print "Quantia inválida."

print "Obrigado pela preferência."

Quando fiz correr o programa para ver se não havia erros o resultado foi:

Sistema de compras da loja VA

Preço do produto: 2

Preço inicial:  2.0 €

Desconto:  0.2 € (10% do inicial)

Total a pagar:  1.8 €

Quantia inválida.

Obrigado pela preferência.

A minha dúvida é o porquê de o programa mostrar a mensagem "Quantia inválida" quando o preço  que eu introduzi é maior que 0 ?

Obrigado por ter lido este post e se souber o porquê desta situação disponha.

Share this post


Link to post
Share on other sites
KTachyon

Tens um if e depois tens outro if. O que queres é:

print "Sistema de compras da loja VA"

preco = float (raw_input ("Preço do produto: ") )
if 0 < preco <= 10.0:
    desconto = preco * 10 /100
    print "Preço inicial: ",preco,"€"
    print "Desconto: ",desconto,"€ (10% do inicial)"
    print "Total a pagar: ",preco - desconto,"€"
elif preco > 10:
    desconto = preco * 20 /100
    print "Preço inicial: ",preco,"€"
    print "Desconto: ",desconto,"€ (20% do inicial)"
    print "Total a pagar: ",preco - desconto,"€"
else:
    print "Quantia inválida."

print "Obrigado pela preferência."


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Nunaixan

KTachyon então o que está a dizer é que em python só posso usar um "if" e que os comandos seguintes têm de começar com "elif". Assim o "else" será usado apenas quando nenhuma das condições anteriores for satisfeita.

Estou certo?

Share this post


Link to post
Share on other sites
jpedro20

Sim. Se tu definires algo como:

if i > 10:
    ...
if 0 < i <10 :
    ....

ele vai verificar se o i é maior que 10 e depois verifica se está entre 0 e 10.

Como o KTachyon colocou, quando uma condição se verificar, já não vai às restantes.

Share this post


Link to post
Share on other sites
Nunaixan

Sim mas se eu escolhesse um valor maior que 10 este erro já não acontecia:

Sistema de compras da loja VA

Preço do produto: 19

Preço inicial:  19.0 €

Desconto:  3.8 € (20% do inicial)

Total a pagar:  15.2 €

Obrigado pela preferência.

(Foi gerado com o meu código inicial)

Daí a minha indignação.

Share this post


Link to post
Share on other sites
pedrosorio

Sim mas se eu escolhesse um valor maior que 10 este erro já não acontecia:

(Foi gerado com o meu código inicial)

Daí a minha indignação.

Não fiques indignado :)

Quando tens um if, depois podes ter:

- elif

- else

- fim da condição if

Ou seja, se a seguir ao primeiro if não tens elif nem else, ele considera que acabou ali o "if" e continua o programa de forma independente. O que isto significa na prática é que o teu programa é:

if 0 < preco <= 10.0:
     etc.
     etc.

------------- continuação do programa de forma independente

if preco > 10:
    etc.
    etc.
else:
    etc.
    etc.

Percebes agora o funcionamento do teu programa?


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Nunaixan

Agora sim está tudo a funcionar e o mais importante, porque isto é um exercício: passei a conhecer (melhor) a estrutura das "condições" em python.

Muito obrigado aos três (pedrosorio, KTachyon e jpedro20) por me terem ajudado a perceber aquilo que estava a falhar no meu programa e de me explicarem o porquê.

Espero que este tópico possa ajudar futuros programadores que venham a ter a mesma dúvida.  :cheesygrin:

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.