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

Como Testar Se O Valor Atribuido A Uma Função é Um Numero Inteiro?


Marcoaajf

Pergunta

16 respostass a esta questão

Posts Recomendados

  • 0

Poderia ser algo assim:

def eh_inteiro(numero):
    if int(numero) == numero:
        return True
    else:
        return False

numero = 8.0
if eh_inteiro(numero):
    print numero, 'é inteiro'
else:
    print numero, 'não é inteiro'
Ou para saber se um determinado valor pode ser convertido:
def eh_numero(valor):
    try:
        float(valor)
        return True
    except:
        return False
        
valor = 'x'
if eh_numero(valor):
    print '"%s" é um numero' % valor
else:
    print '"%s" não é um numero' % valor

Link para o comentário
Compartilhar em outros sites

  • 0

Você pode usar a função type() que retorna o tipo de um determinado objeto:

def funcao(numero):
    if not (type(numero) in [int, float]):
        raise ValueError("Você deve informar um valor inteiro ou de ponto flutuante")

    # aqui vai o resto do código
    
    return retorno

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

você é uma lenda viva!!!!!!!!!!

a dúvida ainda fica por conta do código. eu coloquei este código no exercício mas quando eu digito calculaNotas(marco) ele dá erro!! ele não mostra a msg.... e outra coisa... como você coloca no final "return retorno" e eu coloco no código e ele "roda"?? da onde saiu esse retorno?? cara o python tá me deixando doido porque tá cheio de coisas que a gente não cria, instancia, chama dll, chama herança.... estou ficando maluco!!!!!!!!

Link para o comentário
Compartilhar em outros sites

  • 0
você é uma lenda viva!!!!!!!!!!

a dúvida ainda fica por conta do código. eu coloquei este código no exercício mas quando eu digito calculaNotas(marco) ele dá erro!! ele não mostra a msg....

Não, porque ele não sabe o que é marco se este não tiver sido utilizado antes.

>>> calculaNotas(marco)
Resulta em:
NameError: name 'marco' is not defined
Já:
>>> marco = "a"
>>> calculaNotas(marco)

Resulta em:

ValueError: Você deve informar um valor inteiro ou de ponto flutuante

e outra coisa... como você coloca no final "return retorno" e eu coloco no código e ele "roda"?? da onde saiu esse retorno?? cara o python tá me deixando doido porque tá cheio de coisas que a gente não cria, instancia, chama dll, chama herança.... estou ficando maluco!!!!!!!!
Você deve ter usado "retorno" em algum lugar, talvez no próprio interpretador ativo. Do contrário apareceria o erro:
NameError: global name 'retorno' is not defined

Experimente fechar o IDLE e abrí-lo novamente.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

def calculaNotas(valor):
'''Calcula o valor das notas'''
notas = [100, 50, 10, 5, 1]
for nota in notas:
x = valor/nota
if x > 0:
print "%i nota(s) de %i reais: " % (x, nota)
valor = valor % nota
if valor <= 0: break[/codebox]

neste código onde eu coloco o Try..except e onde eu colocaria o

[codebox]if not (type(numero) in [int, float]):
raise ValueError("Você deve informar um valor inteiro ou de ponto flutuante")

na realidade o "calculaNotas(marco)" nada mais foi que uma suposição de um usuario digitar algo que não seja numeros inteiros. até foi bom acontecer porque fiquei duvidoso com relação a tratamento de erros de operação

valeu!!!

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

  • 0

Primeiro caso (try... except):

def calculaNotas(valor):
    '''Calcula o valor das notas'''
    try:
        notas = [100, 50, 10, 5, 1]

        for nota in notas:
            x = valor/nota
            if x > 0:
                print "Quantidade de nota(s) de %i reais: %i" % (nota, x)
                valor = valor % nota
            if valor <= 0: break
    except Exception, erro:
        print "Ocorreu um erro: %s" % erro
Segundo caso (usando type() e raise):
def calculaNotas(valor):
    '''Calcula o valor das notas'''
    if not (type(valor) in [int, float]):
        raise ValueError("Você deve informar um valor inteiro ou de ponto flutuante")

    notas = [100, 50, 10, 5, 1]

    for nota in notas:
        x = valor/nota
        if x > 0:
            print "Quantidade de nota(s) de %i reais: %i" % (nota, x)
            valor = valor % nota
        if valor <= 0: break

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Graymalkin, só tenho que te agradecer, foi muito bom as "aulas " que você ministrou através dos códigos e das duvidas.

