Marcoaajf Postado Abril 19, 2007 Denunciar Share Postado Abril 19, 2007 como testar se o valor atribuido a uma função é um numero inteiro?def funcao(numero): try: numero == ???? except ZeroDivisionError: print ("Isto não é um número!!") pass é alguma coisa como isso??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kakao Postado Abril 19, 2007 Denunciar Share Postado Abril 19, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcoaajf Postado Abril 19, 2007 Autor Denunciar Share Postado Abril 19, 2007 mas como fica isso em uma função? exemplodef eh_numero(valor): try: float(valor) return True pass e aqui vai todo o código???? except: return False seria isso??!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 19, 2007 Denunciar Share Postado Abril 19, 2007 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 retornoCerto? ;)Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcoaajf Postado Abril 19, 2007 Autor Denunciar Share Postado Abril 19, 2007 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!!!!!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 20, 2007 Denunciar Share Postado Abril 20, 2007 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 flutuantee 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 definedExperimente fechar o IDLE e abrí-lo novamente.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcoaajf Postado Abril 20, 2007 Autor Denunciar Share Postado Abril 20, 2007 (editado) 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çãovaleu!!! Editado Abril 20, 2007 por Marcoaajf Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 20, 2007 Denunciar Share Postado Abril 20, 2007 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: breakCerto? ;)Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcoaajf Postado Abril 20, 2007 Autor Denunciar Share Postado Abril 20, 2007 (editado) 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 obrigadoresultado 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 Abril 20, 2007 por Marcoaajf Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 21, 2007 Denunciar Share Postado Abril 21, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcoaajf Postado Abril 21, 2007 Autor Denunciar Share Postado Abril 21, 2007 (editado) 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 Abril 21, 2007 por Marcoaajf Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 luishenrique Postado Abril 21, 2007 Denunciar Share Postado Abril 21, 2007 porque isso não funciona??!!if a == 0: print "zero" else: print a identação incorreta. Faz assim: a = 0 if a == 0: print "zero" else: print aCerto? ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 21, 2007 Denunciar Share Postado Abril 21, 2007 No caso de...calculaNotas(m) ... o erro é porque "m" não foi declarado previamente. Para tratar isso com um try... except você pode fazer: try: calculaNotas(m) except Exception, e: print eCerto? ;)Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcoaajf Postado Abril 22, 2007 Autor Denunciar Share Postado Abril 22, 2007 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) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 23, 2007 Denunciar Share Postado Abril 23, 2007 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 mCapisce? ;)Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcoaajf Postado Abril 23, 2007 Autor Denunciar Share Postado Abril 23, 2007 (editado) 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 Abril 23, 2007 por Marcoaajf Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 23, 2007 Denunciar Share Postado Abril 23, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Marcoaajf
como testar se o valor atribuido a uma função é um numero inteiro?
def funcao(numero):
try:
numero == ????
except ZeroDivisionError:
print ("Isto não é um número!!")
pass
é alguma coisa como isso???
Link para o comentário
Compartilhar em outros sites
16 respostass a esta questão
Posts Recomendados
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.