• Conteúdo

03. Entrada e saída do terminal

Relembrando a aula passada...

Vamos começar relembrando o que aprendemos na aula passada com um exercício.

EXERCÍCIO 1

Faça uma função que recebe um número e calcula:

\[f(x) = (-1)^x\]

Para testar, faça um programa que chama a sua função com argumentos diferentes. Mesmo que você tenha certeza que o seu programa está funcionando, é importante testá-lo. Por exemplo, qual é o resultado de \(f(0)\)? E \(f(1)\), \(f(2)\), \(f(-1)\)? Quantos testes você deve fazer para garantir que sua função está correta?

Reflita: o que a sua função faz? Qual seria um nome melhor para esta função?

Exercícios adicionais

Caso você termine o programa acima antes da discussão com a sala, resolva os seguintes exercícios:

Pedindo dados para o usuário

Até agora fizemos programas que, ao serem executados, sempre fazem exatamente a mesma coisa. Seria interessante permitir algum tipo de interação com o usuário. Por enquanto estamos desenvolvendo programas que imprimem valores no terminal, então também vamos utilizar o terminal para receber dados digitados pelo usuário.

Em Python, a função input() pede um texto para o usuário e retorna este texto ao programa. Você pode, por exemplo, guardar esse texto em uma variável para usar em seguida. Teste o seguinte programa no seu computador:

# Pede a cor favorita para o usuário.
cor_favorita = input('Qual a sua cor favorita? ')

# Imprime a cor favorita do usuário.
print(cor_favorita)

O programa acima deve imprimir Qual a sua cor favorita? (note que existe um espaço após a interrogação) no terminal e parar. Nesse momento ele está esperando que o usuário digite algo no terminal. Até que isso aconteça, o programa fica parado na chamada da função input().

Praticando o uso do input

Considere a seguinte função:

1
2
3
4
# Função que soma dois números.
def soma(x, y):
    z = x + y
    return z

Se criarmos um arquivo .py contendo somente esta função, o que você espera que aconteça? Rode seu programa. Ele fez o que você esperava?

O programa acima não vai fazer nada. Nós só estamos definindo a função soma, mas não estamos pedindo para o Python executá-la (ou seja, não estamos chamando a função). O programa a seguir deve imprimir a soma dos números 14 e 28:

1
2
3
4
5
6
7
8
# Função que soma dois números.
def soma(x, y):
    z = x + y
    return z

# Testando nossa função
resultado = soma(14, 28)
print(resultado)

Teste o programa acima e verifique se ele faz o que era esperado.

EXERCÍCIO 2

Ao invés de deixarmos números fixos para testar a função, vamos perguntar para o usuário quais números ele quer somar. Teste o seguinte programa:

# Função que soma dois números.
def soma(x, y):
    z = x + y
    return z

# Lendo os dois números.
a = input('Entre com o primeiro número: ')
b = input('Entre com o segundo número: ')

# Somando os dois números.
c = soma(a, b)
print(c)

Seu programa funcionou? Deu algum erro? Fez o que você esperava? Vamos tentar entender o que está acontecendo.

Lembre-se que a função input() devolve o texto digitado pelo usuário. Na nossa soma, queremos adicionar números, não texto. Vamos tentar entender melhor o que está acontecendo.

Tipos de dados em Python

Vimos na aula passada que podemos guardar qualquer coisa em variáveis no Python. O que nós não discutimos foi que essas "coisas" que podemos guardar nas variáveis possuem tipos específicos. No início vamos trabalhar com 4 tipos básicos:

  • Inteiro (int): um número sem casa decimal. Ex: 34, 96, -123, 45;
  • Float (float): um número real, com "ponto decimal" (também chamamos de "ponto flutuante"). Ex: 3.14, -25.1, 5.0, 5e-1;
  • String (str): texto puro (é representado necessariamente com aspas simples ou duplas). Ex: "Hello, world!", 'Insper', '3.14', '"oi"';
  • Booleano (bool): representam "verdadeiro" (True) e "falso" (False).

EXERCÍCIO 3

O Python disponibiliza algumas funções que convertem um valor de um tipo para outro. Teste o seguinte programa:

# Converte para inteiro.
print(int(3.14))

# Converte para float.
print(float(4))

# Converte para string.
print(str(123))

# Converte de string para int.
print(int('42'))

# Converte de string para float.
print(float('1.625'))