Todos os códigos funcionaram maravilhosamente bem mas fiquei um pouco decepcionado com relação ao tratamento de erros(acredito que a minha falta de conhecimento..) porque vi que não podemos tratar um erro inesperado, todo o erro tem que ser previsto e isso (sabendo que o operador é um ser humano) é quase impossivel de prever. acredito que a linguagem seja para funcionamento restrito a programadores e/ou conhecedores e por isso não precisa destes cuidados. vou continuar testando códigos que estou encontrando na net e na script Brasil (para abrir minha cabeça...) e quero depois estudar o Python -GTK por ser visual... se você puder (e tiver tempo) mande exercícios e exemplos para que eu firme na linguagem... com certeza você é um grande conhecedor e incentivador da mesma. muito obrigado por tudo!! vou continuar por aqui "espiando" e tentando aprender mais.

grande abraço e novamente obrigado

resultado do tratamento de erro. sem "avisar" que é uma string...

calculaNotas(m)

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    calculaNotas(m)
NameError: name 'm' is not defined
agora "avisando" que é uma string...
calculaNotas('m')
Ocorreu um erro: unsupported operand type(s) for /: 'str' and 'int'

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

  • 0
Graymalkin, só tenho que te agradecer, foi muito bom as "aulas " que você ministrou através dos códigos e das duvidas.

De nada. :)

Todos os códigos funcionaram maravilhosamente bem mas fiquei um pouco decepcionado com relação ao tratamento de erros(acredito que a minha falta de conhecimento..) porque vi que não podemos tratar um erro inesperado, todo o erro tem que ser previsto e isso (sabendo que o operador é um ser humano) é quase impossivel de prever.

O meu último exemplo trata qualquer erro que ocorra. Isso porque a classe Exception é mãe de todas as exceções que possam acontecer. Mas, se você fala do exemplo...

resultado do tratamento de erro. sem "avisar" que é uma string...

calculaNotas(m)

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    calculaNotas(m)
NameError: name 'm' is not defined
agora "avisando" que é uma string...
calculaNotas('m')
Ocorreu um erro: unsupported operand type(s) for /: 'str' and 'int'

... o comportamento está correto. Imagine você fazer um programa em Delphi sem declarar uma variável? Ele nem mesmo vai poder ser compilado. É o mesmo caso acima. Sendo que mesmo assim ainda dá pra tratar este erro (usando um try... except do lado de fora).

acredito que a linguagem seja para funcionamento restrito a programadores e/ou conhecedores e por isso não precisa destes cuidados. vou continuar testando códigos que estou encontrando na net e na script Brasil (para abrir minha cabeça...) e quero depois estudar o Python -GTK por ser visual... se você puder (e tiver tempo) mande exercícios e exemplos para que eu firme na linguagem... com certeza você é um grande conhecedor e incentivador da mesma. muito obrigado por tudo!! vou continuar por aqui "espiando" e tentando aprender mais.

Dê uma olhada no site http://www.pythonbrasil.com.br/. Tem um ótimo conteúdo lá, e em português. Inclusive tem artigos meus lá também.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

O meu último exemplo trata qualquer erro que ocorra. Isso porque a classe Exception é mãe de todas as exceções que possam acontecer. Mas, se você fala do exemplo...

calculaNotas('m')
Ocorreu um erro: unsupported operand type(s) for /: 'str' and 'int'
... o comportamento está correto. Imagine você fazer um programa em Delphi sem declarar uma variável? Ele nem mesmo vai poder ser compilado. É o mesmo caso acima. Sendo que mesmo assim ainda dá pra tratar este erro (usando um try... except do lado de fora).
como seria esse try?? eu não consegui fazer, por isso fiquei na duvida sobre o tratamento de erros... porque isso não funciona??!!
if a == 0:
        print "zero"
    else:
        print a
ou então isso??
def cal(a):
    a = 2
    if a == 0:
        print "zero"
        else:
            print (a)

cara, era identação!!!! é mole??!!!

def maiorMenor(a, b):
if a > b:
print "%i é maior que %i" %(a, b)
else:
print "%i é menor que %i" % (a, b)[/codebox]

esse eu fiz sozinho (eu sei que você vai rir..) depois que entendi... agora só falta entender o Try..Except...

