Contrôle da execução do programa
Os comandos centrais do Python são muito parecidos com os pseudo-comandos que vimos antes na parte de pseudo código.
Isto foi deliberado, visando tornar mais natural sua tradução de pseudo código para Python.
Para relembrar, estes eram os pseudo-comandos vistos então:
Para relembrar, estes eram os pseudo-comandos vistos então:
- Atribuição: x = 123
- Decisão: se x então: (lista indentada com outros comandos para executar neste caso)
- Decisão com alternativa: se x então: (lista de comandos) senão: (outra lista de comandos)
- Repetição indefinida: enquanto condição: (lista de comandos)
- Repetição um número de vezes: para cada x numa lista: (lista de comandos)
- Quebra de loop de repetição: break
atribuição
In [1]:
x = 123 # variável x recebe o valor 123
x
Out[1]:
In [2]:
x,y,z = 4,5,6 # podemos atribuir diversas variáveis num só passo
print(x,y,z)
In [4]:
a = 11 # modo elegante de trocar os valores de duas variáveis, coisa só (?) de Python mesmo
b = 22
print(a,b)
b,a = a,b
print(a,b)
In [5]:
L = list(range(1,11)) # inicializar L com lista de valores numéricos
L
Out[5]:
In [6]:
L = [x for x in range(1,10)] # mas usar comprehension é mais Pythonista
L
Out[6]:
comandos de decisão
Os comandos de decisão no Python são o if e seus casos com alternativas.
A sintaxe básica deste comando é if condição: (lista indentada de comandos). Se a condição for verdadeira a lista de comandos passa a ser executada.
A decisão com alternativa é assim:
if condição: (lista indentada de comandos) else: (outra lista de comandos) Neste caso se a condição for falsa, a lista de comandos após o else é que deve ser executada.
Note que após executar uma lista de comandos a execução do programa continua após o else (e a sua outra lista de comandos).
Neste ponto vale ressaltar a importância sintática da indentação de comandos no Python.
Como o interpretador sabe onde começa e termina uma determinada lista de comandos ("bloco" de comandos)?
O que torna isto enrolado é que blocos podem ocorrer dentro de outros blocos e assim por diante. Em outras linguagens como C ou Java usa-se chaves {} para englobar listas de comandos que devem ser tratadas como um todo, ou bloco.
No Python a sintaxe é muito mais leve, não existem chaves demarcadoras de blocos. Um bloco é simplesmente o conjunto de comandos que estão alinhados verticalmente. Um bloco dentro de outro é definido dando uma indentação adicional nos comandos e assim por diante.
De quantos espaçoes deve ser a identação de cada bloco? Não há uma
regra, o default costuma ser 4 espaços ou o que for equivalente a uma
tabulação (tab), mas deve ser consistente. Use o tab para indentar.
A sintaxe básica deste comando é if condição: (lista indentada de comandos). Se a condição for verdadeira a lista de comandos passa a ser executada.
A decisão com alternativa é assim:
if condição: (lista indentada de comandos) else: (outra lista de comandos) Neste caso se a condição for falsa, a lista de comandos após o else é que deve ser executada.
Note que após executar uma lista de comandos a execução do programa continua após o else (e a sua outra lista de comandos).
Neste ponto vale ressaltar a importância sintática da indentação de comandos no Python.
Como o interpretador sabe onde começa e termina uma determinada lista de comandos ("bloco" de comandos)?
O que torna isto enrolado é que blocos podem ocorrer dentro de outros blocos e assim por diante. Em outras linguagens como C ou Java usa-se chaves {} para englobar listas de comandos que devem ser tratadas como um todo, ou bloco.
No Python a sintaxe é muito mais leve, não existem chaves demarcadoras de blocos. Um bloco é simplesmente o conjunto de comandos que estão alinhados verticalmente. Um bloco dentro de outro é definido dando uma indentação adicional nos comandos e assim por diante.
if x < 9: # bloco externo contendo o if e o else
x = x + 1 # bloco interno executado se condição x < 9 for verdadeira
l = list('ababa')
else: # bloco externo contendo o if e o else
x = 0 # bloco interno executado se condição x < 9 for falsa
z = y + 2
outro = 354 # bloco externo do if, else e comandos seguintes
In [8]:
x = 0
if x < 9:
x = x + 1
print('x é menor que 9') # voce pode imprimir strings. Aliás, pode imprimir qualquer objeto.
In [9]:
if x > 0:
print('x é maior que zero')
x = x + 1
else:
print('x é igual ou menor que zero')
Existe ainda a decisão múltipla, onde queremos efetuar ações
dependendo de diversas condições testadas em cadeia (nota: a ordem dos
teste importa!):
In [10]:
if x == 0:
print('x igual a zero')
elif x == 1: # elif significa 'else if' e permite testar diversas alternativas em sequência
print('x igual a 1')
elif x == 2:
print('x igual a 2')
else: # else é usado como o caso final: não continuam alternativas após o else
print('caso imprevisto!')
repetição um número de vêzes
O comando Python que equivale ao nosso pseudo-comando "para cada" é o for condição: (lista indentada de comandos).
In [11]:
for x in range(1,4): # percorre os numeros de 1 a 3 e imprime os
print(x)
In [12]:
L = [1,4,7,9,5,2,1,8] # imprime os numeros pares desta lista de numeros
for n in L:
if n % 2 == 0:
print(n)
In [13]:
cor = ['branco', 'azul','verde','vermelho','preto'] # a função len() dá o comprimento de um string
for c in cor:
n = len(c)
print(c,n)
In [15]:
s = 'abracadabra' # quantas vezes a letra 'a' aparece no string?
soma = 0
for c in s:
if c == 'a':
soma = soma + 1
print(soma)
Vejamos um exemplo mais complexo. No exemplo vamos receber um texto
como um string, separá-lo em palavras numa lista (isto é feito pelo
método
split()
do tipo de dados string), aí percorrer esta
lista examinando cada palavra e seu comprimento. Se o comprimento for o
maior encontrado até então, lembra a palavra e o comprimento e continua o
procedimento. No final da lista imprime a maior palavra e seu tamanho.
In [19]:
texto = '''Falhei em tudo.
Como não fiz propósito nenhum, talvez tudo fosse nada.
A aprendizagem que me deram,
Desci dela pela janela das traseiras da casa.'''
words = texto.split() # split() quebra um string nos whitespaces
print(words) # words é a lista de palavras do texto dado
# agora quero achar a palavra mais comprida deste texto
# seja maximo o comprimento da maior palavra encontrada em cada passo
maximo = 0
maior_palavra = ''
for wd in words:
n = len(wd)
if n > maximo:
maximo = n
maior_palavra = wd
print(maximo, maior_palavra)
break
Com os dados do exemplo anterior vamos verificar se uma palavra dada
ocorre no texto. Para isto faremos a busca e ao encontrar a palavra (se
encontrar) usamos o comando break para pular fora da repetição. Experimente mudar a palavra.
In [22]:
pal = 'me' # palavra a ser procurada no texto
achei = False # variavel com valor booleano True ou False. Indica se achamos a palavra no texto
for w in words:
if w == pal:
achei = True
break
if achei:
print('Achei a palavra')
else:
print('Não consta')
Agora um exemplo com um for dentro do bloco de outro. Dada uma lista de strings achar o string que tem mais repetições do digito 7.
In [23]:
lst = ['123','7','229977','8765', '17772', '345']
st = '' # o string com mais 7s
max = 0 # maior numero de 7 achado
for s in lst: # percorre todos strings da lista dada
conta = 0 # numero de 7 em s
for c in s: # neste loop percorremos os caracteres do string s em questão
if c == '7':
conta = conta + 1
if conta > max: # Agora compara a contagem com o maximo já achado
max = conta
st = s
print(max, st)
Repetição indefinida
O comando Python que equivale ao nosso "enquanto" é o while condição: (lista indentada de comandos). Enquanto condição for verdadeira o bloco é repetido.
Um comando de entrada do Python é o
Um comando de entrada do Python é o
input()
que lê um string digitado pelo usuário e retorna-o quando for digitado enter. O operador != é usado para verificar se dois termos de uma expressão são diferentes. Assim:123 != 456 # o valor da expressão é True pois são termos diferentes
78 != 78
In [2]:
s = input() # enquanto não for digitado 'q' continue lendo entrada por teclado
while s != 'q':
s = input()
print('Fim.') # se chegou aqui então um 'q' foi entrado
Alguns exemplos
Vamos codificar em Python os exercícios propostos nas listas 1 e 2.
Atenção: a função
Como ainda não vimos definição de funções, navegação em diretórios nem leitura de arquivos vamos pular alguns exercícios. Por enquanto.
Atenção: a função
input()
retorna um string mesmo que você digite um número. Para converter de string numérico em número use a função int()
para inteiros ou float()
para decimais.Como ainda não vimos definição de funções, navegação em diretórios nem leitura de arquivos vamos pular alguns exercícios. Por enquanto.
ex 1.1 Leia um número (use a função input). Calcule a soma dos
quadrados de todos numeros inteiros de 1 até o numero lido. Imprima esta
soma.
In [5]:
sn = input() # le string numérico
n = int(sn) # converte para número
soma = 0
for i in range(1, n + 1): # percorre os numeros de 1 a n inclusive
soma = soma + i * i # acumula o quadrado de i em soma
print('Soma dos quadrados =', soma)
ex 1.4 Leia um string entrado pelo usuário e procure sub strings
formados por letras 'a' consecutivas. Conte o tamanho de cada sub string
e imprima o tamanho do maior deles.
Comentário: este exemplo contém uma pegadinha sutil. Precisamos controlar cuidadosamente o início e o fim de cada segmento de 'a' consecutivos. Os eventos que devemos detetar são:
Comentário: este exemplo contém uma pegadinha sutil. Precisamos controlar cuidadosamente o início e o fim de cada segmento de 'a' consecutivos. Os eventos que devemos detetar são:
- estamos fora de segmento
- iniciou um segmento
- estamos dentro de um segmento
- terminou um segmento
In [9]:
s = 'ababbnaaameirtooaaaaaaaoogaaaaheaaiiiinuaaaaaaattttaaaaaaaauuumaaa' # o string fornecido
maximo = 0 # tamanho do maior segmento de 'a'
max_seg = '' # o maior segmento de 'a's
em_seg = False # esta variavel será True se um segmento de 'a' esta sendo percorrido
conta = 0 # comprimento do segmento corrente
seg = '' # o segmento de 'a's corrente
for c in s:
if c == 'a':
if not em_seg:
em_seg = True # inicio de um segmento
conta = 1
seg = 'a'
else:
conta = conta + 1 # estamos num segmento, então conta mais um 'a'
seg = seg + 'a'
else: # caracter lido não é um 'a'
if em_seg:
em_seg = False # fim de um segmento
if conta > maximo:
maximo = conta
max_seg = seg
seg = '' # reinicializa estas variáveis a cada fim de segmento
conta = 0
print('Maior segmento encontrado =', max_seg, maximo)
Chega por hoje. Na próxima vamos resolver os exercícios da lista 2 e introduzir o poderoso conceito de função, ponto muito importante do Python.
No comments:
Post a Comment