Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço...

55
Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho

Transcript of Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço...

Page 1: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Programação de Computadores

Instituto de Computação UFFDepartamento de Ciência da Computação

Otton Teixeira da Silveira Filho

Page 2: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Conteúdo

● Comandos de repetição

● Alguns aspectos no processamento numérico

● Atribuições múltiplas

● Exemplos

● Algumas funções implícitas de Python

● Aspectos dos tipos de dados no Python

Page 3: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - for

Python tem um comando de repetição que apresentaremos na forma

for elemento in iterador : comando(s)

OBS:

● Esta uma versão simples do for. Ele tem mais recursos.

● Um iterador é uma das particularidades de Python, embora exista algo equivalente em outras linguagens. Enquanto elemento estiver no iterador, a repetição será feita

● Aqui apresentaremos um criador de iterador que é muito útil: range()

Page 4: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - for

Uma versão de uso do for:

for contador in range(inicio, fim, passo) : comando(s)

Tanto o contador quanto o início da contagem, o fim da contagem e o passo da contagem serão int neste momento. range() permite maior amplitude de utilização como veremos em breve

● A omissão do passo de contagem suporá o uso de passo 1

● A contagem apresentada no range() será até fim - 1

Page 5: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - for

Exemplo:

Imprima os números inteiros entre 1 e 10

provocará a impressão dos números 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, um por linha.

Page 6: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - for

Exemplo:

Imprima os números inteiros impares de entre 1 e 10

provocará a impressão dos números 1, 3, 5, 7, 9, um por linha.

Page 7: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - for

Some todos os números inteiros entre 1 e 100.

Page 8: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - for

Some todos os números inteiros entre 1 e 100.

● Experimente mudar a indentação colocando o print() sob efeito do for

Page 9: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - for

Imprima os números inteiros entre 1 e 10 regressivamente

provocará a impressão dos números 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, um por linha.

Page 10: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - while

Usaremos um outro laço de repetição

while (condição lógica) : comando(s)

o laço repetirá as operações dentro do bloco enquanto a condição lógica for verdadeira

● Podemos criar um “laço eterno“ se a condição lógica for sempre True

Page 11: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - while

Some uma variável int a partir de 1 enquanto a soma seja menor que 1000. Imprima o valor do int para o qual a condição passou a não valer e também o resultado final.

Page 12: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - while

Faça um programa que solicite dois ints que deverão ser somados. O programa continuará solicitando dois int até que ambos sejam negativos.

Page 13: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - while

Page 14: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição - while

Observe a lógica do programa, incluindo o uso do or no contexto do while

Page 15: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Alguns fatos sobre computação numérica

Façamos um programa:

Atribua a uma variável float de identificador dx e conteúdo 0,01. Inicialize uma variável de acumulação com zero e acumule nela 100 vezes o valor da variável x. Imprima o resultado.

Page 16: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Alguns fatos sobre computação numérica

Observe que a soma de 0,01 cem vezes não deu 1!

O que temos num computador são representações limitadas dos números da matemática, não são os números da matemática, sejam eles inteiros ou reais

Neste caso especial o resultado gerado é consequência de 0,01 ser dízima periódica em binário

Page 17: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Outro modo de usar o for

Mas poderíamos escrever este programa usando o for de modo mais sintético

Page 18: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Alguns fatos sobre computação numérica

Quando colocamos o for com apenas um elemento no range, a contagem partirá de zero

Page 19: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Alguns fatos sobre computação numérica

Mais um exemplo:

Faça 0,1 + 0,1 e teste se é igual a 0,2. Depois faça 0,1 + 0,1 + 0.1 e teste se é igual a 0,3.

Page 20: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Outro exemplo

Novamente temos um resultado “estranho” se estivermos supondo que os números num computador são os números da matemática

Page 21: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Outro exemplo

Obtenha o fatorial de um número inteiro não negativo n, imprimindo o resultado calculado.

Page 22: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Outro exemplo

programa fatorial

inteiro fat, i, n

leia n

fat ←1

para i ← 1 até n

fat ←fat * i

fim parafim para

imprima fatimprima fat

fimfim

i ← 1até n

fat ← fat * i

início

fat←1

fat

fim

n

Page 23: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Outro exemplo

Fatorial de n

Page 24: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Outro exemplo

Calcule o valor da função exponencial no ponto x=1 usando a série de Taylor truncada em n termos que é dada por

e x

=1+x1!

+x2

2!+

x3

3 !+⋯+

xn

n!

Page 25: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Outro exemplo

Programa exponencial

real exp inteiro fat, i, j, n

leia n

exp ← 1

para i ← 1 até n fat ←1 para j ← 1 até i fat ←fat * j fim para

exp ← exp + 1/fat fim para

imprima exp

fim

...

Page 26: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Outro exemplo

Programa exponencial

real exp inteiro fat, i, j, n

leia n

exp ← 1

para i ← 1 até n fat ←1 para j ← 1 até i fat ←fat * j fim para

exp ← exp + 1/fat fim para

imprima exp

fim

Page 27: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Se você achou um tanto confuso, não se preocupe

Esta implementação inclui o cálculo do fatorial com o da soma da série. É funcional mas não é algo recomendado.

Mais a frente veremos uma nova versão mais legível

Page 28: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Calcule o enésimo termo da sequência de Fibonacci

Page 29: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Calcule o enésimo termo da sequência de Fibonacci