Valeu Graymalkin!!!!!!!!!!!!!!!!!!

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

  • 0

neste caso o try ..except fica fora da função!! eu queria algo como : try (é inteiro? não é?) except (se não conseguir faça isso), e não importa o que ele é!! no Delphi o try..except faz exatamente isso! ele tenta se não deu ele faz o que foi estabelecido no except (ou finaly.. não faz nada)

Link para o comentário
Compartilhar em outros sites

  • 0
neste caso o try ..except fica fora da função!! eu queria algo como : try (é inteiro? não é?) except (se não conseguir faça isso), e não importa o que ele é!! no Delphi o try..except faz exatamente isso! ele tenta se não deu ele faz o que foi estabelecido no except (ou finaly.. não faz nada)

Mas é a mesma coisa! Só que no Delphi você *não* tem como usar uma variável "m" *sem* ter declarado a mesma, tem? Em Python sim, e é justamente este o caso. Se "m" for uma string e você usar a função, o try... except dentro dela vai detectar o problema. Só que se você passar um "m" que *não* foi definido anteriormente, o erro ocorre ao chamar a função (ela nem mesmo chega a ser executada). Se você fizer...

m = 200
calculaNotas(m)
... é o mesmo que...
calculaNotas(200)
... certo? E se você fizer...
m = 'teste'
calculaNotas(m)
... é o mesmo que...
calculaNotas('teste')
... correto? Agora se você simplesmente fizer...
calculaNotas(m)
... o que é "m"? O erro ocorre *ao chamar* a função e não dentro dela. Você tem que lembrar que Python é dinamicamente tipado, diferente de Delphi que é estaticamente tipado. Em Delphi se você faz...
var m : Integer;
... você só vai poder atribuir um inteiro a "m". Além disso, você não tem como usar "m" sem tê-lo declarado. Em Python você pode usar "m" a qualquer momento, desde que a ele já tenha sido atribuído um valor anteriormente:
print m # -> vai dar erro, já que "m" não existe!
m = 1
print m
m = "teste"
print m
m = True
print m

Capisce? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Capisco, Graymalkin a situação específica do "m" eu entendi desde o inicio o que eu me refiro é a digitação de qualquer caracter, numero, letra, código Jedi, etc.. eu queria que o try..except , caso não fosse inteiro.. não fizesse absolutamente nada ou ainda fizesse o que o except mandou fazer... sem nenhuma msg de erro...porque eu faço try..except pra não apresentar mesnagem de erro... é isso que eu queria.. o "m"podia ser "p" ou ainda "," ou "³" que teria que fazer o try não conseguir e o except avisar : "digite numeros inteiros" (mas só vale dentro da função!!)

valeu!!!

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

  • 0

Mas, no caso...

def calculaNotas(valor):
    '''Calcula o valor das notas'''
    try:
        notas = [100, 50, 10, 5, 1]

        for nota in notas:
            x = valor/nota
            if x > 0:
                print "Quantidade de nota(s) de %i reais: %i" % (nota, x)
                valor = valor % nota
            if valor <= 0: break
    except Exception, erro:
        print "Ocorreu um erro: %s" % erro
... ele *está* fazendo o que eu mandei no except. Veja ali, fui *eu* que fiz um:
print "Ocorreu um erro: %s" % erro
Se eu colocar um pass ali ao invés do "print '..." ele não vai fazer absolutamente nada, como é o que você quer. Ou seja:
def calculaNotas(valor):
    '''Calcula o valor das notas'''
    try:
        notas = [100, 50, 10, 5, 1]

        for nota in notas:
            x = valor/nota
            if x > 0:
                print "Quantidade de nota(s) de %i reais: %i" % (nota, x)
                valor = valor % nota
            if valor <= 0: break
    except Exception, erro:
        pass
Assim como também poderia ser:
def calculaNotas(valor):
    '''Calcula o valor das notas'''
    try:
        notas = [100, 50, 10, 5, 1]

        for nota in notas:
            x = valor/nota
            if x > 0:
                print "Quantidade de nota(s) de %i reais: %i" % (nota, x)
                valor = valor % nota
            if valor <= 0: break
    except Exception, erro:
        print "Digite um número inteiro!"

Sendo que o melhor, na minha opinião, seria fazer o exemplo acima com a função type(), como coloquei em outro post.

Abraços,

Graymalkin

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,8k
×
×
  • Criar Novo...