Você está na página 1de 69

IEC081 - Introduo Cincia dos Computadores

IEC037 - Introduo Programao de


Computadores

Aula 05 Vetores e Strings

2016/1
Atualizado em 02/08/2016

Contedo Vetores e Strings


Introduo a vetores
Inicializao de vetores

Operaes com vetores


Introduo a strings
Operaes com strings

Alguns problemas

Contedo Vetores e Strings


Introduo a vetores
Inicializao de vetores

Operaes com vetores


Introduo a strings
Operaes com strings

Alguns problemas

Vetores
4

Em muitos programas,
precisamos manipular
um grande nmero de
valores:
Folha

de pagamento
Medies ao longo do
tempo

Um vetor um
conjunto de dados
organizados em
ordem sequencial.

Vetores
5

Vetores so posies da memria:


identificadas

por um nico nome


individualizadas por ndices
com contedo de um mesmo tipo

Notas:
Posio:

6.1 2.3 9.4 5.1 8.9 9.8


0

10
6

7.0 6.3 4.4


7

Vetores em Python
6

Para a manipulao de vetores, utilizamos o


mdulo (biblioteca) numpy.
from numpy import *

NumPy o pacote essencial para computao


cientfica com Python.
www.numpy.org

Funes de criao e manipulao de vetores:


docs.scipy.org/doc/numpy/reference/

Contedo Vetores e Strings


Introduo a vetores
Inicializao de vetores

Operaes com vetores


Introduo a strings
Operaes com strings

Alguns problemas

Vetores em Python
:: Criao de vetor atribuio de valores
8

Todo vetor deve ser inicializado.


Forma geral:

<nome_vetor> = array([<valor1>, <valor2>, <valor3>,...])

Exemplos:
array1 = array([1, 2 , 3 , 4])
notas = array([10, 9.5, 5, 7.75, 10])
vazio = array([])

Vetores em Python
:: Inicializao de valores
9

Duas (entre vrias) maneiras de atribuir valores


iniciais aos elementos de um vetor:
Corpo do script

Teclado

from numpy import *


v = array(eval(input("v: ")))
print(v)

from numpy import *


v = array([11, 22, 33])
print(v)
Na entrada, separe os
elementos com vrgula

[11 22 33]

v: [11,22,33]
[11 22 33]

Vetores em Python
:: Inicializao de valores
10

Iniciando vetor com 0s

from numpy import *


v1 = array(zeros(5, dtype =
int))
print(v1)

Iniciando vetor com 1s


from numpy import *
v2 = array(ones(4, dtype =
int))
print(v2)

Quantidade de elementos
no vetor

[0 0 0 0 0]

[1 1 1 1]

Vetores em Python
:: Funo linspace()
11

A funo linspace() inicializa um vetor com


um intervalo de valores linearmente e igualmente
espaados:

<vetor> = array(linspace(ini, fim, tam))

onde:
ini

incio do intervalo
fim final do intervalo
tam quantidade de valores no intervalo

Vetores em Python
:: Funo linspace()
12

Exemplo:
vetor = array(linspace(11, 20, 10))
ndices:

...

vetor

11

12

13

14

15

...

20

ndice do primeiro elemento:


ndice do ltimo elemento:
Quantidade de elementos:

0
9
10

Vetores em Python
:: Funo linspace()
13

Exemplos:
Colocar

os nmeros de 10 a 15 em um vetor:

vetor = array(linspace(10, 15, 6))


Colocar

os nmeros de 5 a 1 em um vetor:

vetor = array(linspace(5, 1, 5))


Cinco

valores linearmente espaados entre 3 e 15:

vetor = array(linspace(3, 15, 5))

Vetores em Python
:: ndices
14

ndices fora dos limites causam erro.


ndices podem ser negativos, permitindo o acesso na
ordem inversa.
0

12

15

18

-6

-5

-4

-3

-2

-1

vetor
vetor = array([3, 6, 9, 12, 15, 18])
vetor[0]
# O primeiro elemento da lista: 3
vetor[-1]
# O ultimo elemento da lista: 18
vetor[6]
# ERRO

