AIB 1P 1parte

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 187

1

Aplicações Informáticas B
Introdução à Programação
2 Objetivo da programação

 A Programação procura analisar os problemas no seu todo e


ter a noção da sua amplitude, isto é, identificar as suas partes
e, consequentemente, resolvê-los de uma forma estruturada e
sistemática
3 Problemas

 Obter 3 números inteiros consecutivos cuja soma seja 75

 sendo x o primeiro dos três números, os restantes são x+1 e x+2

 assim temos a seguinte equação: x + (x+1) + (x+2) = 75 → 3x = 72 → x =


24

 os números são: 24, 25 e 26 


4 Problemas

 Numa capoeira há galinhas e coelhos. Contam-se 140 patas e 50


cabeças. Quantos coelhos há?
 sabe-se que um coelho possui 4 patas e 1 cabeça e uma galinha
possui 2 patas e 1 cabeça

 sendo x o n.º de coelhos e y o n.º de galinhas, chega-se às


seguintes equações: 4x + 2y = 140 (para o caso das patas) e x + y
= 50 (para o caso das cabeças)

 assim: x = 20 (coelhos) e y = 30 (galinhas) 


5 Enquadramento da área profissional

 Área de Desenvolvimento
 A informatização de uma organização ou empresa com alguma
dimensão implica o desenvolvimento de muitos recursos, tanto a
nível humano como a nível material
 Seria impensável que uma única pessoa desenvolvesse um
sistema de informação para responder às necessidades da
organização fruto da inerente complexidade
6 Enquadramento da área profissional

 Área de Desenvolvimento
 O responsável pelo desenvolvimento de um sistema de
informação deve:
ser responsável pelo levantamento das necessidades, com
vista a conceber um sistema de informação que suporte o
funcionamento dessa empresa
ser responsável pela manutenção desse mesmo sistema

 O departamento de informática é integrado por várias pessoas


com funções bem definidas, tais como, analistas de sistemas,
programadores, operadores de dados…
7 Enquadramento da área profissional

 O Analista de Sistemas é responsável por:


 documentar as operações do sistema atual
 definir as necessidades para desenvolver o sistema
 fazer o levantamento das necessidades através de entrevistas
 definir as especificações do sistema e documentá-lo
 aplicar a tecnologia atual à solução do problema
 assegurar a eficácia do sistema a implementar
 definir procedimentos e controlos para segurança do sistema
 desenvolver planos de conversão e teste do sistema
 etc.
8 Enquadramento da área profissional

 O Programador
 Tem como principal função conceber os programas que foram
especificados pelos analistas de sistemas, traduzindo para uma
linguagem de programação a solução de um problema, bem
como a respetiva implementação

 É responsável por:
documentar os programas de acordo com as normas
definidas
codificar os programas em linguagens de programação
autorizadas
desenvolver programas de teste
etc.
9 Enquadramento da área profissional

 O Programador (continuação)
 De entre as competências relevantes podem-se apontar:
capacidade de reflexão
trabalho em equipa
aptidão de síntese
perspetivar as várias partes de um problema
desenvolver um estilo de programação
elaborar programas de forma estruturada
10 Linguagens

 Definição de linguagem – forma de comunicação que utiliza


símbolos e regras para os combinar
 Conceitos inerentes às linguagens:
 linguagem – associação de formas com significado;
 sintaxe – especificação da combinação das formas;
 semântica – especificação dos significados.
 As linguagens podem dividir-se em naturais ou formais:
 uma linguagem natural não é projetada sendo ao que
usualmente recorremos para comunicar oralmente ou por escrito
(ex.: o português, inglês, espanhol, etc.)
 as linguagens formais são criadas para determinados fins,
delineadas de modo a evitar equívocos na sua utilização (ex.:
matemática, linguagens de programação, etc.)
11 Linguagens de Programação

 As Linguagens de Programação têm como objetivo permitir a escrita


de programas utilizados pelo computador, tais como:
 Processadores de texto
 Folhas de cálculo
 Sistemas operativos
 Programas de tratamento de imagens e gráficos
 Jogos
 etc.
12 Linguagens de Programação

 Um programa de computadores é constituído por uma sequência de


instruções que permitem indicar ao processador da máquina as
ações consecutivas a executar

 Normalmente, estes programas são escritos (codificados) com


recurso às linguagens de programação

 Estas são projetadas para as aproximar da linguagem humana, isto


porque as linguagens-máquina apenas manipulam dados binários,
isto é, uma sucessão dos valores lógicos (0’s e 1’s)
13 Linguagens de Programação

 As linguagens de programação apresentam um método normalizado


para a elaboração das instruções dos programas de computadores
 Recorrem a um conjunto de regras sintáticas e semânticas da
linguagem em causa, sendo do tipo formal
 Conceitos inerentes às linguagens de programação:
 Linguagem de programação – Sistema de escrita formal
constituído por um conjunto de regras para a escrita de
programas de computador;
 Programa (código) – Conjunto de instruções numa linguagem de
programação;
 Instrução – Especificação ao processador da ação a executar.
14 Linguagens de Programação

 Existem milhares de linguagens de programação que podem ser


classificadas de diversas formas

 Duas das classificações mais comuns são segundo:


 a sua geração – consideram-se as características de evolução
das linguagens de programação;
 o seu nível – de acordo com a maior ou menor aproximação da
linguagem de programação a uma linguagem natural
15 Linguagens de Programação

Nível Geração Descrição Linguagens

Linguagem diretamente executável pelo processador do Linguagem-máquina


Baixo 1.ª
computador; usa apenas valores binários (0’s e 1’s). ou binária

Linguagem de baixo nível que utiliza uma notação


simbólica compreensível pelo ser humano, com uma
Baixo 2.ª correspondência direta com o código de uma Linguagem Assembly
determinada máquina. Necessita de um assembler para
traduzi-la em linguagem-máquina
Primeiras linguagens de alto nível projetadas para serem Fortran, ALGOL,
facilmente entendidas e escritas pelo ser humano. A partir COBOL, BASIC, Visual
Alto 3.ª desta geração, as linguagens necessitam de compiladores Basic, C, C++, C#,
ou interpretadores para as traduzir para a linguagem- Pascal, Python e
máquina Java
Linguagens capazes de gerar código por si sós. A principal
diferença entre as linguagens de 3.ª e 4.ª geração é que as
primeiras descrevem passo a passo como fazer algo,
MATLAB, SQL,
Alto 4.ª enquanto as últimas especificam o que deve ser feito,
Clipper, DBase
estando mais voltadas para o resultado final. Desta forma,
as linguagens de 4.ª geração dispensam o conhecimento
profundo das funções de programação
16 Linguagens de Programação

Nível Geração Descrição Linguagens


Linguagens “inteligentes” tendem a uma maior
aproximação entre a linguagem natural e a linguagem de
programação. Os utilizadores comunicam na sua
LISP, Prolog, OPS5,
Alto 5.ª linguagem nativa, não necessitando de seguir a sintaxe do
Mercury
programa. A linguagem deduz, infere e tira conclusões,
apoiando-se na informação contida em bases de
conhecimento

Exercícios de aplicação 1 (pág. 10 do manual)


17 Paradigmas de programação

 A partir das características de uma linguagem de programação,


categoriza-se em um ou mais paradigmas (def.: algo que serve de
exemplo geral ou de modelo)
 O paradigma de uma linguagem de programação é a sua
identidade
 Corresponde a um conjunto de características que, juntas, definem
como ela opera e resolve os problemas
 Algumas linguagens possuem mais de um paradigma, sendo
intituladas multiparadigma
18 Paradigmas de programação

 Eis alguns dos principais paradigmas mais comuns na atualidade:


 funcional
 lógico
 declarativo
 imperativo
 orientado a objetos
 orientado a eventos
19 Paradigmas de programação – funcional

 O foco desse paradigma está na avaliação de funções, tal como na


matemática quando temos, por exemplo, uma função f(x) = x+2
 x é um parâmetro (o valor de entrada) e, após a expressão ser
avaliada, obtêm-se o resultado
 se o valor de entrada for 2, o resultado da avaliação da função
será 4
 Algumas das linguagens deste paradigma: F# (da Microsoft), Lisp,
Haskell, Erlang, Elixir, Mathematica
 É possível desenvolver de forma “funcional” mesmo em linguagens
não estritamente funcionais: por exemplo, no PHP, que é uma
linguagem multiparadigma
20 Paradigmas de programação – lógico

 Também é conhecido como “restritivo”


 É muito utilizado em aplicações de inteligência artificial
 Neste paradigma chega-se ao resultado esperado a partir de
avaliações lógico-matemáticas
 A lógica proposicional, estudada em Filosofia, permite entender
como opera uma linguagem deste paradigma
 Principais elementos do paradigma:
 Proposições – base de conhecimentos concretos e conhecidos
 Regras de inferência – definem como deduzir proposições
 Busca – estratégias para controlo das inferências
21 Paradigmas de programação – lógico

 Exemplo:
 Proposições – “Chico é um gato.”
 Regras de inferência – “Todo gato é um felino.”
 Busca – “Chico é um felino?”
 a resposta para a Busca acima precisa ser verdadeira, caso em