# What ?!?
print(float('banana'))

Erros na execução

Seu programa deve ter apresentado um erro parecido com o seguinte: ValueError: could not convert string to float: 'banana'. Será muito comum encontrarmos erros em nosso programa. A primeira dica é: não entre em pânico. A segunda é: leia a mensagem de erro com atenção.

Exercício adicional

O comando int(3.14) gerou o número inteiro 3. Mas será que ele arredondou o valor? Teste o comando int(2.718). Assumindo que a função int() arredonda o valor, o resultado esperado seria 3. Rode seu programa. Qual foi o resultado? O que isso diz sobre a função int?

EXERCÍCIO 4

Corrija o programa do exercício 3 sabendo que o input() sempre devolve uma string, ou seja, o texto digitado pelo usuário e a nossa função soma(x, y) recebe dois números.

Formatação de strings

Na aula passada vimos que podemos formatar uma string utilizando a função .format() para incluir os valores armazenados em variáveis. Por exemplo:

1
2
3
4
5
a = 10
b = 7
texto = 'a vale {0}, b vale {1} e a + b = {2}'.format(a, b, a + b)

print(texto)

Esse programa vai imprimir a vale 10, b vale 7 e a + b = 17 no terminal. Agora, o que acontece se o valor da variável for um float? Teste o programa a seguir.

1
2
3
import math

print('pi é {0} mais ou menos'.format(math.pi))

Quantas casas decimais do número pi foram apresentadas? E se quisermos mostrar apenas as 3 primeiras?

Para isso podemos usar diretivas de formatação, que podem ser especificadas com um ":" (dois pontos) depois do índice. Por exemplo '{0:.1f}, {1:.4f}'.format(1.23456, 7.89123) vai gerar a string '1.2, 7.8912'. Vamos por partes:

Exemplo de formatação de strings

EXERCÍCIO 5

Modifique o programa que imprime o valor de pi para que ele mostre somente as 3 primeiras casas decimais.

Maneiras antigas de formatar strings em Python

Se você procurar na internet por "formatação de strings em Python" ou algum termo análogo, é bastante provável que você encontre formas diferentes da que apresentamos acima. Por exemplo:

1
2
3
nome = "Mateus"
texto = "Meu nome é %s" % nome
print(texto)

Não se preocupe se não entender esse trecho de código. Essa é a maneira antiga de formatar strings em Python. Procure utilizar a maneira nova que ensinamos, pois ela é mais flexível.

Operações com strings

No programa do exercício 2 nós obtivemos um comportamento diferente do que esperávamos (se precisar, execute o programa novamente para relembrar). Nessa versão do programa, se o usuário digitar 4 e 2 o programa vai imprimir que a soma vale 42. Vimos que isso ocorre porque a função input() sempre devolve uma string, então o que o programa fez foi juntar a string '4' com a string '2', obtendo a string '42'. Essa operação de "juntar strings" é o que chamamos de concatenação.

EXERCÍCIO 6

Antes de executar o programa a seguir, reflita: o que você espera que seja a saída dele, ou seja, o que você espera que apareça no terminal? Depois que tiver sua hipótese, execute o programa.

1
2
3
4
5
6
7
8
s1 = 'Ins'
s2 = 'per'

s = s1 + s2
print(s)

t = s2 + s1
print(t)

Se o programa não fez o que você esperava, discuta com seus colegas. Se não conseguirem resolver, converse com algum dos professores.

EXERCÍCIO 7

Vamos voltar por um instante para o contexto numérico. Sabe-se que uma multiplicação é equivalente à adição sucessiva de um mesmo número. Por exemplo: 3 * 4 = 4 + 4 + 4 = 12. Sabendo disso e considerando o que acabamos de aprender sobre concatenação (+) de strings, qual você espera que seja a saída do programa a seguir? Execute-o para validar sua hipótese.

1
2
3
4
5
s1 = 'Ins'
s2 = 'per'

s = 3*s1 + s2
print(s)

Exercícios adicionais

Desafio

Faça um programa que pergunta ao usuário um numero n entre 1 e 20 e imprime um quadrado de asteriscos n x n. Exemplo de uso:

Digite n: 3

***
***
***

Para cumprir essa missão você precisa saber que a string "\n" significa "pule para a próxima linha". Por exemplo:

print("abc\nde")

imprime

abc
de

Referências