ndice elemento
15

ndice (i):
usado

como referncia

Elemento (vet[i]):
valor

guardado em
memria
ndice

vet 8 4 2 6
Elemento

Contedo Vetores e Strings


Introduo a vetores
Inicializao de vetores

Operaes com vetores


Introduo a strings
Operaes com strings

Alguns problemas

Operaes com Vetores


:: Mnimo, Mximo, Tamanho, Soma
17

Encontrar o menor elemento de um vetor:


min(vetor)

Encontrar o maior elemento de um vetor:


max(vetor)

Encontrar o tamanho de um vetor:


size(vetor)

Encontrar a soma dos elementos de um vetor:


sum(vetor)

Operaes com Vetores


:: Busca
18

Problema de busca
um vetor v, e um valor x, encontrar um ndice k
tal que v[k] == x.

Dado

456

222 555 111 333 456 888 777

v
achou = -1
i = 0
while (i < size(v)):
if (v[i] == x):
achou = i
i = i + 1

Trecho principal da soluo.


Cdigo completo no prximo slide.

Operaes com Vetores


:: Busca
19

from numpy import *


#
v
#
x

Leitura do vetor
= array(eval(input("Informe o vetor: ")))
Leitura do valor buscado
= int(input("Informe o valor a ser encontrado: "))

i = 0
achou = -1

# indica que elemento no foi encontrado

while (i < size(v)):


if (v[i] == x):
achou = i
i = i + 1
if (achou == -1):
print("O valor no foi encontrado no vetor")
else:
print("O valor foi encontrado na posicao", achou)

Operaes com Vetores


:: Mdia
20

Calcular a mdia dos elementos de um vetor.


0

3
6

soma = 0
i=0

soma = 8
i=1
0

soma = 12
i= 2

...

media = soma/i

soma = 20
i= 4

Operaes com Vetores


:: Mdia
21

from numpy import *


# Leitura do vetor
v = array(eval(input("Informe o vetor: ")))
i = 0
soma = 0

# variavel contadora
# variavel acumuladora

while (i < size(v)):


soma = soma + v[i]
i = i + 1
print("A media :", round(soma/size(v)),2)

Exemplos
:: Mdia ponderada

O coeficiente de
rendimento (CR) dado
pela mdia ponderada
entre as notas de cada
disciplina e seus
respectivos nmeros de
crditos.
Escreva um script que leia
as notas de um aluno e os
crditos das disciplinas
cursadas, armazenando
em vetores distintos
Ao final, exiba o CR do
aluno na tela.

Exemplo
Definir entradas e sadas

Entradas
Sadas

Grandeza

Unidade de medida

Faixa de valores

Notas

---

[0, 10]

Crditos

---

[0, 10]

Coeficiente

---

[0, 10]

Exemplo
Projetar algoritmo

Ler vetores notas e creditos


1 1 + 2 2 + 3 3 +
=
1 + 2 + 3 +

Duas variveis acumuladoras:


Numerador:

soma dos produtos


Denominador: soma dos crditos

Qual a condio para repetio?


Enquanto

o contador no atingir o nmero de notas


(tamanho dos vetores)

Problema 3
Codificar em Python
from numpy import *
# Leitura do vetor notas
not = array(eval(input("Informe as notas: ")))
# Leitura do vetor creditos
cred = array(eval(input("Informe os crditos: ")))
i = 0
# Variavel contadora
soma_acum = 0
# Acumula produto notas * creditos
soma_cred = 0
# Acumula os creditos
while (i < size(n)):
soma_acum = soma_acum + not[i] * cred[i]
soma_cred = soma_cred + cred[i]
i = i + 1
coeficiente = soma_acum/soma_cred
print(round(coeficiente, 3))

Contedo Vetores e Strings


Introduo a vetores
Inicializao de vetores

Operaes com vetores


Introduo a strings
Operaes com strings

Alguns problemas

Strings de caracteres

Uma string (= corda) uma cadeia de caracteres.


