Escolar Documentos
Profissional Documentos
Cultura Documentos
Considere o nosso MSC. O Processador Central, “entende” o conjunto de instruções, leia, imprima, atribuição
e condicional e com ela resolvemos vários problemas.
Encontramos então uma solução para o problema e depois expressamos essa solução naquele conjunto de
instruções do MSC. A solução do problema é o Algoritmo que resolve esse problema e o conjunto de
instruções numa determinada linguagem é o Programa.
Um Algoritmo é então uma lista passo-a-passo de instruções que, caso sejam seguidas exatamente, resolve o
problema. Para que seja um algoritmo essa lista de instruções passo-a-passo tem que ser bem definida, finita e
sempre produzir o mesmo resultado.
As instruções que definimos no MSC são de fato, instruções simbólicas (escritas em português), mas que
seguem uma forma rígida de construção. Um computador real não “entende” direto uma linguagem simbólica
como a que usamos. Além disso, os programas para serem executados precisam estar dentro da memória do
computador, onde são armazenados apenas valores numéricos. A linguagem “entendida” pelos computadores
reais são as linguagens de máquina.
A linguagem de máquina nada mais é que uma codificação numérica da linguagem simbólica.
Linguagens simbólicas são chamadas de linguagens de alto nível. O computador não “entende” diretamente
a linguagem de alto nível. Para que um programa ou um algoritmo possa ser executado pelo computador, este
precisa ser traduzido para a linguagem de máquina.
A linguagem de alto nível, embora simbólica, possui um formato rígido (sintaxe). Daí poder ser traduzida
automaticamente para a linguagem de máquina. Automaticamente quer dizer, ser traduzida por um programa
que se chama COMPILADOR.
O processo de compilação
Execução do programa
A função do compilador é, portanto traduzir um programa em LAN (código fonte) para LM (código objeto ou
executável). Cada LAN possui o seu compilador, que nada mais é que um tradutor desta LAN para a LM.
A linguagem Python é uma LAN.
Outra forma para que o computador consiga executar um programa escrito em uma LAN é o uso de um
programa interpretador (Máquina Virtual). Um programa em LAN não precisa ser necessariamente traduzido
para a LM para ser executado. Pode ser traduzido para uma linguagem intermediária (em geral chamada de
ByteCode) que será interpretada por um programa interpretador. É um recurso bastante útil, pois torna o
programa executável independente de máquina.
Este é o caso geral de programas em Python. São interpretados e não compilados. O desempenho de um
programa interpretado é em geral menor que o de um programa compilado. Isso não faz muita diferença no
caso de programas que demandam pouco tempo de execução.
Execução do programa
Podemos abstrair a existência da Linguagem Intermediária e pensar apenas que o programa em Python é
simplesmente interpretado.
Execução do programa
Conforme sabemos, existem centenas de linguagens de alto nível. Citando apenas algumas das principais –
Fortran, Cobol, Algol, PL/1, Pascal, C, C++, PHP, Java. Cada uma delas foi definida com certos objetivos
específicos, aplicabilidades em áreas e problemas para as quais se mostravam mais adequadas.
A linguagem Python tem história recente e pertence a uma classe recente de linguagens ditas orientadas a
objetos. A seguir, uma breve história e cronologia:
Concebida em 1989 por Guido van Rossun no Instituto de Pesquisa Nacional para Matemática e Ciência da
Computação (CWI), nos Países Baixos, a linguagem se mostrou mais produtiva que a linguagem C embora
com desempenho menor.
Possui uma sintaxe derivada da linguagem C, mas incorpora construções bastante avançadas de outras
linguagens como Icon, Haskell, Modula-3 e Perl.
1995 – 1999 – novas versões. Guido van Rossun trabalhou no CNRI em Reston, EUA
2008 – versão 2.8 e início da transição para a versão 3.0 (atual). A linguagem já é utilizada
em servidores de aplicação, computação gráfica, linguagem de script, bancos de dados, etc.
O interpretador pode ser usado no modo linha de comando (“shell mode”) e no modo de
script (“program mode”). No modo de linha de comando, você digita comandos ou
expressões em Python e o interpretador mostra o resultado se houver a cada linha digitada.
O símbolo >>> é chamado de prompt do Python. O interpretador usa o prompt para indicar
que está pronto para receber um comando. Ao digitar 2 + 3, o interpretador avalia a
expressão e responde 5. A seguir, ele fornece um novo prompt na linha seguinte, indicando
que ele está pronto para um novo comando.
O modo linha de comando é conveniente para testar pequenos pedaços de código, pois você
recebe uma resposta rapidamente. Para qualquer coisa maior que algumas linhas é melhor
usar o modo script.
Estrutura do programa:
Um programa simples em Python é uma sequência de comandos:
# comandos do programa
...
...
O símbolo # indica que a frase a seguir na mesma linha é um comentário do programa. Usado para deixar
mais claro o que determinado comando ou conjunto de comandos realiza.
Variáveis
Uma variável é um nome que se refere a um valor. Um comando de atribuição cria uma nova variável e lhe
atribui um valor.
Variáveis são usadas para guardarmos valores que serão usados mais tarde no programa.
Atribuição
Um comando é uma unidade de código que o interpretador pode executar. Um comando de atribuição tem a
seguinte forma:
variável = expressão
Significado:
Exemplos:
num = 15
soma = 0 # este é um comentário
soma = soma + num
a = 3
b = 4
x = (a + b) / (a – b)
y = y + 1
x_quad = x * x
delta = b * b – 4 * a * c
novo_x = (x + y) * (x – y) / xquad
Cada nome de variáveis é uma letra ou o símbolo '_' (underscore) seguida de letras, números e '_'.
Atenção, maiúscula é diferente de minúscula. Assim, maior, MAIOR e Maior são variáveis diferentes.
Expressão aritmética
As expressões aritméticas são escritas na forma usual em linha, contendo constantes, variáveis, parêntesis e os
operadores mais comuns: + (adição) , - (subtração), * (multiplicação), / (divisão), **
(exponenciação), % (resto da divisão) e // (divisão inteira). Veremos à frente com mais detalhes os
operadores % e // que são usados para tratamento com valores inteiros.
A prioridade dos operadores também é a usual na tabela abaixo. Expressões entre parêntesis são calculadas
antes alterando assim a prioridade. Em caso de mesma prioridade o cálculo é feito da esquerda para a direita:
Nível Operadores
3 (alto) **
2 *,/,//,%
1 (baixo) +,-
Há uma exceção à regra da esquerda para a direita quando o operador é ** (exponenciação). Razões
históricas provocaram esta definição:
print()
print("Olá, mundo!")
print("A soma é", soma)
Olá, mundo!
A soma é 15
a = 3
b = 4
soma = a + b
print("A soma de", a, "+", b, "eh igual a", soma)
Saída:
A soma de 3 + 4 eh igual a 7
input()
Um programa pode utilizar a função input() para receber os dados ou valores que um usuário fornece
através do teclado. O formato típico de um comando leitura é
O programa pára e espera pela digitação de algum texto seguido do ENTER. "mensagem
de Prompt" é opcional e pode indicar o que programa deseja. Por exemplo,
O valor que o usuário fornece e que será retornada pelo input() será sempre a cadeia de caracteres que foi
digitada, ou seja um string e não um número. Quando o operador + é realizado sobre strings, elas são
concatenados (“grudados”) em vez de adicionados. Como veremos mais tarde, a operação de concatenar
strings através do operador + é muito útil.
Não resolvemos o nosso problema. Desejamos adicionar dois números inteiros. Precisamos, portanto de uma
maneira para converter uma string em um número inteiro. Usamos para isso a função de conversão int().
int()
a = int("123")
print("valor inteiro =", a)
A string deve ser algo como "123" ou "-5". Strings com caracteres estranhos à constantes
inteiras ocasionam erros de sintaxe. Exemplos:
>>> a = int("1.5")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.5'
>>> a = int("a156")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a156'
A solução ficaria:
# imprima a soma
print("A soma de", a_int, "+", b_int, "eh igual a", soma)
Como não precisamos guardar os valores na forma de texto, podemos simplificar o programa compondo as
funções int() e input() da seguinte forma:
Strings
Valores
Programas manipulam valores. Valores podem ser de diferentes tipos ou classes. Até agora
vimos que um valor pode ser um número inteiro (classe int) ou um texto (classe str). Por
exemplo, "Oi" é um string (valor da classe str), 23 é um inteiro (valor da classe int), e
"23" é um string (valor da classe str).
Abaixo alguns exemplos que esclarecem o conceito de tipos ou classes. A função type() mostra o tipo do
valor.
>>> type("Oi")
<class 'str'>
>>> type(23)
<class 'int'>
>>> type("23")
<class 'str'>
>>> type(1.5)
<class 'float'>
Nestas notas sempre que um problema se referir a DADOS, significa que estes devem ser digitados pelo
usuário. O programa deve sempre imprimir o resultado calculado.
Enquanto na maioria das demais linguagens a indentação é opcional, apesar de ser uma boa
prática, pois melhora muito a compreensão do código fonte, em Python ela é obrigatória.
O editor de texto do Python já fornece um tipo de indentação bastante usual, porém o estilo
é livre e depende do gosto do programador. O importante é que os comandos de mesma
hierarquia iniciem na mesma coluna de cada linha.
No decorrer do curso ficará mais claro o que significa essa hierarquia de comandos.
P4.2) Dados 2 números, calcular a soma, subtração, multiplicação e divisão
Como já devem ter notado não é necessário que tenhamos 4 variáveis neste programa.
c = a + b
print("A soma de", a, "+", b, "eh igual a", c)
c = a - b
print("A subtração de", a, "-", b, "eh igual a", c)
c = a * b
print("A multiplicação de", a, "*", b, "eh igual a", c)
c = a / b
print("A divisão de", a, "/", b, "eh igual a", c)
Observe que o valor resultado da divisão pode ser um valor fracionário. A mesma variável c que recebeu
valores inteiros nas operações de +, - e *, recebe um valor fracionário (classe float) na operação /.
Exercícios:
leia a, b
se a > b
então imprima a
senão imprima b
Em Python:
Outra forma:
leia a, b
se a > b
então maior ← a
senão maior ← b
imprima maior
Em Python:
P4.5) Idem, supondo que podem ser iguais. Neste caso imprimir “iguais”
leia a, b
se a > b
então imprima a
senão se b > a
então imprima b
senão imprima “iguais”
Em Python:
Essa última introduz a construção elif, usada quando há um if após um else (else if).
Outra forma:
leia a, b
se a = b
então imprima “iguais”
senão se a > b
então imprima a
senão imprima b
Em Python:
Outra forma:
leia a, b
se a = b então imprima “iguais”
se a > b então imprima a
se a < b então imprima b
Apesar de correta, essa maneira de resolver faz com que sempre sejam efetuadas as 3 comparações. A solução
anterior faz apenas 1 ou 2 comparações. Nesse sentido, dizemos que essa última forma é menos eficiente que
a anterior.
Essa solução também tem uma particularidade. Não há a parte do senão. Na linguagem Python, a parte do
senão (else) é opcional.
Em Python:
Nos exemplos acima vimos as várias formas do comando if. O comando envolve sempre a avaliação de uma
condição para decidir o que será executado. A condição pode ser uma expressão lógica ou expressão booleana
como veremos a frente. Vamos supor por enquanto que a condição é simplesmente uma comparação de dois
valores usando os operadores relacionais:
== (igual), > (maior), < (menor), >= (maior ou igual), <= (menor ou igual), != (diferente)
Exemplos:
a > b
c <= 0
x == y
x != -32
a + b < (c + d) * 5
b * b – 4 * a * c >= 0
a) seleção binária
if <comparação>:
comandos-1 # executados se a comparação for verdadeira
else:
comandos-1 # executados se a comparação for falsa
Exemplo:
if a > b:
print(a)
print(b)
else:
print (b)
print (a)
if <comparação>:
comandos-1 # executados se a comparação for verdadeira
Exemplo:
if a > b:
print(a)
print(b)
É um caso particular dos tipos acima. Note que comandos, comandos-1 e comandos-2 podem ser
quaisquer comandos. Em particular podem ser o próprio comando if.
No exemplo abaixo, é impresso aquele que é maior ou igual dentre os três valores:
if a >= b:
if a >= c:
print (a)
else:
print (c)
else:
if b >= c:
print (b)
else:
print (c)
if a >= b:
if a > c:
print (a)
else:
print (c)
elif b >= c:
print (b)
else:
print (c)
# ler um algarismo
n = int(input("Digite um dígito entre 0 e 9: "))
Nas definições acima comandos, comandos-1 e comandos-2 tem que ter pelo menos um comando.
if a > b:
print (a)
else:
print (b)
print (“fim”)
if a > b:
print (a)
else:
print (b)
print (“fim”)
Exercícios:
P4.7) Dados 2 números imprimi-los em ordem crescente. Considere ordem crescente quando o primeiro é
menor ou igual ao segundo.
P4.9) Dados 3 números determinar o menor. Considere menor, o que for menor ou igual aos outros.
P4.10) Dados 3 números imprimi-los em ordem crescente. Considere ordem crescente quando for menor ou
igual ao seguinte.
P4.11) Idem imprimindo em ordem decrescente. Considere ordem decrescente quando for maior ou igual ao
seguinte.
P4.12) Dados 3 números inteiros positivos verificar se são lados de um triângulo retângulo.
P4.13) Idem, verificando se são lados de algum triângulo, isto é, se o maior é menor que a soma dos outros
dois.