A sequencia de Fibonacci é apresentada aqui da seguinte forma:

Dados como primeiros termos F1=1 e F2=1, geramos os próximos elementos usando a equação

Fn= Fn-1+Fn-2

Page 30: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Calcule o enésimo termo da sequência de Fibonacci

A sequencia de Fibonacci é apresentada aqui da seguinte forma:

Dados como primeiros termos F1=1 e F2=1, geramos os próximos elementos usando a equação

Fn= Fn-1+Fn-2

Então teríamos a sequência

1, 1, 2, 3, 5, 8, 13, 21, 34, 55...

Page 31: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Calcule o enésimo termo da sequência de Fibonacci

Page 32: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

O código anterior um tem erro

Veja se o localiza antes de avançar

Page 33: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Repare que se o valor dado for negativo, o if fará o fluxo do programa saltar para fora do encadeamento de if, onde fibo não está definido.

O interpretador de Python gerará um erro. Experimente…

Para corrigir, basta colocar o print() no nível de indentação do else

Page 34: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Calcule o enésimo termo da sequência de Fibonacci

Page 35: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Atribuições múltiplas

Python permite que possamos fazer atribuições múltiplas, ou seja, fazer atribuições de valores simultaneamente e sequencialmente

Vejamos um exemplo numa modificação do programa anterior

Page 36: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Calcule o enésimo termo da sequência de Fibonacci

Page 37: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Laços de repetição

Observe:

ficou mais sintético mas de compreensão mais difícil no laço do while

Recordemos alguns do princípios que norteiam a linguagem Python

Page 38: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Zen do Python

● Belo é melhor que feio

● Explícito é melhor que implícito

● Simples é melhor que complexo

● Complexo é melhor que complicado

● Legibilidade conta

Page 39: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Tipos de variáveis

Programa tipos.py

Aqui constataremos mais uma sobrecarga e o cuidado que temos que ter ao especificarmos os conteúdos das variáveis

Executemos o programa que se segue.

● Sugestão: tecle dois “números” de um algarismo

Page 40: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Tipos de variáveis

Programa tipos.py

Page 41: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Tipos de variáveis

Saida com programa tipos.py

Page 42: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Tipos de variáveis

Programa tipos.py

Observe que input() sem a moldagem por int() dá como saída um tipo str, cadeia de caracteres. Antes de ser um algarismo, o símbolo que o representa é um caracter

● Vemos aqui que + é também um operador que concatena os caracteres de entrada, ou seja, não é aqui soma aritmética

● Aqui temos também o operador * repetindo o caracter um determinado número de vezes que foi especificado

Page 43: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Tipos de variáveis

Programa tipos.py

Aqui observamos novamente o que é chamado sobrecarga de operadores:

● os sinais + e * promovem resultados diferentes de quando operados não só com int e float como também com str!

Page 44: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algumas funções

O Python contém funções pré-definidas

Page 45: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algumas funções

O Python contém funções pré-definidas

Veremos mais tarde que o conceito de funções em linguagens de programação não correspondem totalmente ao que é chamado de função na matemática

Page 46: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algumas funções

O Python contém funções pré-definidas

Veremos mais tarde que o conceito de funções em linguagens de programação não correspondem totalmente ao que é chamado de função na matemática

Aqui também seremos imprecisos não diferenciando funções de métodos, como também estamos fazendo com os conceitos de variáveis e objetos

Page 47: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Funções intrínsecas

Algumas da funções implícitas no Python

Nome Definição Argumento saidaabs() Valor absoluto Int, float Tipo de entrada

float() Conversão para tipo float número, cadeia de caracteres float

int() Conversão para tipo int número, cadeia de caracteres int

iter() gera um iterador “variado“ Um iterador

list() Gera uma lista “variado“ Uma lista

max() *** “variado“ valor máximo do argumento

min() *** “variado“ Valor mínimo do argumento

len() *** “variado“ Tamanho do argumento

type() *** “variado“ Devolve o tipo do argumento

Page 48: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algumas funções

Repare que fomos informalmente apresentados a algumas funções como float(), int() e type()

Page 49: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algumas funções

Este é um pequeno conjunto funções pré-definidas de Python

Veremos mais tarde os módulos que podemos carregar contendo funções mais específicas e abrangentes

Page 50: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Módulos

Três módulos importantes são:

● math, com funções matemáticas

● numpy, para processamento numérico

● scipy, para cálculos científicos

Page 51: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algo sobre “variáveis“ em Python

Um aspecto importante de Python pode ser esclarecido pelo uso do type()

Page 52: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algo sobre “variáveis“ em Python

Dentro do modo iterativo tecle

a = 1

b = 1.

c = “abc“

type(a)

type(b)

type(c)

Page 53: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algo sobre “variáveis“ em Python

Teremos o que se segue

Page 54: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algo sobre “variáveis“ em Python

Observe que temos uma descrição do tipo do argumento e descobrimos que o que chamamos até agora de tipo de variáveis tem em Python um outro nome: classe

Page 55: Programação de Computadoresotton/graduacao/programacao/08... · Podemos criar um “laço eterno“ se a condição lógica for sempre True. Laços de repetição - while Some uma

Algo sobre “variáveis“ em Python

Este é uma das facetas do Python, ou melhor, um dos paradígmas de programação que ele inclui: Orientação a Objetos

No entanto, sigamos em frente e não se preocupe com isto no momento