que se tiraria a conclusão lógica: “Se Chico é um gato e todo
gato é felino, então Chico é um felino”
 A linguagem mais conhecida deste paradigma é a Prolog
 Este paradigma é pouco usado em aplicações comerciais,
aplicando-se mais na área académica, mas cada vez mais em
expansão
22 Paradigmas de programação – declarativo

 O paradigma declarativo é baseado no lógico e no funcional


 As linguagens declarativas descrevem o que fazem e não
exatamente como suas instruções funcionam
 As linguagens de marcação são o melhor exemplo: HTML, XML, XSLT,
XAML, SQL, etc.
 Não obstante, o Prolog (reconhecido pelo paradigma lógico)
também é uma linguagem declarativa
23 Paradigmas de programação – imperativo

 As linguagens clássicas como C, C++, Python, PHP, Perl, C#, Ruby,


etc., são alguns exemplos deste paradigma
 Quando se fala em “programação procedural” ou em
“programação modular”, de um modo geral, enquadram-se neste
paradigma
 Neste paradigma o enfoque incide sobre a mudança de estados de
variáveis (o que não ocorre nos anteriores)
 De uma forma análoga ao comportamento imperativo das
linguagens naturais que expressam ordens, os programas imperativos
são uma sequência de comandos para o computador executar
24 Paradigmas de programação – orientado a
objetos (POO)
 Atualmente é o mais difundido
 Neste paradigma, em vez de se construírem os programas com um
conjunto de rotinas (típico das linguagens imperativas), recorre-se a uma
lógica que mimetiza o mundo real, lidando com objetos (estruturas que
conhecemos e compreendemos profundamente)
 OO é sigla para Orientação a Objetos
 No POO existe uma grande preocupação em esconder o que não é
importante e em realçar o que é
 Em POO implementa-se um conjunto de classes que definem objetos;
cada classe determina o comportamento (definido nos métodos) e
estados possíveis (atributos) dos seus objetos, assim como o
relacionamento entre eles
 Este é o paradigma mais utilizado em aplicações comerciais e sendo
algumas das principais linguagens que o implementam: C#, Java, PHP,
Ruby, C++, Python, etc.
25 Paradigmas de programação – orientado a
eventos
 Toda as linguagens que recorrem a interfaces gráficas baseam-se
neste paradigma
 Nele, o fluxo de execução do s/w é baseado na ocorrência de
eventos externos, normalmente disparados pelo utilizador
 O utilizador, ao interagir com a aplicação em execução, decide
digitar texto, clicar num botão “gravar”, etc.; estas decisões
desencadeiam eventos, sendo estes programados na linguagem de
programação deste paradigma
 Eis algumas linguagens de programação deste paradigma: Delphi,
Visual Basic, C#, Python, Java, etc.
26 Conceitos

 Programa – conjunto de instruções compreendidas por uma máquina


(linguagem-máquina), logicamente organizadas, que permitem ao
computador executar as tarefas que lhe são pedidas

 Programa-fonte – é o conjunto de instruções escrito numa linguagem


de programação que originam o programa

 Programa-objeto – é o programa obtido após a tradução do


programa-fonte
27 Conceitos

 A tradução do programa-fonte para linguagem-máquina é feita


utilizando outros programas designados por:

 Interpretadores – traduzem cada linha do programa-fonte e


executam imediatamente a linguagem-máquina resultante,
havendo necessidade de voltar a traduzir cada linha sempre que
haja necessidade de executar o programa

 Compiladores – realizam a tradução integral do programa-fonte,


gerando um programa-objeto, escrito em linguagem-máquina,
que pode ser executado pelo computador sem haver
necessidade de novas traduções
28 Conceitos

Vantagens Desvantagens
• Rapidez de execução • Requer etapas de tradução
• Admitem estruturas de • O programa final é maior,
programas mais necessitando de mais
Compiladores completas memória para ser executado
• Permite otimização do • O processo de correção de
programa-fonte erros (depuração) é mais
demorado
• A depuração do • A execução do programa é
programa é mais mais lenta
simples • As estrutura de dados são
• Requer menos mais simples
Interpretadores
memória • É necessário fornecer o
• Resultado imediato do programa-fonte ao utilizador
programa ou rotina final
desenvolvida
29 Fases de Elaboração de um Programa

1. Definição do Problema

2. Planificação da Resolução

3. Codificação

4. Teste e Depuração

5. Documentação

6. Manutenção
30 Abordagem Top-Down

 A abordagem top-down (abordagem descendente ou abordagem do topo


para a base) é um método de abordagem dos problemas em que se
procura identificar os pontos essenciais da questão e se parte dos pontos
mais gerais para os mais particulares ou detalhes, em níveis sucessivamente
mais concretos, até ao nível de pormenor desejado
31 Abordagem Top-Down

 Suponhamos um problema: fazer chá…


32 Algoritmo – conceito

 Uma linguagem de programação permite criar programas que


desencadeiam processos suportados por computadores, visando
resolver problemas

 A transição do problema para o


programa, passa por uma fase de
análise cujo elemento central é o
algoritmo:
 que possibilita a compreensão e a
descrição do problema
 de fácil conversão para qualquer
linguagem de programação
33 Algoritmo – conceito

 O conceito de algoritmo relaciona-se com o de programa de


computador, mas distingue-se dele:
 Algoritmo – conjunto finito de regras bem determinadas para a
resolução de um problema, através de um número finito de
operações
 Programa (… de computador) – conjunto de instruções
destinadas a serem processadas num sistema informático
 O conceito de algoritmo aplica-se a muitas outras áreas para além
da Informática: à Matemática, à Física, ou a atividades práticas da
nossa vida quotidiana
 Os programas de computador podem basear-se num determinado
algoritmo ou consistirem num conjunto complexo de algoritmos e/ou
subalgoritmos
34 Algoritmo – formas de representação

 Linguagem Natural – forma mais espontânea de representação de


algoritmos, pois descrevemos os passos do algoritmo utilizando a
linguagem quotidiana

 Pseudocódigo – o mais utilizado por programadores, pois obriga o uso


de estruturas que facilitam o entendimento do algoritmo, e também
facilitam a transformação do mesmo em códigos reais

 Fluxograma – recorre a símbolos específicos para a representação de


algoritmos; os símbolos relacionam-se através de setas especificando
os caminhos possíveis na sua execução
35 Algoritmo – formas de representação

 Linguagem Natural – forma mais espontânea de representação de


algoritmos, pois descrevemos os passos do algoritmo utilizando a
linguagem quotidiana

1. Preparar uma lâmpada nova


2. Retirar a lâmpada fundida
3. Colocar a lâmpada nova
36 Algoritmo – formas de representação

 Pseudocódigo – o mais utilizado por Inicio


programadores, pois obriga o uso de Leia(a, b)
estruturas que facilitam o sa+b
entendimento do algoritmo, e
Escreva(s)
também facilitam a codificação do
mesmo Fim

 Sem qualquer padronização definida,


recorre a aspetos das linguagens de
programação estruturadas (como a
sintaxe e os elementos que constam
ao lado) e aos termos das linguagens
naturais
37 Algoritmo – formas de representação

 Fluxograma – recorre a símbolos específicos para a representação de


algoritmos; os símbolos relacionam-se através de setas especificando
os caminhos possíveis na sua execução
38 Algoritmo – formas de representação

 Os fluxogramas são mais visuais, mais expressivos e de leitura mais


fácil, contudo tornam-se mais difíceis de concretizar, principalmente
para algoritmos extensos
 Torna-se então mais prático exprimir os algoritmos sob a forma de
pseudocódigo o que também contribui para o converter num
programa
39 Algoritmo – elaboração

 Para construir um algoritmo, é necessário:


40 Algoritmo – elaboração

 Problema: pretende-se somar 2 números inteiros


 Se tentarmos resolver este problema, verificamos rapidamente
que nos falta algo… quais são os números?
1. Se nos disserem que são o 5 e o 7…
2. … então realizamos o cálculo mental 5+7…
3. … e dizemos que a soma dá 12.

 Identificamos assim 3 fases que se encontram na grande maioria


dos programas ou sistemas informáticos, dos mais simples aos mais
complexos: Entrada Saída
Processamento
(Input) (Output)

1. 2. 3.
5, 7 5+7=12 12
41 Algoritmo – elaboração

 Problema: pretende-se somar 2 números inteiros (continuação)


 E se não forem os números 5 e 7, como podemos representar uma
situação em que desconhecemos os números a somar?

 Podemos recorrer a uma representação para cada número


desconhecido, por exemplo: a e b; e ainda uma representação
para o resultado da soma: s

 O esquema anterior fica assim:

Entrada Processamento Saída


(a, b) (s  a + b) (s)

1. 2. 3.
5, 7 5+7=12 12
42 Algoritmo – elaboração

 Relembremos a definição dada sobre fluxograma: representação


que recorre a símbolos específicos para a representação de
algoritmos, sendo estes relacionados através de setas especificando
os caminhos possíveis na sua execução
 Temos, para já, os seguintes símbolos:

Símbolo terminal que marca o início do fluxograma

Caixa de entrada/saída (Input/Output)

Caixa de processamento, onde se expõem os cálculos


que transformam entradas em saídas

Linha de fluxo (seta)


43 Algoritmo – elaboração

 Uma representação alternativa ao fluxograma anterior, poderia ser o


pseudocódigo seguinte:

Início

Leia(a, b) Início
Leia(a, b)
sa+b
sa+b
Escreva(s)
Fim
Escreva(s)

Fim
44 Algoritmo – elaboração

 O algoritmo nas 3 formas de representação:

1. Obter dois números inteiros Início


Leia(a, b)
2. Calcular a soma dos números lidos sa+b
3. Apresentar a soma calculada Escreva(s)
Fim
45 Algoritmo – teste e controlo de erros

 O teste e o controlo de erros num algoritmo permite detetar erros e


verificar se resolve o problema pretendido

 Para tal, usa-se a técnica do traçagem (tracing), que permite


acompanhar, passo a passo, a execução de um algoritmo,
eliminando, desta forma, a possibilidade de ocorrência de erros

 A traçagem consiste, assim, em testar um algoritmo com valores de


entrada, observando o comportamento interno ao longo dos vários
passos que compõem o algoritmo
46 Algoritmo – teste e controlo de erros

 Nesta técnica, começa-se por criar uma tabela


 No cabeçalho colocam-se as variáveis, as expressões lógicas e as
operações que se pretendem testar
 Na primeira coluna enumeram-se os passos
 Preenche-se a tabela passo-a-passo, atribuindo valores às variáveis e
efetuando as operações presentes no algoritmo
Início n1 n2 s  n1 + n2 output
Ler(n1) 1.º passo 4
Ler(n2)
s  n1 + n2 2.º passo 4 5
Escrever(s) 3.º passo 4 5 9
Fim 4.º passo 4 5 9 9

Exercícios de aplicação 2 (pág. 14 a 16 do manual)


47 Algoritmia

Ficha de trabalho 1 (do caderno de atividades)


48 Introdução ao Python

 Python é uma linguagem de alto nível, genérica, feita para ser


utilizada em várias situações
 Pode ser aplicada:
 no desenvolvimento web (Django, Bottle);
 programação matemática e computacional (Orange, SymPy,
NumPy);
 Aplicações para desktop (PyQt, PyWidgets)
 Jogos (Pygame, Panda3D)
 entre outras
 A sintaxe da linguagem é simples e o código é normalmente curto
 É fácil de aprender, ler e compreender
49 Introdução ao Python

 É multiplataforma
 Possui modo interativo
 Usa indentação para marcação de blocos
 Quase nenhum uso de palavras-chave associadas com compilação
 Possuir coletor de lixo (garbage collector) para gerir o uso da
memória de forma automática
 Suporta POO (Programação Orientada a Objetos)
 Suporta programação funcional
 É suportada por uma grande biblioteca padrão, que contém mais de
260 módulos divididos em 35 categorias
50 Introdução ao Python

 A linguagem é open-source e pode ser utilizada tanto para


aplicações open-source quanto comerciais
 A comunidade é grande e ativa, sendo fácil de encontrar suporte
 Atualmente há perto de 114.000 pacotes no gestor de pacotes pip,
variando desde bibliotecas de interface web a bibliotecas de
matemática computacional, interfaces gráficas, visão
computacional, etc.
 Python é uma linguagem relativamente velha, desenvolvida nos anos
80 do século XX e publicada pela primeira vez em fevereiro de 1991
51 Introdução ao Python

 Foi desenvolvida por Guido van Rossum, que


trabalhava no grupo de sistema operativo
distribuído Amoeba
 Pretendia-se uma linguagem que fosse
parecida com a linguagem ABC e que
pudesse aceder as chamadas do sistema
Amoeba
 O nome Python não provem da cobra, mas
sim de um grupo dos Monty Python,
comediantes dos anos 70 de cujo espetáculo,
Monty Python’s Flying Circus, o autor era fã
 A insistência em associar Python a serpentes
ajudou na criação do símbolo oficial da
linguagem
52 Introdução ao Python

 O Python serve para:


 automatizar tarefas repetitivas, criando códigos que interagem
com o SO
 varrer a Internet (web scraping) navegando por sites, recolhendo,
organizando e gravando informações
 monitorizar e explorar redes sociais, ligando-se diretamente
através de APIs que facilitam a extração de dados
 construir sites ou aplicações web
 construir aplicações móveis
 criar aplicações em blockchain
 criar jogos
53 Introdução ao Python

 O Python serve para (continuação):


 manipular grandes conjuntos de textos com as mais avançadas
tecnologias (processamento de linguagem natural)
 criar gráficos para BI (Business Intelligence)
 criar ferramentas Analytics para tomadas de decisão
 manipular dados de forma avançada, com todos os recursos que
um cientista de dados requer
 executar algoritmos de machine learning, com os recursos mais
avançado da área
 criar aplicações de AI (inteligência artificial), utilizando deep
learning, reinforcement learning, entre outros métodos
 Operar com Big Data
54 Introdução ao Python

 O Python serve para (continuação):


 realizar trading automatizado em bolsas de valores
 fazer pesquisa científica e computação numérica, tendo
bibliotecas alternativas ao software Matlab
 usar funções e módulos prontos para engenharia, geologia,
climatologia, entre outras áreas
 programar microcontroladores e robôs
55 Introdução ao Python

 Interligação do h/w com o s/w e as diferentes etapas de desenvolvimento de um


programa em Python, usando a implementação padrão CPython
56 Introdução ao Python

 Resumo das diferentes etapas do desenvolvimento em CPython


57 Introdução ao Python

 A partir do site oficial desta linguagem, www.python.org, é possível ter


acesso a muitas informações relativas à sua utilização, bem como
efetuar o download das diversas versões e implementadas para
instalação, como por exemplo o CPython, o Jython e o PyPi
 CPython – é a principal implementação de Python, escrita em linguagem
C, e desenvolvida e mantida por Guido Van Rossum;
 Jython – é uma implementação da linguagem Python que gera
bytecode para máquinas Java (JVM - Java Virtual Machine);
 PyPI – abreviatura de Python Package Index, é o repositório de s/w oficial
de terceiros para Python, mantendo perto de 114.000 pacotes Python.
58 Introdução ao Python – instalação

 O ambiente de programação em Python (linguagem, interpretador,


módulos e ferramentas) é de instalação simplificada:
 em Linux a maioria das distribuições já vem com Python instalado,
porque vários scripts do SO já são executados em Python
 para verificar se já está instalado, quer no Linux, quer no Windows,
abre-se a consola de comandos do SO e digita-se:
python --version
59 Introdução ao Python – instalação

 No Windows, por defeito, não vem instalado, pelo que se descarrega


o pacote de instalação do site oficial (www.python.org):
60 Introdução ao Python – instalação

 No website, acede-se ao separador “downloads” e descarrega-se o


instalador de Python:

 A instalação é trivial, sendo de destacar a ativação da opção “Add


Python X.X to PATH”, para acesso simplificado das aplicações ao
Python
61 Introdução ao Python – IDLE

 Para testar executa-se a aplicação IDLE


62 Introdução ao Python – IDLE

 O IDLE é um ambiente de desenvolvimento integrado (IDE) para


Python, que integra os pacotes Python desde a versão 2.3.
 É completamente escrito em Python e com o kit de ferramentas
propiciando:
 editor de texto multi-janela com destaque de sintaxe,
autocomplemento, indentação rápida e outras;
 Shell Python com destaque de sintaxe;
 depurador (debugger) integrado com execução passo-a-passo,
breakpoints e acesso à stack
63 Introdução ao Python – IDLE

 A janela principal, é uma IDLE Shell, que surge no início da execução


do IDLE, consistindo num ambiente Python interativo, que possibilita a
execução direta de instruções, quando indicadas após o prompt >>>
 Esta janela permite igualmente aceder ao editor IDLE quando
selecionado o comando New File, no menu File
 O editor IDLE permite criar programas e iniciar a sua execução,
selecionando o comando Run Module, no menu Run
 A execução do programa decorre no IDLE Shell
 Existem alternativas a este ambiente de programação, que iremos
considerar de seguida
64 Ambientes de desenvolvimento

 Ambientes online:  Editores de texto:


 Python Shell  Sublime Text
 Repl.it  Atom
 Python Online Compiler  Brackets
 Python Tryit Editor  Notepad++
 Online Python Interpreter  Gedit
 etc.  Visual Studio Code
 Vim
 Light Table
 GNU Emacs
 etc.
65 Ambientes de desenvolvimento

 Ambientes de Desenvolvimento Integrado (IDE):


 Thonny
 PyCharm
 IPython
 PyDev
 Spyder
 etc.
66 Ambiente de desenvolvimento – PyCharm

 Lançado em 2010 pela JetBrains, o PyCharm é uma das IDEs mais


