Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erros com IF


Guilherme Web

Pergunta

Olá, amigos!

Sou novo no fórum, assim como no Python!

Estava tentando resolver o exercício 13 do Python.org.br, mas encontrei um erro (dois na verdade).

Cheguei no seguinte código:

# -*- coding: utf-8 -*-

altura = float(raw_input("Digite sua altura: "))
sexo   = raw_input("Digite seu sexo [M/F]: ").capitalize()
peso   = float(raw_input("Digite seu peso: "))

def classificacao_peso(real, ideal):
    if real < ideal:
        return "Peso abaixo do ideal!"
    elif real == ideal:
        return "Seu peso está ideal!"
    elif real > ideal:
        return "Peso acima do ideal!"

if sexo != "M" and sexo != "F" and not sexo.strip():
    print "Digite uma opção válida!"
elif sexo == "M":
    ideal = (72.7 * altura) - 58
    print "Peso ideal masculino: ", ideal 
    print classificacao_peso(peso, ideal)
elif sexo == "F":
    ideal = (62.1 * altura) - 44.7
    print "Peso ideal feminino: ", ideal
    print classificacao_peso(peso, ideal)
Primeiro que eu não sabia que a função tinha que ser definida antes da primeira chamada em Python, perdi um tempo nisso hehehhe Mas o erro é o seguinte: na função que eu defini, não consigo fazer com que passe pelo 1º elif (elif real == ideal:). Imagino que tenha algo haver com os números de ponto flutuante. Penso que como usei a instrução print, o Python está exibindo o valor amigável da variável ideal, mas esse variável na verdade tem outro valor "não amigável". Só que eu não estou sabendo como limitar as casas decimais na hora que eu atribui à variável ideal... Ou seja:
Digite sua altura: 1.80 Digite seu sexo [M/F]: M Digite seu peso: 72.86 Peso ideal masculino: 72.86 Peso abaixo do ideal!
Um outro problema que estou tendo é em relação ao primeiro if (no escopo global). Aparentemente a única expressão que está sendo lida é a not sexo.strip(). Pois se eu digitar no campos sexo "whatever", ele não exibe a mensagem de erro:
Digite sua altura: 1.80 Digite seu sexo [M/F]: whatever Digite seu peso: 180
Se alguém puder me ajudar! Bom final de anos para todos! ----------------------------------- Fiz uma modificação, não sei qual a melhor, mas ainda não funciona:
# -*- coding: utf-8 -*-

def classificacao_peso(real, ideal):
    if real < ideal:
        return "Peso abaixo do ideal!"
    elif real == ideal:
        return "Seu peso está ideal!"
    elif real > ideal:
        return "Peso acima do ideal!"

sexo = raw_input("Digite seu sexo [M/F]: ").capitalize()
if sexo != "M" and sexo != "F" and not sexo.strip():
    print "Digite uma opção válida!"
else:
    altura = float(raw_input("Digite sua altura: "))
    peso   = float(raw_input("Digite seu peso: "))

    if sexo == "M":
        ideal = (72.7 * altura) - 58
        print "Peso ideal masculino: ", ideal 
        print classificacao_peso(peso, ideal)
    elif sexo == "F":
        ideal = (62.1 * altura) - 44.7
        print "Peso ideal feminino: ", ideal
        print classificacao_peso(peso, ideal)

Editado por Guilherme Web
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Obrigado pela resposta Jhonas, mas isso ainda não explica muito o porque que não está passando por "elif real == ideal:", e porque if sexo != "M" and sexo != "F" não faz a devida verificação...

Você sabe dizer como eu limito as casas decimais (para duas) nas duas atribuições da variável "ideal"?

Obrigado pela resposta novamente!

Link para o comentário
Compartilhar em outros sites

  • 0
Você sabe dizer como eu limito as casas decimais (para duas) nas duas atribuições da variável "ideal"?
Voce leu a apostila ????

4.1 Manipulando Strings

Existe também um recurso conhecido como operador %, que serve para formatar as

strings, basicamente são três os tipos de formatação que temos:

• %s - Serve para substituir string;

• %d - Serve para substituir números inteiros em uma frase destinada a um print;

• %f - Serve substituir oats (números em aritmética de ponto utuante).

Observação:

As três formatações acima relacionadas são normalmente para aplicações em uma frase destinada a um print.

Exemplo:

>>> compra= 'maçã'

>>> tipo='verde'

4

>>> quilos = 1,5

>>> print 'Maria comprou %f quilos de %s %s .' %(quilos,compra,tipo)

Maria comprou 1,5 quilos de maça verde.

Observação:

Com vimos acima o operador % pode ser utilizado para formatação de números também.

Com ele é possível também determinar a quantidade de números, após a vírgula de um

float.

Exemplo:

>>> num=245.47876749

>>> print '%.2f' %(num)

245.48

Percebemos que Python fez uma aproximação do número real, possibilitando que o

resultado de uma futura operação seja o mais preciso possível.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Tinha lido algumas partes, mas não tinha visto essa. Falha minha, desculpa! :blush:

Quanto a verificação de peso eu consegui! Fiz dessa forma:

ideal = float('%.2f' % ((72.7 * altura) - 58))
ideal = float('%.2f' % ((62.1 * altura) - 44.7))

Mas não consegui aquela parte ainda (if sexo != "M" and sexo != "F" and not sexo.strip():)

Sabe qual é o problema dessa?

Obrigado mais uma vez, Jhonas!

Link para o comentário
Compartilhar em outros sites

  • 0

a estrutura do if é assim

if x < 0:
    ...      x = 0
    ...      print 'Negative changed to zero'
    ... elif x == 0:
    ...      print 'Zero'
    ... elif x == 1:
    ...      print 'Single'
    ... else:
    ...      print 'More'
então voce deve mudar o seu código
altura = float(raw_input("Digite sua altura: "))
    peso   = float(raw_input("Digite seu peso: "))

    if sexo == "M":
        ideal = (72.7 * altura) - 58
        print "Peso ideal masculino: ", ideal 
        print classificacao_peso(peso, ideal)
    elif sexo == "F":
        ideal = (62.1 * altura) - 44.7
        print "Peso ideal feminino: ", ideal
        print classificacao_peso(peso, ideal)
    else:
       print "Digite uma opção válida!"

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...