Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Erros com IF


Guilherme Web

Question

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)

Edited by Guilherme Web
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 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
      652.1k
×
×
  • Create New...