Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

noguche

Execução do código

Mensagens Recomendadas

noguche

Boa tarde,

Estou com dificuldades em perceber porque o meu código não está a ser executado até o fim, alguém poderia me ajudar por favor? Ao executá-lo ele só imprimi o valor do IF ou do primeiro ELIF os demais ele está a ignorar. Me perdoem a pergunta mas a minha dificuldade é por estar a aprender a programar agora.

Obrigado

conta = float(input("Por favor digite o valor da conta: "))
print()
nome1 = input("Por favor digite o seu nome: ")
valor1 = float(input("Digite o seu valor para pagamento: "))
nome2 = input("Por favor digite o seu nome: ")
valor2 = float(input("Digite o seu valor para pagamento: " ))
nome3 = input("Por favor digite o seu nome: ")
valor3 = float(input("Digite o seu valor para pagamento: " ))
print()
total_user = valor1 + valor2 + valor3
print("O montante disponível para pagamento é de € %.2f" %total_user)
media = conta / 3
print("A média para pagamento é € %.2f" %media)
if total_user < conta:
sub_total = total_user - conta
print("O subtotal apresenta um valor NEGATIVO de € %.2f" %sub_total)
elif total_user > conta:
sub_total = total_user - conta
print("O subtotal apresenta um valor POSITIVO de € %.2f" %sub_total)
elif valor1 < media:
diferenca = media - valor1
print(" %s você tem uma diferença negativa no valor de € %.2f" % (nome1,diferenca))
elif valor2 < media:
diferenca = media - valor2
print(" %s você tem uma diferença negativa no valor de € %.2f" % (nome2,diferenca))
elif valor3 < media:
diferenca = media - valor3
print(" %s você tem uma diferença negativa no valor de € %.2f" % (nome3,diferenca))
else:
print("Não existe diferença nos valores apresentados.")

Editado por noguche

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

noguche,

É preciso perceberes que dentro de uma série de if..elif..else apenas uma das ramificações poderá ser escolhida. Por esse motivo, quando o teu programa entra pelo ramo do if, nenhum dos elif será considerado. Por outro lado, quando entra para um dos elif, os restantes serão ignorados.

Os ramos são testados pela ordem em que aparecem no código (importante).

Por outras palavras, se introduzires valores que resultem em total_user < conta, o teu programa irá apresentar a mensagem sobre o valor negativo e ignora todas as condições seguintes até ao final da estrutura if..elif..else (ou seja, salta para logo após o final do ramo do else).

Portanto, as condições onde verificas valor1 a valor3 devem ser condições independentes (ie. com if e não com elif).

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
noguche

Boa tarde,

Em primeiro lugar muito obrigado pela atenção e ajuda dos amigos!

Após as respostas que me prestaram fiz as modificações no código e agora o resultado é o esperado, partilho abaixo o código com a devida alteração:

1º - Inserir valor total da conta

2º - Inserir nomes

3º - Inserir valores

4º - Somar valores

5º - Apresentar sub-total Positivo ou negativo

6º - Apresentar o valores e o respectivo nome que está em negativo

conta = float(input("Por favor digite o valor da conta: "))
print()
nome1 = input("Por favor digite o seu nome: ")
valor1 = float(input("Digite o seu valor para pagamento: "))
nome2 = input("Por favor digite o seu nome: ")
valor2 = float(input("Digite o seu valor para pagamento: " ))
nome3 = input("Por favor digite o seu nome: ")
valor3 = float(input("Digite o seu valor para pagamento: " ))
print()
total_user = valor1 + valor2 + valor3
print("O montante disponível para pagamento é de € %.2f" %total_user)
media = conta / 3
print("A média para pagamento é € %.2f" %media)
diferenca = media - valor1
print("")
if total_user < conta:
sub_total = total_user - conta
print("O subtotal apresenta um valor NEGATIVO de € %.2f" %sub_total)
if total_user > conta:
sub_total = total_user - conta
print("O subtotal apresenta um valor POSITIVO de € %.2f" %sub_total)
elif valor1 < media:
diferenca = media - valor1
print("%s você tem uma diferença negativa no valor de € %.2f" % (nome1,diferenca))
elif valor2 < media:
diferenca = media - valor2
print("%s você tem uma diferença negativa no valor de € %.2f" % (nome2,diferenca))
elif valor3 < media:
diferenca = media - valor3
print("%s você tem uma diferença negativa no valor de € %.2f" % (nome3,diferenca))
else:
print("Não existe diferença nos valores apresentados.")

Editado por noguche

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

noguche, tens a certeza que o teu código está correcto? (presta atenção aos if e elif).

O que acontece se...

  • ...o valor total for 30 e todos pagarem apenas 9?
  • ...o valor total for 20 e todos pagarem 10?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.