Anda di halaman 1dari 64

ICC901 Introduo Programao de Computadores

IEC081 Introduo Cincia dos Computadores


IEC037 Introduo Programao de Computadores

2016/2
Aula 05 Vetores e Strings
Atualizao: 10/01/2017

Fonte da imagem: https://www.codeschool.com/courses/forging-ahead-with-asp-net-core


Contedo Vetores e Strings

Introduo a vetores

Inicializao de vetores

Operaes com vetores

Introduo a strings

Operaes com strings


Contedo Vetores e Strings

Introduo a vetores

Inicializao de vetores

Operaes com vetores

Introduo a strings

Operaes com strings


Vetores
4

Alguns problemas
manipulam uma grande
quantidade de valores:
Folha de pagamento
Medies ao longo do
tempo

Um vetor um conjunto
de dados de mesmo tipo
organizados em ordem
sequencial.
Vetores
Vetores so posies da memria:
identificadas por um nico nome
individualizadas por ndices
com contedo de um mesmo tipo (int, floats)

Exemplo:

6.1 2.3 9.4 5.1 8.9 9.8 10 7.0 6.3 4.4


ndice: 0 1 2 3 4 5 6 7 8 9
Vetores em Python
Para manipular vetores, utilizamos o mdulo numpy:

from numpy import *

Informaes completas sobre o NumPy:


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

6
ndices referenciam elementos do
vetor
Cada elemento de um vetor pode ser individualmente
manipulado por meio da sua posio.

6.1 2.3 9.4 5.1 8.9 9.8 10 7.0 6.3 4.4


ndice: 0 1 2 3 4 5 6 7 8 9

Imprime todos os
print(notas) elementos do vetor

Imprime apenas o 1
print(notas[0]) elemento do vetor

7
ndice elemento

ndice (i):
uma referncia

Elemento (vet[i]):
o valor guardado em
memria
ndice
0 1 2 3
81 42 23 64
Valor do elemento
ndices
:: Limites
ndices fora dos limites
causam erro. from numpy import *
vet = array([3,6,9,12,15])
ndices podem ser
# Primeiro elemento
negativos, permitindo o print(vet[0])
# Ultimo elemento
acesso na ordem inversa. print(vet[-1])
# ERRO
0 1 2 3 4 print(vet[5])

3 6 9 12 15 3
15
-5 -4 -3 -2 -1 IndexError: index 5 is
out of bounds for axis
ndices 0 with size 5
ndice 5 est fora dos limites
Contedo Vetores e Strings

Introduo a vetores

Inicializao de vetores

Operaes com vetores

Introduo a strings

Operaes com strings


Todo vetor deve ser inicializado
Colchetes definem um
conjunto de valores
Todo vetor deve ter
um nome, que segue as
mesmas regras para Elemento
nomear variveis do vetor

nome array( )
Funo que Vrgulas separam
cria o vetor um elemento de
outro no conjunto

Toda funo envolve


seus argumentos
entre parnteses
Iniciando vetor no corpo do script

Voc pode informar o


valor dos elementos do from numpy import *
vetor no corpo do script. v1 = array([11, 22, 33])
print(v1)

# Vetor vazio Separe os


til em pequenos testes. v2 = array([]) elementos
print(v2) por vrgula

[11 22 33]
[]
Iniciando vetor via teclado

Voc pode inserir vetor


completo via teclado. from numpy import *