Uma cadeia de caracteres uma sequncia de
smbolos que formam textos em geral:
Letras
Nmeros
Sinais

de pontuao

m o

A
o

n
o
h
t
P y

Strings de caracteres

O incio e o fim de uma string so indicados por


aspas duplas (") ou aspas simples ('), de modo a
separar o contedo da string do restante do texto
do programa.
texto = "Amo o Python"
texto = 'Amo o Python'

Voc pode usar espaos em uma string de


caracteres.

Strings de caracteres

Se voc quiser incluir o smbolo de aspas em uma


string, use a expresso \".
texto2 = "Amo o \"Python\"."
print(texto2)

Amo o "Python".

Acesso a caracteres

Strings so indexadas.
O primeiro caractere da string indexado por 0.
0

str1

str1 = 'Python'
print(str1[0])
print(str1[5])
print(str1[6])

No use str como identificador,


pois palavra reservada

# primeiro caractere: 'P'


# ultimo caractere: 'n'
# ERRO

Acesso a caracteres

ndices tambm podem ser nmeros negativos.


0

-6

-5

-4

-3

-2

-1

str1

print(str1[-1])
print(str1[-2])
print(str1[-6])
print(str1[-7])

#
#
#
#

ultimo caractere: 'n'


penultimo caractere: 'o'
primeiro caractere : 'P'
ERRO

Acesso a partes da string


0

-6

-5

-4

-3

-2

-1

str1

# caractere da posicao 0 a 1: 'Py'


print(str1[0:2])
# caractere da posicao inicial ateh 1:'Py'
print(str1[:2])
# caractere da posicao 2 a 5: 'thon'
print(str1[2:6])

# caractere da posicao 2 ateh o final: 'thon'


print(str1[2:])

Contedo Vetores e Strings


Introduo a vetores
Inicializao de vetores

Operaes com vetores


Introduo a strings
Operaes com strings

Alguns problemas

Operaes com strings


:: Tamanho, Primeiro, ltimo

Quantidade de caracteres da string


len(string)

Primeiro caractere da string


string[0]

ltimo caractere da string


string[-1]

Operaes com strings


:: Converso maisculas/minsculas

As funes upper e lower convertem todos os


caracteres alfabticos de uma string em letras
maisculas ou minsculas, respectivamente.

str1 = 'Isto eh um teste!'


print(str1.upper())
print(str1.lower())

# ISSO EH UM TESTE!
# isso eh um teste!

Operaes com strings


:: Concatenao de strings

Para a concatenao de duas ou mais strings, utilize


o operador +.

primeira = 'Auto'
ultima = 'escola'
print(primeira + ultima)
print(primeira + ' ' + ultima)

# 'Autoescola'
# 'Auto escola'

Operaes com strings


:: Cpias repetidas de strings

Caso queira concatenar cpias repetidas de strings,


utilize o operador *.

str1 = 'UFAM'
print(str1 * 3)
# 'UFAMUFAMUFAM
print((str1 + ' ') * 3) # 'UFAM UFAM UFAM '
print(3 * str1)
# 'UFAMUFAMUFAM'
print(3 * (str1 + ' ')) # 'UFAM UFAM UFAM '

Operaes com strings


:: Separao de strings

A funo split retorna os caracteres antes da


primeira ocorrncia de um caractere separador em
uma string de entrada.

O caractere separador padro o espao em branco.

str1 = 'Fulano de Tal


print(str1.split())
# ['Fulano', 'de', 'Tal']
print(str1.split(' ')) # ['Fulano', 'de', 'Tal']
print(str1.split(',')) # ['Fulano de Tal']
print('1,2,3'.split(',')) # ['1', '2', '3']

Operaes com strings


:: Busca de strings

A funo find retorna o menor ndice da ocorrncia


da string2 na string1.
str1 = 'Fulano de Tal'
str2 = 'de
print(str1.find(str2))

# 7

Para checar se a string2 est na string1, utilize o


operador in.
print('de' in 'Fulano de Tal)

# True

Operaes com strings


:: Busca de strings

A funo find suporta duas opes adicionais: incio


(start) e fim (start).
str1 = 'um tigre, dois tigres, tres tigres'

print(str1.find ('tigres', 7)) # 15


incio = 7

print(str1.find ('tigres', 0, 10))


incio = 7 fim=10

# -1

#string no encontrada

Operaes com strings


:: Substituio de strings

A funo replace realiza uma operao padro


de localizar e substituir.

Retorna uma cpia da string1 com todas as


ocorrncias da string2 substitudas pela string3.

str1 = 'Na minha famlia h vrios mdicos. Meu


av, meu pai, minha me e eu somos mdicos.'
str2 = 'mdicos
str3 = 'engenheiros'
print(str1.replace(str2,str3))

Na minha famlia h vrios engenheiros. Meu


av, meu pai, minha me e eu somos engenheiros.

Contedo Vetores e Strings


Introduo a vetores
Inicializao de vetores

Operaes com vetores


Introduo a strings
Operaes com strings

Alguns problemas

Problema 1
:: Separao de string

Elabore um script que leia o nome completo de


uma pessoa e imprima o prenome e o sobrenome.

Separao de string
:: Script em Python
# Leitura do nome
nome = input("Informe o nome: ").split(' ')
# Imprime prenome
print('Prenome:', nome[0])
# Imprime primeiro sobrenome
print('Sobrenome:', nome[1])

# Imprime lista de sobrenomes


print('Sobrenome:', nome[1:])
# Imprime ultimo sobrenome
print('Sobrenome:', nome[-1])

45

Contedo Extra

Contedo Extra
:: Vetores e Strings
46

Selecionando partes de um vetor


Grficos
Testando strings (funes is)
Converso de strings para nmeros

Contedo Extra
:: Vetores e Strings
47

Selecionando partes de um vetor


Grficos
Testando strings (funes is)
Converso de strings para nmeros

Operaes com Vetores


:: Selecionando partes de um vetor
48

Cdigo
vec[i]
vec[i:j]
vec[i:]

vec[:i]

Objetivo
Seleciona o elemento de ndice i do
vetor vec
Seleciona os elementos do vetor vec
cujos ndices esto compreendidos
entre i e j-1
Seleciona os elementos do vetor vec
do ndice i at o final do vetor
Seleciona os elementos do vetor vec
desde o primeiro at o de ndice i-1

Contedo Extra
:: Vetores e Strings
49

Selecionando partes de um vetor


Grficos
Testando strings (funes is)
Converso de strings para nmeros

Grficos em Python
50

Para gerar grficos, utilize o mdulo (biblioteca)


matplotlib.pyplot
from matplotlib.pyplot import *

O matplotlib.pyplot uma coleo de


funes que fazem o matplotlib funcionar
como o MATLAB.
Mais informaes:
matplotlib.org/api/pyplot_api.html
matplotlib.org/users/pyplot_tutorial.html

Grficos em Python
51

O CodeBench (ainda) no trabalha com grficos.

Exemplo de Grfico
52

Desenhar o grfico da funo y = x2 10x + 15 para


valores de x entre 0 e 10.
1. Definir um polinmio a partir do vetor de
coeficientes.
2. Criar um vetor de valores de x entre 0 e 10.
3. Calcular o valor do polinmio em cada ponto x.
4. Desenhar o grfico.

Exemplo de Grfico
53

from numpy import *


from matplotlib.pyplot import *
# Cria polinomio a partir do vetor de coeficientes
poli = poly1d([1,-10,15])
# Cria um vetor de 10 valores para x
x = array(linspace(0, 10, 10))
# Calcula o valor do polinmio para o vetor x
y = polyval(poli, x)
# Abre uma figura
figure()

Exemplo de Grfico (continuao)


54

# Plota o polinomio V(x) em funcao de x


plot(x, y)
# Especifica os limites do eixo Y exibidos na tela
ylim(-10,15)
# Poe um nome no eixo X
xlabel("x", fontsize='large')
# Poe um nome no eixo Y
ylabel("y", fontsize='large')
# Exibe linhas de grade
grid(True)

Grficos em Python
55

Grficos em Python
56

Funo

poly1d(vet)
roots(p)
polyval(p, x)
polyder(p)

Objetivo
Define um polinmio a partir de um
vetor vet contendo seus coeficientes
Determina as razes de um polinmio p.
A sada desta funo tambm um
vetor.
Calcula o valor de um polinmio p no
ponto x.

Determina a 1 derivada de um
polinmio p.

Grficos em Python
57

Grficos podem ser salvos como figura


Podem ser adicionados:
Linhas de grade
Ttulo do grfico
Rtulos para os eixos
etc.

title("Plot de x^2 - 10*x + 15")


xlabel("eixo x")
ylabel("eixo y")
grid(True)
savefig("polinomio.png")

Contedo Extra
:: Vetores e Strings
58

Selecionando partes de um vetor


Grficos
Testando strings (funes is)
Converso de strings para nmeros

Testes Lgicos sobre Strings

O Python oferece diversas funes cujo nome


comea com is.
Elas retornam um dos seguintes valores lgicos:

True Verdadeiro

False Falso

Testes Lgicos sobre Strings


:: Exemplos de funes

Funo isalpha()
Verifica se todos os caracteres na string so letras
do alfabeto.
Funo isnumeric()
Verifica se todos os caracteres na string so
numricos.
Funo isalnum()
Verifica se todos os caracteres na string so
alfanumricos.

Testes Lgicos sobre Strings


:: Exemplos de funes
str1 = 'Fulano'
str2 = '123'
str3 = str1 + str2
print(str1.isalpha())
print(str3.isalpha())

# True
# False

print(str2.isnumeric()) # True
print(str3.isnumeric()) # False
print(str1.isalnum())
print(str2.isalnum())
print(str3.isalnum())

# True
# True
# True

Testes Lgicos sobre Strings


:: Exemplos de funes

Funo islower()

Verifica se todos os caracteres na string so minsculos.

Funo isupper()

Verifica se todos os caracteres na string so maisculos.


str1 = 'fulano'
str2 = 'FULANO'
str3 = 'Fulano'
print(str1.islower())
print(str3.islower())
print(str2.isupper())
print(str3.isupper())

#
#
#
#

True
False
True
False

Contedo Extra
:: Vetores e Strings
63

Selecionando partes de um vetor


Grficos
Testando strings (funes is)
Converso de strings para nmeros

Converso de strings para nmeros

str()

Converte nmeros em strings

int()

Converte strings em nmeros


inteiros

float()

Converte strings em nmeros


reais

Converso de strings para nmeros


str1 = '123'
num1 = 123
print(str(num1))
print(int(str1))
print(float(str1))

# 123
# 123
# 123.0

print(int(str1) + num1)
print(float(str1) + num1)
print(str(num1) + str1)

# 246
# 246.0
# 123123

print(str1 + num1 )

# ERRO

Strings de caracteres

Os caracteres de uma string so codificados no


padro ASCII.
Cada caractere do teclado representado por um
cdigo numrico.

ord()

Mostra cdigo ASCII do


caractere informado

chr()

Mostra caractere ASCII


correspondente ao cdigo
informado

Tabela ASCII
0

nul

soh

stx

etx

eot

enq

ack

bel

bs

ht

nl

vt

ff

cr

so

si

dle

dc1

dc2

dc3

dc4

nak

syn

etb

cam

em

sub

esc

fs

gs

rs

us

sp

"

&

<

>

10

11

12

del

Referncias bibliogrficas
68

Menezes, Nilo Ney Coutinho (2010). Introduo


Programao com Python. Editora Novatec.
Hetland, Magnus Lie (2008). Beginning Python:
From Novice to Professional. Springer eBooks, 2
edio. Disponvel em:
http://dx.doi.org/10.1007/978-1-4302-0634-7.
Horstmann, Cay & Necaise, Rance D. (2013).
Python for Everyone. John Wiley & Sons.

69

Dvidas?