Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] Interação com o usuário - Parte 3

Avalie este Post de Blog

Antes de prosseguir leia os artigos anteriores aqui



No post anterior eu falei que usar a função input não é lá muito seguro, porém a função raw_input retorna somente strings, como resolver esse problema??

Interação com o usuário



A solução para nosso impasse é aprender a converter strings para outros valores. Vamos logo com isso então...

Vamos primeiro fazer o seguinte teste:
Código :
>>> n1 = raw_input("Digite o primeiro numero: ")
Digite o primeiro numero: 12
>>> print n1, type(n1)
12 <type 'str'>
>>>
Como disse, o raw_input retorna sempre uma strings, vamos ver agora como se dá a conversão:
Código :
>>> s1 = raw_input("Digite o primeiro numero: ")
Digite o primeiro numero: 12
>>> n1 = int(s1)
>>> print n1, type(n1)
12 <type 'int'>
>>>
Pronto, agora temos um inteiro. Vamos ver como seria o código do programa para somar dois numeros:
Código :
s1 = raw_input("Digite o primeiro numero: ")
s2 = raw_input("Digite o segundo numero: ")
soma = int(s1) + int(s2)
print 'Resultado: %(s1)s + %(s2)s = %(soma)d'%locals()
Exemplo de execução:
Código :
$ python soma.py
Digite o primeiro numero:10
Digite o segundo numero: 20
Resultado 10 + 20 = 30
Esse tipo de tratamento só tem um problema:
Código :
$ python soma.py
Digite o primeiro numero:10.5
Digite o segundo numero: 20
Resultado 10 + 20 = 30
Como nós especificamos que queremos inteiros (int) ele descarta a parte fracionária. O que podemos fazer é converter para ponto flutuante (float), o programa ficaria assim:
Código :
 s1 = raw_input("Digite o primeiro numero: ")
s2 = raw_input("Digite o segundo numero: ")
soma = float(s1) + float(s2)
print 'Resultado: %(s1)s + %(s2)s = %(soma)f'%locals()
Executando o programa teremos:
Código :
$ python soma.py
Digite o primeiro numero: 10.5
Digite o segundo numero: 7.2
Resultado: 10.5 + 7.2 = 17.700000
Pronto, temos números com ponto flutuante! E o que acontece se tentarmos executar o programa informando argumentos inválidos? Vamos ver...
Código :
$ python soma.py
Digite o primeiro numero: teste
Digite o segundo numero: 12
Traceback (most recent call last):
  File "soma.py", line 3, in <module>
    soma = float(s1) + float(s2)
ValueError: invalid literal for float(): teste
 
$ python soma.py
Digite o primeiro numero: [1,2, 3]
Digite o segundo numero: 12
Traceback (most recent call last):
  File "soma.py", line 3, in <module>
    soma = float(s1) + float(s2)
ValueError: invalid literal for float(): [1,2, 3]
Como vemos nosso programa está "protegido" dessas eventualidades!


Desafio
Pra quem ainda acompanha isso, deixo um outro desafio, fazer um programa que calcula a divisão de dois números e imprime o seu resultado. Lembrando, testem o programa com diversas entradas. Tem um pequeno detalhe nesse programa que vocês vão precisar resolver. No próximo post vou falar sobre isso.

Até mais...

Atualizado 01-09-2010 em 09:11 por Magnun

Categorias
Python , Artigos , Artigos , Cursos , Curso de Python

Comentários

Página 2 de 2 PrimeiroPrimeiro 12
  1. Avatar de tony130666
    Eu de novo. Estive comentando nos posts anteriores. Estou bastante empolgado. Legal que aqui já teve comentários com o tratamento de erro.
    Try --> except:
    .... "Erro"
    Vamos que vamos.
  2. Avatar de MarcioSa
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-


    n1 = raw_input('Entre com um número: ')
    n2 = raw_input('Entre com um número: ')




    print '%s / %s = %i' %(n1, n2, int(n1)/int(n2))
  3. Avatar de MarcioSa
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-


    try:
    n1 = raw_input('Entre com um número: ')
    n2 = raw_input('Entre com um número: ')




    print '%s / %s = %f' %(n1, n2, float(n1)/float(n2))
    except:
    print('Erro! Verifique os números digitados')
Página 2 de 2 PrimeiroPrimeiro 12

+ Enviar Comentário