iniciante

113 views
Skip to first unread message

MrcFoz

unread,
Nov 19, 2012, 10:24:16 AM11/19/12
to python...@googlegroups.com
Estou começando a aprender e não tenho uma necessidade de desenvolver nada, então estou  só "praticando" com uma idéia.
Calcular o Indice de Massa Corporal de acordo com a Organização Mundial da Saúde.
Minha dúvida neste instante é, quero fazer a chamada e em seguida o input, só isso. 
Se for possível dizer o que estou fazendo de errado, sem mostrar a resposta, acho melhor, assim eu procuro e aprendo.

Não sei se o correto é colocar o código aqui, mas lá vai:

def imc (peso, altura):
        ''' (float, number) -> float, str
        Calcula o Indice de Massa Corporal de acordo com o a Organização Mundial
        da Saúde
        >>> imc (62 , 161)
        23.91
        >>> imc (82 , 174)
        27.08
        >>> imc (62 , 185)
        18.11
        '''
# Objetivos:
#       1 - entrada via input do peso a ser utilizado
#       2 - entrada via input da altura a ser utilizada
#       3 - Calculo do IMC
#       4 - Retorno do IMC e classificação da OMS
        
        peso = int (input ("Entre com o seu peso em kkk.ggg: "))
        altura = int (input ("entre com a sua altura em cm: "))
        resul = peso / (altura**2)
        result = (resul * 10000) # o valor que retorno em resul vem com muitas casas decimais
                
        if (result < 17):
           return result , 'IMC = Voce está muito Abaixo do Peso'
        elif (result > 17.1) and (result <= 18.49):
           return result, 'IMC = Voce está Abaixo do Peso'
        elif (result >= 18.5) and (result <= 24.99):
           return result , 'IMC = Voce está no Peso Normal'
        elif (result >= 25) and (result <= 29.99): 
           return result , 'IMC = Voce esta Acima do Peso'
        elif (result >= 30) and (result <= 34.99):
            return result , 'IMC = Voce esta em obesidade I'
        elif (result >= 35) and (result <= 39.99):
            return result , 'IMC = Voce esta em Obesidade II - Severa'
        else:
            return result , 'IMC = Voce esta em Obesidade III - Mórbida'

Alysson Gonçalves de Azevedo

unread,
Nov 19, 2012, 10:40:17 AM11/19/12
to python...@googlegroups.com
Não sei se entendi direito, mas vc quer primeiro digitar os valores e depois chamar a função IMC, certo?
Se sim, tira a parte que vc preenche a variável peso e altura dali do começo da função, pois esses valores devem ser passados por parâmetro:
def imc (peso, altura):
Isso quer dizer que quando vc chamar "imc (62 , 161)", o valor da variável peso é 62 e altura é 161.
Essa parte dos input sai de dentro função mas você pode manter isso do lado de fora. Tipo assim:

def imc ...
    #aqui a função que vc já tem, sem os inputs de peso e altura

    return result , 'IMC = Voce esta em Obesidade III - Mórbida'
#dae acaba a função

#dae no final do arquivo declara duas variaveis que vai receber o peso e altura
variavel_peso = input do peso
variavel_altura = input da altura
# e por fim vc escuta a função passando por parametro as variaveis
imc (variavel_peso, variavel_altura)

Obs: repare que o nome das variaveis é só um exemplo, vc pode colocar o que vc quiser no lugar.




Alysson Gonçalves de Azevedo - (11) 984 917 730

"É curioso como as pessoas ficam confusas quando a frase não terminam do jeito que elas periquito."



--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

Diego Manenti Martins

unread,
Nov 19, 2012, 10:43:02 AM11/19/12
to python...@googlegroups.com
Algumas dicas

1) Tu define uma função com dois parametros (peso e altura) e depois
pede peso e altura via input
2) É pedido um numero com casa decimal kkk.ggg e convertido para int
3) A divisão de inteiro por inteiro retorna um inteiro até python 2.7.
Geralmente o peso é menor que o quadrado da altura :) então o
resultado vai ser sempre zero.
4) Use raw_input ao invés de input
5) O cálculo de imc usa a altura em metros, não?

2012/11/19 MrcFoz <mrc...@gmail.com>:
> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com



--
diego

Rodrigo Sousa