v = array(eval(input("v:
")))
A funo eval trata
Ser a forma mais colchetes e vrgulas;
comum de entrar com print(v) As funes int e float, no.
casos de correo no
No input, separe os
CodeBench. elementos por vrgula
v: [11,22,33]
[11 22 33]
Na sada, o Python
remove as vrgulas
Iniciando vetor
:: zeros ou uns

from numpy import * from numpy import *

v0 = zeros(5, dtype=int) v1 = ones(4, dtype=int)


Se no informado,
print(v0) print(v1) cria vetor de floats

Quantidade de
elementos no vetor

[0 0 0 0 0] [1 1 1 1]
Iniciando vetor
:: sequncia de inteiros
A funo arange(N) gera
um vetor com N from numpy import *
elementos inteiros.
v = arange(5)
Os elementos vo de
zero a N-1. print(v)

[0 1 2 3 4]
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

min(vet) Menor elemento

max(vet) Maior elemento

size(vet) Quantidade de elementos

sum(vet) Soma dos elementos


Problema 1
:: Candidatos a uma eleio
Um vetor contm a
quantidade de votos
recebidos pelos candidatos a
uma eleio.
Determine:
1. Quantos votos teve o
candidato mais votado?
2. Qual o total de votantes?
3. Quantos candidatos
participaram da eleio?
4. Qual o percentual de
votos recebidos?

18
Problema 1
Projetar algoritmo
Quantos votos teve o candidato mais votado?

max(votos)
Qual o total de votantes?

sum(votos)
Quantos candidatos participaram da eleio?

size(votos)
Qual o percentual de votos recebidos?

votos/sum(votos) * 100
Problema 1
Codificar em Python
from numpy import *

# Leitura de dados
votos = array(eval(input("Qtde de votos: ")))
No se
esquea de # Resultados
mandar print(max(votos))
imprimir
print(sum(votos))

print(size(votos))

print(votos/sum(votos) * 100)
Problema 2
:: Qual o nome do vencedor?
Leia dois vetores:
Nomes de candidatos
Quantidade de votos RESULTADOS

Determine:
Qual o nome do
candidato mais
votado?

21
Problema 2
Projetar algoritmo (1/2)
Vetores de entrada:
nomes Vetor com os nomes dos candidatos
votos Vetor com os votos recebidos

Achar o n de votos do candidato mais votado fcil:


Funo max

Para saber o nome do candidato mais votado, precisamos:


Buscar o ndice do maior elemento do vetor votos
Imprimir o valor correspondente no vetor nomes
Problema 2
Projetar algoritmo (2/2)
Para buscar o ndice do maior elemento do vetor votos,
devemos percorrer o vetor:

0 1 2 3 4 5
81 42 23 64 95 67

Contador:
Valor inicial: zero (primeiro ndice do vetor)
Condio de parada: chegar ao final do vetor ou
encontrar o mximo
Incremento: 1
Problema 2
Codificar em Python
from numpy import *

# Leitura de dados
nomes = array(eval(input("Nomes dos candidatos: ")))
votos = array(eval(input("Qtde de votos: ")))

# Primeiro indice
Quando a condio for violada, ento o
i = 0 valor mximo foi encontrado

while (i < size(nomes) and votos[i] != max(votos)):


i = i + 1

print(nomes[i])
Selecionando partes de um vetor
Cdigo Objetivo
Seleciona o elemento de ndice i do vetor
vec[i]
vec
Seleciona os elementos do vetor vec cujos
vec[i:j]
ndices esto compreendidos entre i e j-1
Seleciona os elementos do vetor vec do
vec[i:]
ndice i at o final do vetor
Seleciona os elementos do vetor vec desde o
vec[:i]
primeiro at o de ndice i-1
Problema 3
:: Votos vlidos
Leia um vetor contendo a
quantidade de votos, com trs
posies a mais:
Votos nulos
Votos brancos
N de eleitores ausentes

Determine:
Quantos eleitores
presentes?
Quantos votos vlidos?
Qual o percentual de votos
vlidos do vencedor?

26
Problema 3
Projetar algoritmo
Eleitores presentes?

Seleciona at o elemento
sum(votos[:-1]) anterior ao ltimo (-1)

Votos vlidos?

Exclui os trs ltimos (-3)


sum(votos[:-3]) elementos do vetor

Percentual de votos vlidos do vencedor?

max(votos[:-3])/sum(votos[:-3]) * 100
Evita erros devido a uma situao invlida ser mais numerosa
Problema 3
Codificar em Python
from numpy import *

# Leitura de dados
votos = array(eval(input("Qtde de votos: ")))

# Resultados
print(sum(votos[:-1]))

print(sum(votos[:-3]))

print(max(votos[:-3])/sum(votos[:-3])) * 100
Problema 4
:: Problema da Busca
Escreva um programa
que leia:
Um vetor v
Um valor x

Encontre um ndice k tal


que v[k] == x.
Problema 4
Projetar algoritmo
Caso 1: elemento est no vetor
x 0 1 2 3 4 5 6
456 222 555 111 333 456 888 777

v[i] == x

Caso 2: elemento no est no vetor


x 0 1 2 3 4 5 6
123 222 555 111 333 456 888 777

i >= size(v)
Problema 4
Codificar em Python
from numpy import *

# Leitura de dados
v = array(eval(input("Vetor: ")))
x = int(input("Valor a ser encontrado: "))

i = 0 Condio para repetir


contrria condio de parada
while (i < size(v) and v[i] != x):
i = i + 1
Se o contador for menor que o tamanho
if (i < size(v)): do vetor, ento o elemento foi achado
print(i)
else:
print("O valor nao encontrado")
Problema 5
:: Mdia ponderada
Coeficiente de rendimento
(CR) a mdia ponderada
entre as notas de cada
disciplina e os respectivos
nmeros de crditos.
Escreva um script que leia
dois vetores distintos:
notas de um aluno; e
crditos das disciplinas
correspondentes.
Determine o CR do aluno.
Problema 5
Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Notas --- [0, 10]
Entradas
Crditos --- [0, 10]
Sadas Coeficiente --- [0, 10]
Problema 5
Projetar algoritmo
Ler vetores notas e creditos

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

Duas variveis acumuladoras:


Numerador: soma dos produtos nota * crdito
Denominador: soma dos crditos
Qual a condio para repetio?
Enquanto o contador no atingir o nmero de notas
(tamanho dos vetores)
Problema 5
Codificar em Python
from numpy import *
# Leitura do vetor notas
notas = array(eval(input("Informe as notas: ")))
cred = array(eval(input("Informe os creditos: ")))

i = 0 # Variavel contadora
numerador = 0 # Acumula produto notas * creditos
denominador = 0 # Acumula os creditos

while (i < size(notas)):


numerador = numerador + notas[i] * cred[i]
denominador = denominador + cred[i]
i = i + 1

coeficiente = numerador / denominador


print(round(coeficiente, 3))
Problema 6
:: Total de Danos
Um ataque a uma Aranha
Dwarven causa um dano de:
20 pontos de fora se for na
cabea;
8 pontos de fora se for em
outro lugar;
Escreva um programa que leia
um vetor, onde:
"C" representa um ataque
na cabea;
"O" representa um ataque
em outro lugar.
Como sada, imprima o dano
total dos ataques realizados.
Problema 6
Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Entradas Ataques --- {"C","O"}
Sadas Total de Danos --- >=0
Problema 6
Codificar em Python
from numpy import *

# Leitura do vetor notas


ataques = array(eval(input("Informe os ataques: ")))

i = 0 # Variavel contadora
danos = 0 # Acumula o dano total

while (i < size(ataques)):


if (ataques[i] == "C"): Note a estrutura condicional
danos = danos + 20 (if) dentro da estrutura de
else: repetio (while)
danos = danos + 8
i = i + 1

print(danos)
Contedo Vetores e Strings

Introduo a vetores

Inicializao de vetores

Operaes com vetores

Introduo a strings

Operaes com strings


Strings
Uma string (corda, em ingls) uma sequncia de
caracteres.
No requer o mdulo numpy.

m o
A n
o h o
t
P y
Acesso aos caracteres

Cada caractere
indexado pela sua s = "Python"
posio, semelhante a # Primeiro caractere
um vetor. print(s[0])
# Ultimo caractere
print(s[5])
print(s[-1])
0 1 2 3 4 5 # ERRO
print(s[6])
P y t h o n
-5 -4 -3 -2 -1 P
-6 n
n
No use str como identificador,
TypeError: 'type' object
pois nome de funo is not subscriptable
Erro relativo aos ndices
Seleo de partes da string

Alm de caracteres
individuais, voc print(s[0:2])
tambm pode selecionar
substrings, ou seja, print(s[:2])
fatias da string. print(s[3:6])

0 1 2 3 4 5 print(s[2:])

P y t h o n Py
-6 -5 -4 -3 -2 -1 Py
hon
thon
String vetor de caracteres

s = "Tolkien" from numpy import *

print(s) vet = array(['T', 'o',


'l','k','i','e','n'])

print(vet)

Tolkien ['T' 'o' 'l' 'k' 'i'


'e' 'n']
Strings so imutveis
:: strings vetores

s = "Tolkien" from numpy import *

s[0] = 'R' vet = array(['T','o',


'l','k','i','e','n'])
print(s)
vet[0] = 'R'

print(vet)

TypeError: 'str' ['R' 'o' 'l' 'k' 'i'


object does not 'e' 'n']
support item
assignment No possvel alterar
um caractere da string
Strings so imutveis
:: Crie uma nova string

s = "Tolkien" s = "Tolkien"

new = 'R' + s[1:] new = s.replace('T','R')

print(new) print(new) Troca a primeira


expresso pela
segunda

Rolkien Rolkien
Contedo Vetores e Strings

Introduo a vetores

Inicializao de vetores

Operaes com vetores

Introduo a strings

Operaes com strings


Operaes com strings
:: Tamanho, Converso, Concatenao

len(str1) Quantidade de caracteres

str(num) Converte nmero em string

s1 + s2 Concatena as strings s1 e s2

s1 * n Replica n vezes a string s1


Converso de strings para nmeros
e vice-versa

float() int()

N real String N inteiro

str() str()
Problema 7
:: Copiando o DNA
O DNA formado por uma
longa sequncia de bases
nitrogenadas, de quatro tipos:
Adenina (A), Citosina (C),
Guanina (G), Timina (T).
Durante a duplicao de uma
molcula de DNA:
A se une com T
C se une com G
Vice-versa
Leia uma sequncia de DNA e
determine a sequncia-cpia
correspondente.

49
Problema 7
Projetar algoritmo
Vetores so criados com tamanho fixo, que no pode ser
mudado ao longo do programa.
Strings podem mudar de tamanho ao longo do programa.
Basta usar a concatenao (+)

0 1 2 3 4 5

G A T A C A

C T A T G T
Problema 7
Script em Python
dna = input("Sequencia DNA: ").upper()

# Cria string vazia Previne entradas


copia = "" digitadas em minsculas

i = 0 # inicia contador Concatena smbolos


while i < len(dna):
string do DNA
if dna[i] == 'A':
copia = copia + 'T'
elif dna[i] == 'C':
copia = copia + 'G'
elif dna[i] == 'G':
copia = copia + 'C'
elif dna[i] == 'T':
copia = copia + 'A'
i = i + 1 # incrementa contador

print(copia)
Problema 8
:: De trs pra frente
Elabore um programa
que leia uma string.
Como sada, imprima a
string na ordem inversa.

52
Problema 8
Projetar algoritmo
0 1 2 3 4 5 6 7 8 9 10 11

A d a L o v e l a c e
-12 -11 -12 -9 -8 -7 -6 -5 -4 -3 -2 -1
len(s) ...
i

Contador (i):
Valor inicial: -1 (ltimo ndice da string)
Valor final: -len(s)
Incremento: -1 (decremento)
Problema 8
Script em Python
s = input("Digite uma string: ")

# String vazia
inv = ""

# Contador comeca no fim da string


i = -1
while i >= -len(s):
inv = inv + s[i]
i = i - 1
Desta vez, decremente
print(inv) o contador
Problema 9
:: Datas
Escreva um programa que leia
uma data no formato
dd/mm/aaaa.
Reescreva a data no seguinte
formato:
Dia-Ms-Ano
Regras:
Dia: se menor que 10, no
pode ter zero esquerda
Ms: string de exatamente
trs letras
Ano: quatro dgitos, igual
ao original.

55
Problema 9
Projetar algoritmo fatiando a string

0 1 2 3 4 5 6 7 8 9

d d / m m / a a a a
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1

dia mes ano

[:2] [3:5] [-4:]


Problema 9
Projetar algoritmo achando o ms
Para achar o ms, no prtico criar uma lista de doze
casos if-elif.
Em vez disso, guardamos a abreviatura dos meses em
uma string:

'JanFevMarAbrMaiJunJulAgoSetOutNovDez'

fim = ini + 3

ini = 3 * (mes 1)
Problema 9
Script em Python
nome_meses = 'JanFevMarAbrMaiJunJulAgoSetOutNovDez'

data = input("Informe a data (dd/mm/aaaa): ")

dia = int(data[:2]) Transformar a string em inteiro


mes = int(data[3:5]) remove o zero esquerda
ano = data[-4:]

# Indices do fatiamento
ini = 3 * (mes - 1)
fim = ini + 3

# Mes abreviado Concatenao


mes_abrev = nome_meses[ini : fim]

nova_data = str(dia) + '-' + mes_abrev + '-' + ano

print(nova_data)
Problema 9
Testes

07/09/1822 7-Set-1822 Independncia


do Brasil

20/02/1991 20-Fev-1991 Lanamento do


Python

07/06/1954 7-Jun-1954 Morte de Alan


Turing
Problema 10
:: Gabarito de prova
Leia dois vetores:
Gabarito de uma prova
de mltipla escolha
Respostas marcadas pelo
aluno.
Determine:
Quantidade de questes
na prova.
Quantidade de questes
marcadas erradas.
Percentual de acerto.

60
Problema 10
Projetar algoritmo
0 1 2 3 4 5 ...

D A E A C B ...

D B E D C B ...
Dois contadores:

i Percorre cada caractere das strings

erros Acumula n de erros


Problema 10
Script em Python
gab = input("Gabarito: ").upper()
Previne entradas
resp = input("Respostas: ").upper()
digitadas em minsculas
# inicia contadores
i = 0 # caracteres na string
erros = 0 # questoes marcadas erradas

while i < len(gab): ou i < len(resp)


if gab[i] != resp[i]:
erros = erros + 1
i = i + 1

print(len(gab)) # total de questoes


print(erros) # qtde de questoes erradas
# Percentual de acertos:
print(100 * (1.0 erros/len(gab)))
Referncias bibliogrficas
Menezes, Nilo Ney Coutinho (2014). Introduo
Programao com Python, 2 ed. 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.
Dvidas?