usadas para programar em Python

 Principais vantagens:
 fornece análise de código
 suporta desenvolvimento Web com Django
 possui suporte a testes unitários integrado
 suporte para VCS (Version Control System)
 depurador gráfico
 recurso de desenvolvimento remoto
 preenchimento de código inteligente
67 Ambiente de desenvolvimento – PyCharm

 Principais vantagens (continuação):


 integração com ferramentas e bibliotecas, como NumPy e
Matplotlib, permitindo ao programador trabalhar com
visualizadores de matriz e gráficos interativos
 verificação dinâmica de erros, entre outros

 O PyCharm conta ainda com desenvolvimento multitecnologias,


como: Python, CoffeeScript, TypeScript, Cython, JavaScript, SQL,
HTML/CSS, linguagens de modelo, AngularJS, Node.js e muitas outras
68 Ambiente de desenvolvimento – PyCharm

 O PyCharm pode ser descarregado a partir do seu site oficial em


https://www.jetbrains.com/pycharm/
69 Ambiente de desenvolvimento – PyCharm

 Existem duas versões, a Professional e a Commmunity


 A versão paga (a Professional) possui funcionalidades extra como
suporte para desenvolvimento web e integração com bases de
dados
 A versão Community é gratuita e pode encontrar-se num dos links
abaixo, sendo necessário ir até ao fundo das mesmas para chegar
aos botões de download:
 https://www.jetbrains.com/products/compare/?product=pychar
m&product=pycharm-ce
 https://www.jetbrains.com/pycharm/features/
 A instalação é, uma vez mais, trivial, mas existe ajuda em:
https://www.jetbrains.com/help/pycharm/install-and-set-up-
pycharm.htm
70 Conceitos genéricos de programação em
Pyhton
 Para os primeiros conceitos podemos usar a Shell mais simples do
Python, lançando-a a partir da linha de comandos, especificando
simplesmente o comando seguinte e abaixo exemplificado
python
71 Conceitos genéricos de programação em
Pyhton
 Tradução das linguagens:
 as linguagens de programação podem ser interpretadas ou
compiladas
 a compilação é o processo de transformar o código fonte, escrito
numa linguagem de alto nível, num código binário específico de
uma arquitetura de processador ou microcontrolador e/ou SO,
real ou virtual
 esse código designa-se de código-máquina se for compilado
para um hardware físico, existente e bytecode se for compilado
para ser executado em uma máquina virtual
 O código de máquina executa diretamente no h/w, sendo
executado pelo processador ou microcontrolador e
possivelmente tendo sua execução coordenada pelo SO (caso
exista)
72 Conceitos genéricos de programação em
Pyhton
 Tradução das linguagens (continuação):
 o bytecode é executado dentro de um
ambiente virtual, chamado normalmente
de máquina virtual
 pode-se pensar na máquina virtual como
uma forma de emulador, que permite que
o mesmo bytecode seja executado em
diferentes h/w
 o código interpretado é executado
diretamente do código-fonte
 o interpretador lê o código-fonte em alto
nível, instrução a instrução, e executa-a,
sem ocorrer a fase de compilação
73 Conceitos genéricos de programação em
Pyhton
 Tradução das linguagens (continuação):
 ambas formas tem suas vantagens e desvantagens:
 o código compilado, por exemplo, pode ser mais otimizado e ter
vários tipos de erros testados durante a compilação
por outro lado código interpretado pode ser mais dinâmico e
permitir estruturas e ações que são difíceis de se conseguir em
linguagens compiladas
74 Conceitos genéricos de programação em
Pyhton
 Tradução do Python:
 Python é uma linguagem interpretada, mas o código passa por
uma fase de compilação interna (automático)
 o bytecode gerado, no entanto, é praticamente uma reescrita do
código-fonte e as vantagem obtidas da compilação são a
verificação sintática antes da execução e a velocidade de
execução
 o interpretador Python não realiza nenhuma otimização ou
verificação no código
 alguns interpretadores alternativos oferecem funcionalidade de
otimização, como compilação JIT (Just In Time) e compilação
para bytecode da máquina virtual Java (Jython, PyPy, etc.); no
entanto estes têm problemas na execução de aplicações Python
que dependam de bibliotecas nativas, como a NumPy
75 Conceitos genéricos de programação em
Pyhton
 Sintaxe:
 Python é uma linguagem com uma sintaxe simples e limpa, que
preza pelas boas práticas de programação
 é uma linguagem sensível a maiúsculas e minúsculas
 como toda linguagem de script ela não necessita de um método
de entrada (main)
 a indentação em Python é extremamente importante, já que ela
define a organização lógica das instruções
 as linhas em branco são ignoradas pelo interpretador, mas podem
ter significado num ambiente interativo (normalmente terminam
um bloco de instruções, com múltiplas linhas)
76 Conceitos genéricos de programação em
Pyhton
 Sintaxe (continuação):
 é comum ver um comentário na primeira linha de ficheiros Python,
conhecido como shebang: #!/usr/bin/env python
 esta linha é usada por SO baseados no Unix, como Linux e macOS,
para permitir que o script seja chamado sem a necessidade de
invocar o interpretador explicitamente
 em Python o caracter ; pode ser usado para finalizar uma
instrução, no entanto tal não é comum nem recomendado!!!
 uma instrução Python termina automaticamente aquando de
uma mudança de linha
77 Conceitos genéricos de programação em
Pyhton
 Sintaxe (continuação):
 é boa prática manter o código com no máximo 79 caracteres por
linha, o que pode impossibilitar a escrita de algumas instruções
mais elaboradas
 para contornar isso é possível quebrar uma instrução em várias
linhas de duas formas (além de ignorar a regra do 79 caracteres,
o que pode ser feito uma vez ou outra):
explícita – terminando uma linha com o caracter \ e
continuando na linha seguinte
implícita – expressões em parenteses (curvos ou retos) e
chavetas podem ser continuadas na linha seguinte sem a
necessidade da barra invertida
78 Conceitos genéricos de programação em
Pyhton
 Comentários:
 os comentários em Python começam com # para linhas simples
ou podem ser feitos usando a notação docstring para uma ou
mais linhas:
# isto é um comentário para apenas uma linha e até ao final da mesma

""" isto é um comentário docstring para uma


ou mais linhas """

''' isto é outro comentário docstring para uma


ou mais linhas '''

 como em qualquer linguagem de programação, os comentários


apenas possuem utilidade para o programador
79 Conceitos genéricos de programação em
Pyhton
 Indentação:
 a indentação é extremamente importante em Python já que ela
define um bloco
 Em C, por exemplo, os blocos são definidos por { e }
 cada indentação é constituída normalmente por 4 espaços,
sendo preferidos às tabulações
80 Conceitos genéricos de programação em
Pyhton
 Identificadores:
 os identificadores são nomes dados a variáveis, classes, funções,
métodos, etc
 podem conter letras minúsculas e maiúsculas, números e _
 o primeiro caracter não pode ser um número
 qualquer outro símbolo é inválido
 palavras-chave não podem ser usadas como identificador
 não há limite no tamanho de um identificador
 exemplos de identificadores válidos: MyClass, var_1, uma_funcao
 exemplos de identificadores inválidos: 1var, $myvar, user@host
81 Conceitos genéricos de programação em
Pyhton
 Palavras-chave:
 as palavras-chave são nomes reservados pela linguagem que não
podem ser usados como nome de variáveis, funções ou qualquer
tipo de identificador

Exercícios de aplicação 3 (pág. 22 do manual)


82 Conceitos genéricos de programação em
Pyhton – input e output
 Input e output:
 a função print() efetua a escrita/saída (output) de um dado
objeto no dispositivo de saída padrão (ecrã) ou num ficheiro de
texto
 os dados são escritos no formato string, e depois da saída de
dados, por defeito, efetua a mudança para a linha seguinte
print('Olá mundo! ')

 a função input() efetua a leitura/entrada (input) de dados


exteriores ao programa, havendo necessidade de armazenar em
memória a informação obtida em variáveis (posições de
memória)
 esta função pode conter uma mensagem a ser apresentada ao