unread,
Nov 19, 2012, 11:51:40 AM11/19/12
to python...@googlegroups.com
De acordo com o outro tópico, o Mrc tá usando Python 3, então usar input() é o certo mesmo.


2012/11/19 Diego Manenti Martins <dmma...@gmail.com>



--
Rodrigo Sousa
+55 21 8563-8825 -  +55 21 3435-1769

MrcFoz

unread,
Nov 19, 2012, 5:05:21 PM11/19/12
to python...@googlegroups.com
Como disse estou aprendendo, então na versão 1, a entrada das duas variáveis eram na chamada da função. Depois fiquei conhecendo input, e resolvi usar, mas não consegui chamar a função sem um valor e depois pedir os inputs.

Agora acho que entendi, input fora da função, alterando para:
def imc (input):
        resul = peso / (altura**2)
        result = (resul * 10000)
                
        if (result < 17):
          return print (('Seu IMC é:'),result ('IMC = Voce está muito Abaixo do Peso'))
        elif (result > 17.1) and (result <= 18.49):
           return print (('Seu IMC é:'),result ('IMC = Voce está Abaixo do Peso'))
       .
       .
        else:
            return print (('Seu IMC é:'),result ('IMC = Voce esta em Obesidade III - Mórbida'))
                
peso = float (input ("Entre com o seu peso em kkk.ggg: "))
altura = int (input ("entre com a sua altura em cm: "))

Resumi bem pra não ficar longo. Quando uso o Run Module, dentro do Idle, ele executa os inputs, mas não devolve nada.
Se eu chamo a função imc, ele devolve a posição de memória.

MrcFoz

unread,
Nov 19, 2012, 5:08:14 PM11/19/12
to python...@googlegroups.com
Diego, 
1- era um erro por não saber onde colocar os inputs, já aprendi e alterei.
2- ja alterei para float
3- uso 3.2.3
4- input mesmo, certo?
5- o imc usa centímetros, isso esta correto.

Alysson Gonçalves de Azevedo

unread,
Nov 19, 2012, 9:24:20 PM11/19/12
to python...@googlegroups.com
Foz, da forma que você fez não ta errado, afinal, está funcionando "mas"...
Vou sugerir você fazer o seguinte:
  1. Procurar sobre como criar funções usando parâmetros.
  2. Estudar o escopo de variáveis.

No caso ali, você está usando as variáveis peso e altura no escopo global e não esta usando o parâmetro que você definiu (o "input") em momento algum.

Então, você deve criar variáveis "temporárias" para receber o valor do peso e da altura e passar essas variáveis por parâmetro.

Vou colocar aqui como vai ficar:
def imc ( parametro_peso, parametro_altura ):
        resul = parametro_peso / (parametro_altura**2)
        result = (result * 10000)
        [... continua até o final ...]

temp_peso = float (input ("Entre com o seu peso em kkk.ggg: "))
temp_altura = int (input ("entre com a sua altura em cm: "))
imc ( temp_peso, temp_altura )

Obs: esses nomes que eu coloquei "parametro" e "temp" são só pra evidenciar o que é o quê nesse exemplo.



Alysson Gonçalves de Azevedo - (11) 984 917 730

"É curioso como as pessoas ficam confusas quando a frase não terminam do jeito que elas periquito."



MrcFoz

unread,
Nov 21, 2012, 12:33:32 AM11/21/12
to python...@googlegroups.com
Alysson, 
Acho que entendi, dessa forma funcionou como eu esperava, ou queria.
Já estou procurando por mais material para estudar.
Agora vou pensar em coisas novas para implementar e praticar.

Muito obrigado,

Mauricio de Abreu Antunes

unread,
Nov 21, 2012, 6:28:36 AM11/21/12
to python...@googlegroups.com
Estes dias alguém aqui postou um link de um site de cursos lecionados por universidades do exterior.
Então, eu olhei o link e é muito interessante por dois fatores:
1 - A linguagem usada é fácil de entender.
2 - É em vídeo e o pessoal dos fóruns ajuda MUITO.

Estou fazendo mesmo tendo um bom conhecimento de tudo que é apresentado.

Abraço! Se alguém aqui discordar que o curso dado é ruim, por favor, me avise que não repasso mais o link. 
Mauricio de Abreu Antunes
Mobile: (51)930-74-525
Skype: mauricio.abreua

Reply all
Reply to author
Forward
0 new messages