Validar se o valor digitado é numero dentro de uma função

1,447 views
Skip to first unread message

espaço boxe chinês _treino

unread,
Oct 3, 2017, 4:02:34 PM10/3/17
to Python Brasil
Boa tarde galera,

Estou com uma dúvida durente um processo de validação de informação.

Eu quero que o programa informe para o usuário que ele digitou letra ao ínves de número porém não quero que o programa encerre e sim volte para pergunta

Seria legal aprender a validar só string também.

abaixo a função cadastrar() que desejo forçar o usuário a digitar número sem o programa se encerrar.

def cadastrar():

nome = str(input('Informe o nome do gado => '))
peso = float(input('Informe o peso do gado => '))
gados.append({'nome': nome, 'peso': peso})

Fabio Macedo

unread,
Oct 3, 2017, 5:15:15 PM10/3/17
to python...@googlegroups.com


On 3 October 2017 at 17:02:29, espaço boxe chinês _treino (foliveir...@gmail.com) wrote:

Boa tarde galera,

Estou com uma dúvida durente um processo de validação de informação.

Eu quero que o programa informe para o usuário que ele digitou letra ao ínves de número porém não quero que o programa encerre e sim volte para pergunta

Seria legal aprender a validar só string também.

abaixo a função cadastrar() que desejo forçar o usuário a digitar número sem o programa se encerrar.


# Há outras maneiras de fazer isso, exemplo básico abaixo.

def cadastrar():

nome = str(input('Informe o nome do gado => '))
peso = float(input('Informe o peso do gado => '))

if nome != str:

print(“Você informou numero ao invez de letras:  “)

nome = str(input('Informe o nome do gado => '))

    gados.append({'nome': nome, 'peso': peso})
--
--
------------------------------------
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

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Willie

unread,
Oct 4, 2017, 7:16:50 AM10/4/17
to Python Brasil
Acredito que você esteja usando o python3, nesse caso não é preciso fazer:

nome = str(input('Informe o nome do gado => '))
porque o resultado de "input" no python3 já é um str, basta fazer:
nome = input('Informe o nome do gado => ')
no caso do peso você precisa tentar (try) converter para inteiro, se não conseguir deve perguntar novamente pro usuário e tentar novamente, se não conseguir, perguntar novamente, num loop infinito (while True). Nesse link: https://stackoverflow.com/a/10827097 existe uma solução, você pode tentar adaptar para seu problema, onde tem "print error", você põe o que deseja informar ao usuário.

espaço boxe chinês _treino

unread,
Oct 4, 2017, 10:30:18 AM10/4/17
to Python Brasil
Maravilha, o str eu tirei já e vou dar uma olhada no que mandou, eu pensei no while true, mas como sou "crú" em programação e na linguagem fiquei batendo cabeça rs.

obrigado pela ajuda Willie

Eric Chiesse

unread,
Oct 4, 2017, 10:56:27 AM10/4/17
to python...@googlegroups.com
Versão para validar a entrada numérica:

def inputFloat(caption, errCaption):
    x = None
   
    while True:
        try:
            x = float(input(caption))
            break
        except ValueError:
            print(errCaption)
           
    return x
   
   
def cadastrar(gados):
    nome = input('Informe o nome do gado => ')
    peso = inputFloat('Informe o peso do gado => ', 'Erro: O peso informado deve ser um numero.')

    gados.append({'nome': nome, 'peso': peso})


gados = []
cadastrar(gados)

print(gados)


Eu concentrei o input e validação na função inputFloat. Aí vc passa a string para o usuário fazer input e uma outra string caso ocorra um erro.



---
Eric

--
--
------------------------------------
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:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Linux - Junior Polegato

unread,
Oct 4, 2017, 11:05:42 AM10/4/17
to python...@googlegroups.com
Olá!

        Eu prefiro sempre um modelo de validação além do tipo, isto é, validar o conteúdo também, além de insistir na pergunta, segue um exemplo "linguição" de validação de nome com no mínimo 3 caracteres e peso entre 1 e 500:

gados = []

def cadastrar():
    global gados
    while True:
        nome = input('Informe o nome do gado => ')
        if not nome or len(nome) < 3:
            while True:
                resp = input('Deseja sair [S/N]? ')
                if resp and resp in "Ss":
                    return
                if resp and resp in "Nn":
                    break
            continue
        falha = True
        while falha:
            try:

                peso = float(input('Informe o peso do gado => '))
            except ValueError:
                pass
            else:
                falha = peso < 1 or peso > 500
            while falha:
                resp = input('Deseja sair [S/N]? ')
                if resp and resp in "Ss":
                    return
                if resp and resp in "Nn":
                    break

        gados.append({'nome': nome, 'peso': peso})

cadastrar()

print('-' * 100)
print("gados:", gados)
print('-' * 100)

for gado in gados:
    print("O gado", gado["nome"], "pesa", gado["peso"], "kg")


-- 

[]'s

Junior Polegato

Eric Chiesse

unread,
Oct 4, 2017, 12:34:54 PM10/4/17
to python...@googlegroups.com
Seguindo essa linha o exemplo abaixo fica melhor de manter.
Nele cada validação tem uma função própria e basta colocar a mesma como argumento para validatedInput que já vai funcionar. Inclusive mais de uma validação pode ser usada para cada entrada.
Só tratei a validação e não a condição de saída.

https://gist.github.com/echiesse/2f6391e3f3ffb394b6f3e4fa51566e28


---
Eric

Reply all
Reply to author
Forward
0 new messages