utilizador e os dados obtidos
nome=input('Introduza são do
o seu nome: ') tipo string
83 Conceitos genéricos de programação em
Pyhton
 Input e output (continuação):
84 Conceitos genéricos de programação em
Pyhton
 Input e output (continuação):
 sintaxe da função print(): Ligação com preenchimento sólido

print(objetos, sep=' ', end='\n', file=sys.stdout, flush=False)

 parâmetros:
objetos – um ou mais objetos a apresentar, separados por ,
sep (opcional) – os objetos são separados por sep (padrão: ' ')
end (opcional) – end é escrito no fim
file (opcional) – deve ser um objeto com método de escrita
(padrão: sys.stdout, que corresponde ao ecrã)
flush (opcional) – se verdadeiro, o que está em memória
(cache) é imediatamente escrito (padrão: falso)
 valor devolvido: nada!
85 Conceitos genéricos de programação em
Pyhton
 Input e output (continuação):
 sintaxe da função input(): Ligação com preenchimento sólido

input([prompt])

 parâmetros:
prompt (opcional) – uma string que é escrita no output padrão
(normalmente o ecrã)
 valor devolvido:
a função lê uma linha do input padrão (normalmente do
utilizador), converte a linha numa string eliminado o ENTER final
e devolve-a
86 Conceitos genéricos de programação em
Pyhton
 Input e output (continuação):
 as strings em Python são delimitadas por
plicas simples – '…'
aspas – "…"
docstring – '''…''' ou """…""“ – para delimitar strings compostas
por várias linhas de texto
87 Conceitos genéricos de programação em
Pyhton
 Input e output (continuação):
 o primeiro argumento da função print(), quando é uma string,
constitui uma a expressão de controlo que pode conter:
 texto
 caracteres especiais começados pela \, como, por exemplo: \n
(quebra de linha, forçando a mudança de linha); \t (insere uma
tabulação); \" (insere uma aspa); \\ (insere uma barra) e \' (insere
uma plica)
 especificadores de formatos de dados, como, por exemplo: %s (tipo
string); %d (tipo int – inteiro) e %f (tipo float – real)

Exercícios de aplicação 4 (pág. 24 do manual)


88 Conceitos genéricos de programação em
Pyhton
 Estruturas de dados – variáveis:
 as variáveis são identificadores de estruturas que suportam valores
que podem variar ao longo da execução do programa
 associado a cada uma das variáveis, é reservado um espaço em
memória, de acordo com o tipo de dados que mantém
 não existe, em Python, um comando para declarar variáveis
 as variáveis são criadas e declaradas com a atribuição de um
valor, sendo automaticamente definidas com o tipo de dados
correspondente ao valor atribuído
 ao longo de um programa Python, é possível que uma variável
armazene valores de diferentes tipos, implicando a alteração
automática do seu tipo de dados, dizendo-se por isso
dinamicamente tipada, sendo também fortemente tipada
89 Conceitos genéricos de programação em
Pyhton
 Estruturas de dados – constantes:
 as constantes são identificadores para designar valores que não
variam ao longo da execução do programa
 a linguagem Python, de facto, não possui constantes
 para contornar esta situação, é recomendado que o identificador
das constantes seja definido utilizando apenas letras maiúsculas,
permitindo destrinçá-las das variáveis, mas na prática não deixam
de ser variáveis
disciplina = "AIB" TEMPERATURA = 22.5
_xyz = 13 TOTAL_DIAS = 23
num_1 = 2.57
classifMedia = 19
90 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados:
 podemos definir dados como sendo estruturas sobre as quais são
efetuadas operações
 estes, de acordo com a sua natureza, podem estar associados a
diferentes tipos
 um determinado tipo de dados está associado a um conjunto de
valores, que definem o formato específico dos elementos desse
tipo
 em Python, as variáveis são consideradas objetos e os tipos de
dados a atribuir às variáveis podem ser mutáveis ou imutáveis
 assim, quando se altera o conteúdo de uma variável imutável,
esta vai ser associada a uma nova zona de memória com o novo
conteúdo, não alterando o conteúdo da região anterior
91 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados (continuação):
 são imutáveis as variáveis dos tipos de dados int, float, bool, string
e tupla
 por outro lado, são mutáveis as variáveis dos tipos de dados: list,
dict e set
 através da função id(), é possível conhecer a identidade de uma
variável, ou seja, o seu endereço de memória
 exemplo do funcionamento de uma variável do tipo imutável:
num1 = 133 #variável do tipo imutável
print("Posição de memória de num1 = ", id(num1))
num1 = 166
print("Posição de memória de num1 (após alteração) = ", id(num1))

Posição de memória de num1 = 4372311544


Posição de memória de num1 (após alteração) = 4372312600
92 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – resumo dos principais tipos de dados:
93 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – descrição dos principais tipos de dados:
Tipo Descrição Exemplos
int Números inteiros, sem casas decimais (valores 23
(inteiro) negativos, nulos e positivos) −13
0
−1913
float Números de ponto flutuante de precisão dupla, 3.3333
(ponto dependente das características do equipamento, −13.
Numérico

flutuante ou efetuando a separação das partes inteira e 32.2E10


decimal) fracionária; também podem ser apresentados em −45.9e13
notação científica (E/e), indicando a potência de 10 0.0
complex Números complexos com partes reais e imaginárias, 3+1.3j
(complexo) representados no formato x+yj, em que x e y são do 7.5j
tipo float e j representa a raiz quadrada de −1 −423+2j
.65j
4
94 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – descrição dos pp tipos de dados (cont.):
Tipo Descrição Exemplos
str Conjunto de caracteres alfanuméricos, símbolos, "12P"
Cadeia de
caracteres
(string) caracteres alfabéticos e numéricos, sendo '12P'
delimitado por aspas ou plicas """sábado,
domingo"""
'''sábado,
domingo'''
bool Valores booleanos ou lógicos True
Booleano

(booleano) False
95 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – descrição dos pp tipos de dados (cont.):
Tipo Descrição Exemplos
list Conjunto de itens, que podem ser duplicados e [1.3, 12, '12P']
(lista) de diferentes tipos de dados; permitem o
acesso sequencial ou direto através do índice
da posição, começando por 0
Sequência

Tuple Conjunto de itens, que podem ser duplicados e (7, "Classif", 1)


(tupla, tuplo de diferentes tipos de dados; permitem o
ou registo) acesso sequencial ou direto através do índice
de posição, começando por 0; os itens do
registo podem ser removidos, mas não podem
ser alterados
96 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – descrição dos pp tipos de dados (cont.):
Tipo Descrição Exemplos
set Conjunto de itens únicos, {1, 2, 3, 4, 5}
(conjunto) não indexados e imutáveis;
Conjunto

os itens não podem ser


alterados, mas podem ser
removidos e acrescentados
novos
dict Conjunto de itens {1:'décimo', 2:'décimo primeiro',
Mapeamento

(dicionário) organizados sob a forma 3:'décimo segundo'}


chave:valor; não permitem
o acesso direto por índice,
mas permitem indicando a
chave
97 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – como determinar?
 em Python não é necessário declarar as variáveis antes da sua
utilização
 contudo, através da função type(), é possível determinar o tipo
de dado de um valor ou variável
 sintaxe:
type(nome da variável ou valor)
98 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – como determinar (continuação)?
 consideremos as variáveis seguintes com os respetivos valores:
i = 90
f = 1.5
c = 2+3j
disc = "12P"
l = True
d = [1.5, 12, "12P"]
e = (7, "Classif", 19.6)
cc = {1, 2, 3, 4, 5, 6}
dic = {1:'decimo', 2:'decimo primeiro', 3:'decimo segundo'}
99 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – como determinar (continuação)?
 vejamos os tipos de dados envolvidos (à direita o output):
td = type(i) <class 'int'>
print(td) <class 'float'>
td = type(f) <class 'complex'>
print(td) <class 'str'>
print(type(c)) <class 'bool'>
st = type(disc) <class 'list'>
print(st) <class 'tuple'>
print(type(l)) <class 'set'>
print(type(d)) <class 'dict'>
print(type(e)) <class 'float'>
print(type(cc)) <class 'int'>
print(type(dic))
st = type(3.14) A indicação class que prefixa
print(st) cada tipo de dados tem a ver
print(type(9999)) com o POO!
100 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – conversão de tipos
 a linguagem Python permite efetuar conversão de tipos de dados
e variáveis ao longo de um programa
 esta conversão pode ser efetuada de forma:
implícita – nesta conversão, o tipo de dados de uma variável é
alterado como resultado de uma operação efetuada sobre os
seus dados, sendo automática e não resulta do envolvimento
de funções de conversão especificadas programador
explícita – neste caso, as alterações efetuadas nos tipos de
dados das variáveis resultam do recurso, por parte do
programador, a funções internas como int(), float() ou str()
101 Conceitos genéricos de programação em
Pyhton
 Estruturas e tipos de dados – conversão de tipos
 exemplos:

Exercícios de
aplicação 5 (pág. 30
do manual)

Ficha de trabalho 2
(do caderno de
atividades)
102 Conceitos genéricos de programação em
Pyhton
 Operadores e expressões
 os operadores são elementos que atuam sobre os operandos
(variáveis e constantes), numa determinada expressão
 as expressões, por sua vez, são uma combinação de operandos e
operadores que, uma vez resolvidas, resultam num determinado
valor
103 Conceitos genéricos de programação em
Pyhton
 Operadores aritméticos:
 os operadores aritméticos permitem
a realização de operações
matemáticas com valores
numéricos, cujo resultado é,
também, numérico
 de uma operação entre inteiros
resulta inteiro
 de uma operação entre reais resulta
sempre um real
 de uma operação em que pelo
menos um dos operandos é um real
resulta sempre um real
104 Conceitos genéricos de programação em
Pyhton
 Operadores aritméticos
(exemplificação):
105 Conceitos genéricos de programação em
Pyhton
 Operadores de atribuição:
 os operadores de atribuição
permitem atribuir valores a uma
variável
 estes podem ser simples, permitindo
apenas atribuir valores a uma
variável ou…
 … compostos, possibilitando a
realização de uma operação
aritmética seguida de atribuição
106 Conceitos genéricos de programação em
Pyhton
 Operadores de atribuição (exemplificação):
107 Conceitos genéricos de programação em
Pyhton
 Operadores de atribuição (exemplificação):
108 Conceitos genéricos de programação em
Pyhton
 Operadores de relacionais:
 os operadores relacionais são usados para efetuar comparações
entre expressões, resultando sempre um dos valores lógicos: True
(verdadeiro) ou False (falso)
109 Conceitos genéricos de programação em
Pyhton
 Operadores de relacionais (exemplificação):
110 Conceitos genéricos de programação em
Pyhton
 Operadores lógicos:
 Os operadores lógicos abaixo (and,
or, not) permitem realizar operações
lógicas, devolvendo sempre um dos
valores lógicos True ou False, de
acordo com as respetivas tabelas de
verdade (ao lado)
111 Conceitos genéricos de programação em
Pyhton
 Operadores lógicos (exemplificação):
112 Conceitos genéricos de programação em
Pyhton
 Prioridade dos operadores:
 em expressões com vários
operadores, é necessário
conhecer as regras de
prioridade para obter os
resultados corretos
 os operadores com a mesma
ordem de prioridade,
concretizam-se da esquerda
para a direita.

Exercícios de aplicação 6 (pág. 39 do manual)

Ficha de trabalho 3 (do caderno de atividades)


113 Tipos de dados compostos: list, tuple, set e
dict
 A definição de variáveis dos tipos de dados compostos: list, tuple, set e
dict, visa facilitar a manipulação de conjuntos de dados
 No desenvolvimento de aplicações que envolvem a utilização de
variáveis dos tipos compostos, estas começam por ser definidas, sendo
que tal se pode
concretizar de várias
formas
 No quadro ao lado são
apresentadas as
formas mais comuns
que podem ser
utilizadas na definição
de variáveis do tipo list
(lista)
114 Tipos de dados compostos: list, tuple, set e
dict
 No quadro abaixo são apresentadas as alternativas mais comuns que
podem ser utilizadas na definição de variáveis do tipo tuple (tuplo):
115 Tipos de dados compostos: list, tuple, set e
dict
 Ao lado, são expostas as
formas mais comuns para a
definição de variáveis do
tipo set (conjunto):
116 Tipos de dados compostos: list, tuple, set e
dict
 De seguida são exibidas as maneiras mais usuais de definição de variáveis
do tipo dict (dicionário):
117 Tipos de dados compostos: list, tuple, set e
dict
 Operações comuns sobre os elementos das estruturas compostas:
 funções – print(), len(), min(), max(), sum(), sorted(), del(), list(), tuple(),
set() e dict()
 operadores – in, not in e +

 função len() dá-nos o n.º de


elementos
118 Tipos de dados compostos: list, tuple, set e
dict
 A função max() devolve o
item de maior valor de
uma estrutura de dados
 A função min() é
complementar à max()

 A função sum() devolve a


soma dos elementos
numéricos que compõem
a estrutura (exclui-se dict)
119 Tipos de dados compostos: list, tuple, set e
dict
 A função del() permite eliminar uma estrutura de dados, deixando
esta de existir
120 Tipos de dados compostos: list, tuple, set e
dict
 A função sorted()
permite ordenar os
itens de uma estrutura
de dados
 A ordem inicial dos
itens na variável não é
alterada
 No caso da variável
do tipo dict, a
ordenação, é
baseada nas chaves
121 Tipos de dados compostos: list, tuple, set e
dict
 As funções list(),
tuple() e set()
permitem converter
entre estruturas de
dados
 Não existe conversão
para uma estrutura
dict
 Uma string também
pode ser convertida
para uma das
estruturas list, tuple ou
set
122 Tipos de dados compostos: list, tuple, set e
dict
 O operador in devolve true caso o elemento se encontre entre os
itens de uma estrutura de dados
123 Tipos de dados compostos: list, tuple, set e
dict
 O operador not in devolve true caso o elemento não se encontre nos
itens de uma estrutura de dados
124 Tipos de dados compostos: list, tuple, set e
dict
 O operador + permite
implementar a
concatenação (junção)
de duas estruturas de
dados do tipo tuple ou list
 Através deste operador
não é possível
concatenar estruturas dos
tipos set ou dict
125 Estruturas de dados – operações específicas

 Consideremos as operações específicas para dict (dicionário):


 obter o valor associado a uma chave
126 Estruturas de dados – operações específicas

 Operações específicas para dict (continuação):


 alterar o valor associado a uma chave
127 Estruturas de dados – operações específicas

 Operações específicas para dict (continuação):


 a função del() permite eliminar um item (um par chave:valor)
128 Estruturas de dados – operações específicas

 As estruturas de dados do tipo set (conjunto) correspondem a


representações de conjuntos matemáticos, pelo que, sobre o seu
conteúdo, podem realizar-se operações relacionadas com a teoria
de conjuntos:
 o operador & permite implementar a interseção de 2 conjuntos
129 Estruturas de dados – operações específicas

 Operações específicas para set (continuação):


 o operador | concretiza a união de 2 conjuntos
130 Estruturas de dados – operações específicas

 Operações específicas para set


(continuação):
 o operador – implementa a
diferença de conjuntos

 o operador ^ implementa a
diferença simétrica de
conjuntos (itens de cada
conjunto, mas não de ambos)
Exercícios de aplicação 7 (pág. 51 do manual)

Ficha de trabalho 4 (do caderno de atividades)


131 Estruturas de dados – comparações

Estrutura Ordenada Mutável Duplicações Acesso


Lista Sim Sim Sim Por índice
Tuplo Sim Não Sim Por índice
Conjunto Não Sim Não Não indexado
Dicionário Sim (>= 3.7) Sim Não (chaves) Por chave
132 Estruturas de dados – comparações

 Usos comuns:
 lista – quando a ordem importa e é necessária uma coleção
mutável
 tuplo – para dados que não devem ser alterados, como
coordenadas
 conjunto – para armazenar elementos únicos ou realizar
operações de conjuntos
 dicionário – para mapear chaves a valores, como propriedades
de um objeto
133 Estruturas de dados – comparações

 Métodos específicos:
 lista – append(), extend(), insert(), remove(), pop(), sort()
 tuplo – métodos limitados devido à imutabilidade
 conjunto – add(), remove(), union(), intersection(), difference()
 dicionário – keys(), values(), items(), get(), update()
134 Strings em Python

 As strings são um tipo de dado fundamental em Python, utilizadas


para representar texto e sequências de caracteres

 As strings em Python são imutáveis, ou seja não podem ser alteradas


após a criação mantendo a mesma localização em memória

 Qualquer operação que pareça modificar uma string na verdade


cria uma nova string
135 Strings em Python – criação

 As strings em Python podem ser criadas usando aspas simples ('') ou


duplas (""):
string1 = 'Olá, mundo!'
string2 = “Outro texto…"

 Também é possível criar strings de múltiplas linhas usando aspas


triplas:
string_multilinha = """Esta é uma string
que ocupa várias
linhas. """
136 Strings em Python – manipulação

 Concatenação: as strings podem ser concatenadas usando o


operador +:
nome = "João"
sobrenome = "Silva"
nome_completo = nome + " " + sobrenome
print(nome_completo) #saída: João Silva

 Repetição: operador * pode ser usado para repetir uma string:


repetida = "Python " * 3
print(repetida) #saída: Python Python Python
137 Strings em Python – manipulação

 Indexação e fatiamento: as strings podem ser acessadas por índices e


fatiadas:
texto = "Python"
print(texto[0]) # Saída: P
print(texto[1:4]) # Saída: yth
print(texto[::-1]) # Saída: nohtyP (inverte a string)
138 Strings em Python – métodos

 Maiúsculas e Minúsculas:
texto = "Python é Incrível"
print(texto.upper()) #saída: PYTHON É INCRÍVEL
print(texto.lower()) #saída: python é incrível

 Remoção de Espaços:
texto = " Python "
print(texto.strip()) #saída: Python

 Substituição:
texto = "Python é difícil"
novo_texto = texto.replace("difícil", "fácil")
print(novo_texto) #saída: Python é fácil
139 Strings em Python – métodos

 Divisão:
frase = "Python é uma linguagem de programação"
palavras = frase.split()
print(palavras) #saída: ['Python', 'é', 'uma', 'linguagem', 'de', 'programação']

 Junção (complementar da divisão):


palavras = ['Python', '3.12']
frase = " ". palavras.join()
print(frase) #saída: Python 3.12
140 Strings em Python – formatação

 F-strings: as f-strings (formatted string literal), foram introduzidas no


Python 3.6) e oferecem uma maneira facilitadora de formatar strings:
nome = "Alice"
idade = 30
mensagem = f"Olá, meu nome é {nome} e tenho {idade} anos." #ou F
print(mensagem) #saída: Olá, meu nome é Alice e tenho 30 anos.

 As f-strings permitem calcular expressões Python dentro das chavetas:


x = 10
y=5
print(f"A soma de {x} e {y} é {x + y}")
 Ou até mesmo recorrer a funções ou métodos dentro das f-strings:
nome = "python"
print(f"Linguagem: {nome.upper()}")
141 Strings em Python – formatação

 Pode-se controlar a precisão de números reais:


pi = 3.14159
print(f"O valor de pi é aproximadamente {pi:.2f}")

 Pode-se alinhar e preencher as strings:


nome = “Rui"
print(f"{nome:>10}") #alinha à direita num campo de 10 caracteres
print(f"{nome:0>10}") #preenche com zeros à esquerda
 As F-strings são mais eficientes que outros métodos de formatação
de strings em Python, como str.format() ou o operador %
 Apesar de sua versatilidade, as f-strings têm algumas limitações:
 não podem ser usadas para criar strings multilinha com \
 não permitem o uso de aspas do mesmo tipo que as usadas para
delimitar a f-string
142 Strings em Python – formatação

 O método format():
nome = “Rui"
idade = 25
mensagem = "Olá, meu nome é {} e tenho {} anos.".format(nome, idade)
print(mensagem) #saída: Olá, meu nome é Bob e tenho 25 anos.
143 Strings em Python – verificação

 Python fornece métodos para verificar propriedades das strings:


print("123".isdigit()) #saída: True
print("abc".isalpha()) #saída: True
print("Python3".isalnum()) #saída: True
144 Números pseudo-aleatórios

 A maioria das linguagens de programação disponibilizam um


conjunto de bibliotecas (ou módulos), que integram funcionalidades
organizadas com uma dada lógica, como:
 funções e constante matemáticas
 rotinas para a leitura e escrita de ficheiro
 etc.
 Este módulos são utilizados conforme as necessidades das aplicações
sendo tal concretizado mediante a importação desses
 A biblioteca random do Python, é constituida por diversas funções
para operar com números pseudo-aleatórios
 Os números pseudo-aleatórios são valores gerados a partir de um
algoritmo que utiliza um número original (a semente) e produz um
resultado com base nesse valor
145 Números pseudo-aleatórios

 O termo pseudo-aleatório indica que o resultado produzido pelo


algoritmo não é de facto aleatório, pois aquele será sempre igual,
para uma mesma semente
 Apesar disso, os valores pseudo-aleatórios gerados pelo módulo
random são úteis em diversos tipos de aplicações que necessitam de
valores aleatórios, como em:
 jogos
 cálculos estatísticos
 algoritmos de Machine Learning
 etc.
146 Números pseudo-aleatórios

 Para utilizarmos as funções disponíveis no módulo random, devemos


adicionar no início do código a importação do recurso por meio do
comando
import random #necessário para utilizar o módulo random

 A classe random contém um conjunto de métodos para gerar ou


manipular valores de forma “aleatória”:
 random.seed() – através de um argumento inteiro facultativo
define-se a semente que servirá como base para a geração dos
valores subsequentes; caso não se use o argumento, será o
relógio do sistema a determinar a semente da sequência
 random.random() – devolve um valor real aleatório entre 0 e 1,
baseado na semente.
147 Números pseudo-aleatórios

 Métodos da classe random (continuação):


import random

random.seed(8)
print(random.random()) # resultado: 0.2267058593810488
print(random.random()) # resultado: 0.9622950358343828

random.seed(8)
print(random.random()) # resultado: 0.2267058593810488
print(random.random()) # resultado: 0.9622950358343828

random.seed() # a semente é extraída do relógio do sistema


print(random.random()) # resultado: 0.15700150652431577
148 Números pseudo-aleatórios

 Métodos da classe random (continuação):


 random.uniform() – gera um número real aleatório dentro do
intervalo [li, ls], sendo a sua sintaxe:
random.uniform(li, ls) #li é o limite inferior e ls é o superior do intervalo

 exemplos:
import random

print(random.uniform(2, 10)) #exemplo de resultado: 6.89844948925407


print(random.uniform(20, 90)) #exemplo de resultado: 51.3926977903925
print(random.uniform(0, 1)) #exemplo de resultado: 0.7194467564886045
149 Números pseudo-aleatórios

 Métodos da classe random (continuação):


 random.triangular() – gera um número real aleatório dentro do
intervalo [li, ls], sendo a sua sintaxe:
random.triangular(li, ls, moda)
onde:
li e ls são os limites do intervalo, ambos opcionais (quando não
especificados, são, respetivamente 0 e 1)
moda é um valor do intervalo para aumentar a tendência para
qualquer limite, sendo, quando não especificado, o ponto central
do intervalo

 exemplos:
import random

print(random.triangular())
print(random.triangular(1, 10))
print(random.triangular(1, 5, 5))
150 Números pseudo-aleatórios

 Métodos da classe random (continuação):


 random.randint() – gera um número inteiro aleatório dentro do
intervalo [li, ls], sendo a sua sintaxe:
random.randint(li, ls) #li é o limite inferior e ls o limite superior do intervalo

 exemplos:
import random

print(random.randint(2, 10)) #resultado: 7


print(random.randint(2, 10)) #resultado: 2
print(random.randint(2, 10)) #resultado: 10
print(random.randint(2, 10)) #resultado: 7
151 Números pseudo-aleatórios

 Métodos da classe random (continuação):


 random.randrange() – gera um número inteiro aleatório dentro do
intervalo [li, ls[, com indicador de múltiplos, sendo a sua sintaxe:
random.randrange(ls)
random.randrange(li, ls [, m = 1])
onde:
li é o limite inferior (caso não especificado é 0)
ls o limite superior do intervalo (obrigatório)
m especifica o múltiplo de li (caso não especificado é 1)

 exemplos:
import random

print(random.randrange(10)) # inteiro ∈ [0, 10[


print(random.randrange(100, 200, 2)) # inteiro par ∈ [100, 200[
print(random.randrange(1, 15, 2)) # inteiro ímpar ∈ [1, 15[
print(random.randrange(3, 21, 3)) # inteiro múltiplo de 3 ∈ [3, 21[
152 Números pseudo-aleatórios

 Métodos da classe random (continuação):


 random.choice() – devolve um elemento de uma sequência (lista
ou string) não vazia, sendo a sua sintaxe:
random.choice(seq)
onde:
seq especifica a sequência de onde extrair um elemento
 exemplos:
import random

lista = [ "maça", 99, “gato" ]


print(random.choice(lista)) #resultados possíveis: gato ou 99…

texto = “Olá mundo!”


print(random.choice(texto)) #resultados possíveis: m, O, á, !, …
153 Números pseudo-aleatórios

 Outros métodos da classe random (continuação):


 métodos para preservar/restaurar o estado do gerador, como:
getstate() e setstate()
 métodos para operar com sequências, como: choices(), shuffle(),
sample(), etc.
 métodos para estatísticas e teorias de probabilidades, como:
betavariate(), expovariate(), gammavariate(), gauss(),
lognormvariate(), normalvariate(), vonmisesvariate(),
paretovariate(), weibullvariate()
154 Estruturas de controlo

 As estruturas de controlo determinam a forma como as instruções de


um programa se sucedem
 Estas dividem-se em:

sequencial

Estruturas de
controlo
decisão ou seleção

repetição/repetitiva (ciclo)
155 Estruturas de controlo

 Estruturas sequenciais:
 Neste tipo de estrutura, as instruções de um programa são
executadas numa determinada ordem sem que esta possa sofrer
alterações através de, por exemplo, eventuais interações com o
utilizador
 Todos os exemplos até ao momento recorreram apenas a esta
estrutura
156 Estruturas de controlo

 Estruturas de decisão ou seleção:


 As estruturas de decisão ou seleção permitem escolher uma
opção, de entre as existentes, para o desenvolvimento de um
programa, executando sequências alternativas de acordo com
determinadas circunstâncias
 Em Python, temos:

simples

Estruturas de
decisão em
composta

Python
encadeada

múltipla
157 Estruturas de controlo

 Estrutura de decisão ou seleção:


 No Python, a implementação de estruturas de decisão ou seleção
(e também as de repetição), implica a criação de blocos de
instruções, ou seja, conjuntos de instruções agrupadas de acordo
com uma determinada lógica, recorrendo a dois-pontos (:) e a
indentação (avanço/recuo das instruções em relação à sua
margem, empregando espaços ou tabulações)
 Através da criação de vários níveis de indentação, é possível
definir diferentes blocos de instruções
158 Estruturas de controlo

 Estrutura de decisão simples:


 Através da utilização da estrutura de seleção
simples, as instruções apenas são executadas
quando a condição de seleção for Verdadeira!
 Se o valor lógico for Falso, o programa continua a
execução das instruções fora desta estrutura

Se «condição» Então

FimSe


if «condição»:


159 Estruturas de controlo

 Estrutura de decisão simples:


 Exemplo de um algoritmo em pseudocódigo e em fluxograma, e
a respetiva codificação em Python, que exibe a diferença entre
dois pesos, caso o valor introduzido pelo utilizador seja inferior a
70Kg
Pág. 55 e 56 do manual – Quadros 4.4, 4.5 e 4.6
160 Estruturas de controlo

 Estrutura de decisão composta:


 Com a estrutura de seleção composta, podem existir
2 alternativas para o fluxo das instruções do
programa, que resultam do valor lógico da condição

Se «condição» Então

Senão

FimSe …
… if «condição»:

else:


161 Estruturas de controlo

 Estrutura de decisão composta:


 Exemplo de um algoritmo em pseudocódigo e em fluxograma, e
a respetiva codificação em Python, que determina o maior de
dois números
Pág. 57 e 58 do manual – Quadros 4.7, 4.8 e 4.9

Exercícios de aplicação 8 (pág. 54 do manual)

Exercícios de aplicação 9 (pág. 59 do manual)


162 Estruturas de controlo

 Estrutura de decisão encadeada:


 Resultam do encadeamento de várias opções,
podendo derivar-se o fluxo do código mediante o
valor lógico de cada condição

Se «condição1» Então

Senão Se «condição2» Então
… …
Senão If «condição1»:
… …
FimSe elif «condição2»:
… …
else:


163 Estruturas de controlo

 Estrutura de decisão encadeada:


 Exemplo de um algoritmo em pseudocódigo e em fluxograma, e
a respetiva codificação em Python, que determina se dois
números são iguais entre si ou qual é o maior deles
Pág. 60 e 61 do manual – Quadros 4.10, 4.11 e 4.12

Exercícios de aplicação 10 (pág. 61 do manual)


164 Estruturas de controlo

 Estrutura de decisão múltipla:


 Permite selecionar uma de várias alternativas para o
fluxo do código mediante o valor de uma variável

SelecionarCaso «expressão»
«valor 1»: …
… match «expressão»:
«valor 2»: case «valor 1»:
… …
«valor n»: case «valor 2»:
… …
[Senão case «valor n»:
…] …
FimSelecionarCaso [case _:
… …]

165 Estruturas de controlo

 Estrutura de decisão múltipla:


 Exemplo de um algoritmo em pseudocódigo e em fluxograma, e
a respetiva codificação em Python, que determina o dia da
semana de acordo com o valor numérico correspondente
inserido
Pág. 62 e 63 do manual – Quadros 4.13, 4.14 e 4.15

Exercícios de aplicação 11 (pág. 64 do manual)


166 Estruturas de controlo - Exercícios

 Para todos os problemas seguintes deverá ser elaborado o respetivo


pseudocódigo, e este implementado em Python:
1. Algoritmo para determinar se um número é par ou ímpar.
2. Determinar se um dado ano é ou não bissexto.
3. Determinar o maior de 2 números reais (verificar se os números
são iguais).
4. Determinar o menor de 3 números inteiros.
5. Dados os lados de um triângulo, determinar se é equilátero
(possui todos os lados iguais), isósceles (possui 2 lados iguais) ou
escaleno (possui todos os lados diferentes).
6. Dada a classificação de um aluno a um módulo determinar se o
aluno obteve ou não aprovação.
167 Estruturas de controlo

 Estruturas de repetição ou repetitivas (ciclo):


 As estruturas repetitivas (na gíria, “ciclos”) permitem a repetição
da execução de um bloco de instruções (o que se denomina por
iteração), mediante determinadas circunstâncias
 Em Python, temos:

Estruturas de while (Enquanto)


repetição ou
repetitivas for (Para)

 Recorde que, no Python, é obrigatória a utilização de indentação


para a criação de blocos de instruções, seja em estruturas de
decisão, seja com estruturas de repetitivas!
168 Estruturas de controlo

 Estrutura repetitiva while (Enquanto):


 O ciclo while é um tipo de estrutura em que o número iterações
de um bloco de instruções é controlado por uma condição
 Enquanto o resultado da condição for verdadeiro, o bloco de
instruções é executado
 A condição de permanência na estrutura repetitiva encontra-se à
cabeça da mesma, logo se na primeira avaliação da condição a
mesma for falsa o bloco de instruções não chega a ser executado
uma única vez
 Assim diz-se que esta estrutura decorre ao longo de 0+ iterações!
 Este ciclo pode ser implementado quando se sabe inicialmente o
número de iterações, caso em que é recorre a uma variável
contadora destinada a controlar a execução da estrutura
169 Estruturas de controlo

 Estrutura repetitiva while (Enquanto):



Enquanto «condição» Fazer

FimEnquanto


while «condição»:


170 Estruturas de controlo

 Estrutura repetitiva while (Enquanto):


 Exemplo de um algoritmo em pseudocódigo e em fluxograma, e
a respetiva codificação em Python, que calcula o número de
nomes inseridos pelo utilizador, até que este introduza “Fim”!
Pág. 65 a 67 do manual – Quadros 4.16, 4.17, 4.18 e 4.19

Exercícios de aplicação 12 (pág. 67 do manual)


171 Estruturas de controlo

 Estrutura repetitiva for (Para):


 O ciclo for requer um conhecimento, à priori, do número de
iterações
 Para tal, recorre-se a uma variável de controlo do número de
repetições, sendo a estrutura executada em função dos itens de
uma sequência que vão sendo atribuídos à variável de controlo
pela ordem em que se encontram
172 Estruturas de controlo

 Estrutura repetitiva for (Para):



Para «var» de «vali» até «valf»[, «passo»] Fazer

FimPara

173 Estruturas de controlo

 Estrutura repetitiva for (Para):



for «var» in «sequencia»:

 aqui «sequencia», pode ser especificada como:


uma string
um conjunto de inteiros originados pela função range()
um conjunto de itens de uma das estruturas seguintes: list,
tuple, set ou dict
174 Estruturas de controlo

 Estrutura repetitiva for (Para):


 a função range() gera uma sequência de inteiros no intervalo [li,
ls[, de acordo com um eventual especificador de múltiplos, sendo
a sua sintaxe:
range([li = 0,] ls [, m = 1])
onde:
li é o limite inferior (caso não especificado é 0)
ls o limite superior do intervalo (obrigatório)
m especifica o múltiplo de li (caso não especificado é 1)

 exemplos:
range(8) 0, 1, 2, 3, 4, 5, 6, 7 range(8, 2, -1) 8, 7, 6, 5, 4, 3
range(2, 8) 2, 3, 4, 5, 6, 7 range(0, 4, 1) 0, 1, 2, 3
range(2, 8, 2) 2, 4, 6 range(-8, -2, -2) intervalo vazio!
175 Estruturas de controlo

 Estrutura repetitiva for (Para), com range():



for «var» in range([li = 0,] ls [, m = 1]):

 Exemplo de programa em Python, que calcula a média de n


números inteiros digitados pelo utilizador
176 Estruturas de controlo
Algoritmo na pág. 68 do manual e seguintes (com traçagem) – Quadros 4.20 a 4.22

 Estrutura repetitiva for (Para), com range():


177 Estruturas de controlo

 Estrutura repetitiva for (Para), com string:



for «var» in «texto»:

 Exemplo de programa em Python, que conta e apresenta os


carateres individuais de um nome introduzido pelo utilizador
178 Estruturas de controlo

 Estrutura repetitiva for (Para), com lista:



for «var» in «lista»:

 Exemplo de programa em Python, que conta e apresenta uma


mensagem para cada disciplina de uma lista, exibindo no final a
respetiva contagem
179 Estruturas de controlo

 Estrutura repetitiva for (Para), com tuplo:



for «var» in «tuplo»:

 Exemplo de programa em Python, que a partir de um tuplo


constituído por cidades, conta-as e exibe-as e, no final, apresenta
essa contagem
180 Estruturas de controlo

 Estrutura repetitiva for (Para), com conjunto:



for «var» in «conjunto»:

 Exemplo de programa em Python, que exibe um conjunto de


designações das árvores
181 Estruturas de controlo

 Estrutura repetitiva for (Para), com dicionário:



for «var» in «dicionario»:

 Exemplo de programa em Python, que exibe os anos de


escolaridade, o mesmo por extenso e ambos, contidos num
dicionário

Exercícios de aplicação 13 (pág. 76 do manual)


182 Estruturas de controlo

 Controlo de execução das estruturas repetitivas:


 Para controlar o fluxo das estruturas repetitivas, o programador
dispõe de 3 instruções a que recorre envolvendo estruturas de
decisão, sendo elas:
break – sai do ciclo, continuando com a execução das
restantes instruções, subsequentes ao mesmo;
continue – interrompe a execução da iteração, continuando
na iteração seguinte;
pass – não efetua qualquer ação, podendo utilizar-se, por
exemplo, para indicar a localização de instruções futuras
183 Estruturas de controlo

 Exemplo de controlo de execução dos ciclos com break:


184 Estruturas de controlo

 Exemplo de controlo de execução dos ciclos com continue:


185 Estruturas de controlo

 Exemplo de controlo de execução dos ciclos com pass:


186 Estruturas de controlo

 Exemplo de controlo de execução aplicado ao ciclo while:

Exercícios de aplicação 14 (pág. 81 do manual)


187
Aplicações Informáticas B
Introdução à Programação

Você também pode gostar