Python
Python
Nº Processo 00007/D+/23
UFCD 9190
Introdução à programação aplicada à cibersegurança
2024
JOSÉ SILVA
05/04/2024
TLM:910 476 171
EMAIL: [email protected]
Introdução ao python
2024 – José Silva
Níveis das linguagens de programação
As linguagens de programação podem ser categorizadas em diferentes níveis de abstração, cada uma com as suas características
e aplicações:
Considerações:
A escolha da linguagem de programação ideal depende do contexto e das necessidades do projecto. Devem também ser
considerados factores como o desempenho, portabilidade, facilidade de aprendizagem e comunidade de programadores. É
importante ter o conhecimento de diferentes níveis de abstracção para escolher a linguagem mais adequada para cada
situação.
A cibersegurança é um campo amplo que abrange diversas áreas, desde a proteção de dados e sistemas até à investigação de
crimes informáticos. As linguagens de programação desempenham um papel fundamental em todas estas áreas, pois
permitem automatizar tarefas, analisar dados e desenvolver ferramentas de segurança.
As linguagens de programação mais importantes em cibersegurança são:
1. Python:
É uma linguagem versátil e fácil de aprender, com uma comunidade activa e ampla gama de bibliotecas para segurança;
É utilizada para automatizar tarefas, realizar análises de malware, escrever scripts de pentest e desenvolver ferramentas de
segurança.
2. C/C++:
São linguagens poderosas que oferecem controle preciso sobre o hardware e a memória;
São utilizadas para desenvolver ferramentas de baixo nível, como firewalls, sistemas de detecção de intrusão (IDS) e software de
análise forense.
3. JavaScript:
É a linguagem essencial para o desenvolvimento dos front-ends da web, mas também pode ser utilizada para desenvolver
ferramentas de segurança web, como scanners de vulnerabilidade e crawlers.
4. Bash:
É a linguagem de script padrão do Unix/Linux, utilizada para automatizar tarefas de segurança, como a criação de scripts de
análise de logs e configuração de firewalls.
5. SQL:
É a linguagem para gerenciar dados em bancos de dados, utilizada para analisar dados de segurança, como logs de eventos e
registros de auditoria.
O que é o Python?
O Python é uma das linguagens de programação mais populares do mundo. Criado no início da década
de 1990, o Python pode ser utilizado em várias aplicações, desde automatizar tarefas repetitivas,
escrever aplicações web ou até construir modelos de machine learning para implementar redes neurais.
Investigadores, matemáticos e cientistas de dados, em particular, utilizam o Python por causa de sua
sintaxe rica e fácil de entender e da ampla gama de pacotes de código aberto disponíveis. Os pacotes
são bibliotecas de código partilhado que estão disponíveis gratuitamente para qualquer utilizador.
O Python tem uma sintaxe simples e fácil de aprender, que enfatiza a legibilidade. Aplicações escritas em
Python podem ser executados em praticamente qualquer computador, incluindo aqueles que executam
Windows, macOS e distribuições populares do Linux. O ecossistema contém também um rico conjunto
de ferramentas de desenvolvimento para escrever, depurar e publicar aplicações Python.
Finalmente, o Python é suportado por uma comunidade activa de utilizadores que ajuda novos
programadores a aprender a maneira Pythonic, onde não apenas se obtém a sintaxe certa, mas se usa a
linguagem da maneira pretendida.
Ao contrário das linguagens compiladas (o código fonte escrito pelo programador é convertido em linguagem de máquina antes de ser executado pelo
computador) como o C++, o Python usa uma abordagem de interpretação para traduzir programação em código de máquina:
Escrever código Python: Escrever código Python usando um editor de texto ou IDE (Integrated Development Environment). Este código é legível por
humanos e concentra-se na lógica e funcionalidade do programa;
2. Executando o código: Quando executamos o programa Python, o interpretador Python entra em acção. O interpretador é um programa de software que
entende sintaxe e semântica Python;
3. Análise Lexical (Tokenização): O interpretador primeiro executa a análise lexical, que divide o código em unidades menores chamadas tokens. Estes
tokens podem ser palavras-chave (como ‘if', ‘to'), identificadores (nomes de variáveis, nomes de funções), operadores (+, -, *), literais (strings, números) etc.;
4. Análise de sintaxe (Parsing): O interpretador realiza a análise de sintaxe. Recolhe o fluxo de tokens e verifica se seguem as regras gramaticais da
linguagem Python. Isto garante que a estrutura do código está correcta e segue a sintaxe esperada;
5. Geração de código de bytes: Assumindo que a sintaxe é válida, o interpretador gera bytecode. Bytecode é uma representação intermédia de baixo nível
do programa Python. Não é um código de máquina específico de um processador específico, mas uma versão mais compacta e optimizada do código
original;
6. Python Virtual Machine (PVM): O interpretador Python interage com a Máquina Virtual Python (PVM). A PVM é uma camada de software que actua
como um ambiente de Runtime para executar bytecode Python; Um ambiente runtime, também conhecido como ambiente de execução, é o software que
permite a um programa ser executado num sistema operativo específico. Fornece os recursos e serviços necessários para que o programa funcione
correctamente, como gestão de memória, interpretação de código e acesso a bibliotecas;
7. Just-in-Time (JIT) Compilation (Opcional): Em algumas implementações Python, pode ser requerido um compilador Just-in-Time (JIT). O compilador JIT
pode traduzir dinamicamente secções de bytecode executadas com frequência em código de máquina específico para a arquitectura do processador, para
um desempenho ainda mais rápido;
8. Execução de código de máquina: Finalmente, a PVM interpreta as instruções de bytecode uma a uma. Faz a tradução dessas instruções de bytecode para
código de máquina que o hardware subjacente (CPU) entende. O código da máquina é então executado pelo CPU, executando as operações programadas
no código Python.
O que são variáveis em Python?
Variáveis são nomes atribuídos a dados que precisamos armazenar e manipular em programas. Por
exemplo, suponha que um programa precisa armazenar a idade de um utilizador. Para fazer isto,
podemos nomear esses dados userAge e definir a variável userAge utilizando a seguinte instrução:
userAge = 0
Depois de definirmos a variável userAge, o programa irá alocar uma determinada área do espaço de
armazenamento do seu computador para guardar estes dados. Podemos então aceder e modificar os
dados, referindo-nos a eles pelo seu nome, ou seja, userAge.
Sempre que declaramos uma nova variável, temos de lhe dar um valor inicial. Neste exemplo, demos o
valor 0. Podemos alterar este valor no nosso programa mais tarde. Também podemos definir várias
variáveis de uma só vez. Basta escrever userAge, userName = 30, ‘Peter’.
É equivalente a:
userAge = 30
userName = ‘Peter’
Nomear uma variável
Existem também alg umas palavras reservadas que não podemos utilizar como um nome de variável
porque já têm significados pré-atribuídos em Python. Estas palavras reservadas são palavras como
print, input, if, while etc.
Finalmente, os nomes das variáveis diferenciam maiúsculas de minúsculas. username não é o mesmo
que userName. Existem duas convenções ao nomear uma variável em Python. Podemos usar a notação
Camel case ou utilizar underscores. Camel case é a prática de escrever palavras compostas com mistura
de maiscúlas e minúsculas (e.g.istoEumaVariavel). Alternativamente, outra prática comum é utilizar
underscores ( _ ) para separar as palavras. Se preferirmos, podemos nomear as variáveis como:
isto_e_uma_variavel.
O sinal de atribuição
Note que o sinal = na instrução userAge = 0 tem um significado diferente do sinal = que
aprendemos em Matemática. Em programação, o sinal = é conhecido como um sinal de
atribuição. Isto significa que estamos a atribuir o valor do lado direito do sinal = à variável à
esquerda. Ou seja userAge = 0 será:
userAge <- 0.
x = 10
y = 10
Embora x tenha um valor inicial de 5 (declarado na primeira linha), a terceira linha x = y atribui o valor
de y a x (x <- y), alterando assim o valor de x para 10 enquanto o valor de y permanece inalterado.
De seguida, modifique o programa alterando apenas uma instrução: altere a terceira linha de x = y para
y = x . Matematicamente, x = y e y = x têm o mesmo significado. No entanto, em programação tal não
sucede.
Podemos ver que, neste exemplo, o valor x permanece como 5, mas o valor de y é alterado para 5. Isto
sucede porque a afirmação y = x atribui o valor de x a y (y <- x). y torna-se 5 enquanto x permanece
inalterado como 5.
Operadores Básicos
Além de atribuir a uma variável um valor inicial, também podemos realizar as operações matemáticas
normais com variáveis. Os operadores básicos em Python são + , - , /, //, % e * que representam
adicção, subtracção, multiplicação, divisão, floor division, módulo e expoente, respectivamente.
Exemplos:
Supondo que x = 5 e y = 2
Adicção: x + y = 7
Subtracção: x - y = 3
Multiplicação: x*y = 10
Divisão: x/y = 2.5
Floor Division: x//y = 2 (Arredonda a resposta para baixo para o número inteiro mais próximo)
Módulo: x%y = 1 (dá-nos o resto da divisão de 5 por 2)
Expoente: x**y = 25 (5 ao quadrado)
Mais operadores de atribuição
Existem mais alguns operadores de atribuição em Python (e na maioria das linguagens de programação).
Estes são operadores como +=,-= e *=.
Supondo que temos a variável x, com um valor inicial de 10. Se quisermos incrementar x por 2, podemos
escrever x = x + 2.
Float
Float refere-se a números que têm partes decimais, como 1.234, -0.023, 12.01. Para declarar um float em Python, escrevemos
variableName = valor inicial .
Exemplo:
userHeight = 1,82, userWeight = 67,2
String
String refere-se ao texto. Para declarar uma cadeia de caracteres, podemos escrever variableName = 'valor inicial' (aspas simples)
ou variableName = “valor inicial” (aspas duplas).
Exemplo:
userName = 'Peter', userSpouseName = "Janet", userAge = '30'
No último exemplo, porque escrevemos userAge = '30', userAge é uma cadeia de caracteres. Em contraste, se escrevermos
userAge = 30 (sem aspas), userAge é um integer.
Podemos combinar várias substrings usando o sinal de concatenação (+). Por exemplo, "Peter" + "Lee" é equivalente à string
"PeterLee".
Type Casting em Python
Por vezes, em programação, é necessário converter de um tipo de dados para outro, como de um integer (número
inteiro) para uma string (cadeia de caracteres). Isto é conhecido como type casting.
Existem três funções embutidas em Python que nos permitem fazer type casting. Estas são as funções int(), float()
e str().
A função int() em Python recebe um float ou uma string apropriada convertendo-a num integer. Para alterar um float
para um integer, podemos digitar int(5.712987). Obteremos 5 como resultado (qualquer coisa depois do ponto
decimal é removido). Para alterar uma string para um integer, podemos digitar int("4") e teremos 4.
No entanto, não podemos digitar int ("Olá") ou int("4.22321"). Obteremos um erro em ambos os casos.
A função float() recebe um inteiro ou uma cadeia de caracteres apropriada alterando-a para um float. Por exemplo,
se digitarmos float(2) ou float("2") e teremos 2.0. Se digitarmos float("2.09109"), obteremos 2.09109, que é
um float e não uma string, uma vez que as aspas são removidas.
A função str(), por outro lado, converte um integer ou um float numa string. Por exemplo, se digitarmos str(2.1),
obteremos "2.1".
Agora que abordámos os três tipos de dados básicos em Python e o type casting, vamos passar para as lists, tuples e
dictionaries.
Lista
Lista refere-se a uma recolha de dados que estão normalmente relacionados. Em vez de armazenar esses
dados como variáveis separadas, podemos armazená-los como uma lista. Por exemplo, suponha que
nosso programa precisa armazenar a idade de 5 utilizadores. Em vez de armazená-los como user1Age,
user2Age, user3Age, user4Age e user5Age, faz mais sentido armazená-los como uma lista.
Para declararmos uma lista, escrevemos listName = [initial values]. Observe que usamos
parêntesis rectos [ ] ao declarar uma lista. Os valores são separados por uma vírgula.
Exemplo:
userAge = [21, 22, 23, 24, 25]
Também podemos declarar uma lista sem atribuir quaisquer valores iniciais a esta:
escrevemos listName = [ ].Teremos uma lista vazia sem itens.
Com o método append( ) poderemos adiccionar itens à lista.
Os valores individuais na lista são acessíveis pelos seus índices (index) que começam a partir do valor 0,
não 1. Esta é uma prática comum em quase todas as linguagens de programação, como o C e Java.
Assim, o primeiro valor tem um index de 0, o próximo tem um index de 1 e assim por diante. Por
exemplo, userAge[0] = 21, userAge[1] = 22 .
Tuple
Os Tuples são como listas, mas não podemos modificar os seus valores. Os valores iniciais são os valores
que permanecerão para o resto do programa. Um exemplo onde os tuples são úteis é quando o
programa precisa de armazenar os nomes dos meses do ano:
Observe que usamos parêntesis curvos ( ) ao declarar um tuple. Os valores são separados por uma
vírgula.
Exemplo:
meses = (“Jan”, “Fev”, “Mar”, “Abr”, “Mai”, “Jun”, “Jul”, “Ago”, “Sep”, “Out”,
“Nov”, “Dez”)
Acedemos aos valores individuais de um tuple utilizando os seus index, como nas listas.
Isto sucede porque "Peter" é usado como uma chave do diccionário duas vezes. Utilizamos chavetas { }
ao declarar um diccionário. Os pares de valores são separados por uma vírgula.
Exemplo:
userNameAndAge = {“Pedro”:38, “Joao”:51, “Joana”:13, “Paula”:“Not Available”}
Também podemos declarar um diccionário utilizando o método dict(). Para declararmos o diccionário
userNameAndAge acima, escrevemos userNameAndAge = dict(Pedro = 38, Joao = 51, Joana =
13, Paula = “Not Available”).
Quando utilizamos este método para declarar um diccionário, usamos parêntesis redondos ( ) em vez de
chavetas { } e não colocamos aspas nas chaves do diccionário.
Utilize o REPL
Por vezes, queremos experimentar um segmento de código sem ter de criar um ficheiro para o mesmo.
Para estas ocasiões, é uma boa ideia utilizar um programa interno chamado REPL, que permite digitar
instruções mais curtas e avaliar as mesmas.
O Python REPL
O Python suporta uma experiência de consola interactiva, que permite digitar comandos e ver os
resultados imediatamente. Esta experiência é por vezes referida como um "Read-Eval-Print-Loop", ou
REPL.
Para usar o REPL, digite python na sua consola. Receberá um prompt semelhante ao output abaixo, que
aguarda os comandos de entrada, ou seja os inputs:
Utilizar a ajuda
O REPL tem uma função de ajuda integrada que podemos utilizar para procurar palavras-chave e funções.
A sintaxe para esta função é:
help([object])
Onde [object] é uma função ou palavra-chave específica para a qual desejamos ajuda.
Consola de ajuda interactiva
Se não passarmos um argumento para a função de ajuda, o Python iniciará uma ajuda interactiva.
Podemos aceder à consola de ajuda interactiva digitando help(). Este comando listará algumas
instruções básicas sobre como usar o sistema de ajuda.
A partir daqui, podemos simplesmente digitar o elemento em que estamos interessados. Por exemplo,
digitando string obteremos informações sobre a string de tópico, que se parece com:
NAME
string - A collection of string constants.
MODULE REFERENCE
https://docs.python.org/3.9/library/string
=
Em Python, uma variável é declarada e é-lhe atribuído um valor usando o operador de atribuição . A variável está do
lado esquerdo do operador e o valor que lhe é atribuído, que pode ser uma expressão como 2 + 2 e pode até incluir
outras variáveis, estará do lado direito. Por exemplo:
Estes exemplos atribuem números a variáveis, mas os números são apenas um dos vários tipos de dados suportados
pelo Python. Não há nenhum tipo declarado para as variáveis. Isto sucede porque o Python é uma linguagem
digitada dinamicamente, o que significa que o tipo de variável é determinado pelos dados atribuídos à mesma. Nos
exemplos acima, as variáveis x, y e z são integers, capazes de armazenar números inteiros positivos e negativos.
Como já vimos os nomes das variáveis diferenciam maiúsculas de minúsculas e podem usar qualquer letra, número
ou caractere de underscore ( _ ). No entanto, não podem começar com um número.
Trabalhar com números
A maioria dos programas manipula números. Os computadores tratam números inteiros e números decimais de
forma diferente. Considere o seguinte código:
x = 1 # integer
x = 1.0 # decimal (floating point)3
O Python cria integers a partir de um tipo de dados interno chamado int e decimais (números de vírgula flutuante)
como instâncias de float. A função built-in type() do Python devolve o tipo de dados de uma variável. O código a
seguir gera tipos de dados:
x = 1
print(type(x)) # outputs: <class 'int'>
x = 1.0
print(type(x)) # outputs: <class 'float’>
A adição do ".0" no final de "1" faz uma grande diferença na forma como a linguagem de programação trata um
valor. O tipo de dados afecta como o valor é armazenado na memória, como o processador (CPU) lida com os dados
ao avaliar expressões, como os dados se relacionam com outros dados e que tipos de operações podemos executar
com eles.
Trabalhar com booleanos
Outro tipo de dados comum é o tipo booleano, que contém o valor True ou False:
x = True
print(type(x)) # outputs: <class 'bool’>
Internamente, o booleano é tratado como um tipo especial de inteiro. Isto significa que, na memória do computador, um
valor booleano é armazenado como um número inteiro, mas com apenas dois valores possíveis: 0 para falso e 1 para
verdadeiro. Tecnicamente, True tem o valor de 1 e False tem o valor de 0. Normalmente, os booleanos não são utilizados
para realizar operações matemáticas; são utilizados para tomar decisões e realizar ramificações.
x = 'This is a string’
print(x) # outputs: This is a string
print(type(x)) # outputs: <class 'str'>
y = "This is also a string“
Imprimir na consola
Em Python, a função print , que é uma das mais de 60 funções incorporadas na linguagem, imprime texto no ecrã.
A instrução abaixo imprime "Hello World!" no ecrã:
print('Hello World!’)
O argumento passado para imprimir é uma string, que é um dos tipos de dados fundamentais em Python utilizados
para armazenar e gerir texto. Por padrão, a impressão produz um caractere de nova linha no final de cada linha,
portanto, as chamadas subsequentes para imprimir serão iniciadas na linha seguinte.
Exercício – Output
Neste exercício, usamos o REPL para declarar variáveis e executar instruções.
Experimente fazer a sua primeira instrução em Python.
O Python suporta uma experiência de consola interactiva, que permite digitar comandos e ver os
resultados imediatamente.
Na consola da Shell, digite python para iniciar o interpretador Python no modo interactivo.
O interpretador deve devolver o texto e criar outro prompt aguardando o próximo comando:
Declarar e Imprimir variáveis
Com o REPL em execução, vamos criar variáveis.
Input do utilizador
Para receber inputs do teclado , o Python fornece a função input(). A função input() lê o que o
utilizador digita no teclado devolvendo a leitura como uma string. Abaixo temos um exemplo que
combina input() e print() para capturar o nome do utilizador e exibi-lo no ecrã:
A string passada como um argumento para a função de entrada é o prompt que o utilizador verá. Neste
exemplo, pedimos ao utilizador para digitar o nome ( 'Enter your name'). Assim que o utilizador digitar um
nome e pressionar Enter, a função input devolve-o . O valor de retorno da função é o texto digitado pelo
utilizador e esse texto é atribuído à variável chamada name. A variável name é então utilizada como uma
entrada/input ou argumento para a função de impressão, que produzirá o nome que o utilizador inseriu.
Este programa terá um comportamento quase igual ao anterior. A diferença é que a impressão adicciona
uma nova linha aceitando o input nessa linha.
Leitura de números como input
A função input devolve o valor digitado como uma string. Esta escolha faz sentido porque o utilizador
pode inserir o valor que quiser. Mesmo que o input seja um número válido, será devolvido como um
tipo de string da função de entrada. Por exemplo:
Executar este código e digitando o valor 5 devolverá <classe 'str'>, mesmo que o valor em si seja
numérico. Para transformar o valor numa variável inteira verdadeira, podemos utilizar a função int():
Este código produzirá <classe 'int'> para o valor 5. Podemos utilizar a função float da mesma
maneira se quisermos um componente fraccionário.
Importante
E se a entrada não for numérica e a passarmos para a função int()? Como seria de esperar, isto seria
um erro e causaria uma falha de Runtime. O programa terminará com esta declaração:
Os caracteres ;\ , no final das duas primeiras instruções sinalizam que existem várias linhas de código. O
uso destes caracteres permite inserir todo o código, linha a linha. O código também é executado e,
como podemos ver, pede a primeira entrada.
Executar um programa
Suponha que criou um programa que consiste em várias instruções. Pode iniciar o programa com o executável Python numa
consola. Uma consola é uma aplicação da linha de comandos que permite interagir com o sistema operativo. Para executar
um programa, digite o nome do programa executável Python, seguido pelo nome do seu programa. Aqui está um exemplo
de tal execução:
Observe como o comando chama print() utilizando parêntesis. É assim que executamos uma função. Se
utilizássemos parêntesis rectos em vez de curvos o programa não funcionaria, como se pode ver executando o
programa novamente com o seguinte código:
Tipos de dados
Uma variável assume um tipo de dados. No programa anterior, a soma obtém o tipo int. No entanto, existem mais tipos de
dados. A seguir estão alguns exemplos que provavelmente encontrará:
Operadores
Os operadores permitem executar várias operações em variáveis e nos seus valores. A ideia geral é que tenhamos um
lado esquerdo e um lado direito e um operador entre eles:
Este exemplo usa uma barra (/) para dividir o valor left_side pelo valor right_side.
Operadores aritméticos
Com operadores aritméticos, executamos cálculos como adicção, subtracção, divisão e multiplicação. Abaixo temos
um subconjunto de operadores aritméticos que podemos utilizar:
Operador Exemplo
x=2
= x passa a ter o valor 2.
x += 2
+= x sofre incrementos de 2. Se antes valia 2, agora tem o valor de 4.
x -= 2
-= x diminuído do valor 2. Se antes valia 2, agora tem o valor de 0.
x /= 2
/= x dividido por 2. Se antes valia 2, agora tem o valor de 1.
x *= 2
*= x multiplicado por 2. Se antes valia 2, agora tem o valor de 4.
Datas
Quando criamos um programa, pode ser necessária alguma interacção com datas. Uma data num programa
normalmente significa tanto a data do calendário como a hora. Podemos utilizar uma data em várias aplicações,
como por exemplo:
Ficheiro de backup: Usar uma data como parte do nome de um ficheiro de backup é uma boa maneira de indicar
quando um backup foi feito e quando precisará de ser efectuado novamente;
Condição: Podemos querer inserir uma lógica específica quanto a uma determinada data;
Métrica: As datas são utilizadas para verificar o desempenho no código para (por exemplo) medir o tempo necessário
para executar uma determinada função. Para trabalhar com uma data, temos de importar o módulo data:
Podemos chamar as funções com as quais desejamos trabalhar. Para obter a data actual, podemos chamar a função
today():
Para mostrar a data na consola, podemos usar a função print(). A função print() utiliza vários tipos de dados
como entrada. Para mostrar a data actual:
Conversão de tipo de dados
Se quisermos utilizar uma data com algo, normalmente uma string, para mostrar a data de hoje na consola, poderemos
encontrar um problema:
+
A última linha da mensagem informa qual é o problema. Tentámos utilizar o operador e combinar dois tipos de dados
diferentes, uma string e um valor não string. Para o código funcionar, temos de converter a data para uma string. A
conversão pode ser feita com a função str():
ERRO
O primeiro programa
Suponha que queremos criar código para executar algumas funções. Comecemos por exibir a data de hoje. A seguir, vamos
adiccionar código para converter parsecs para anos-luz.
Saída desejada
Quando executar o programa, deverá obter o seguinte resultado:
Obter Input
Até agora, aprendemos várias construções da linguagem de programação Python. Também construimos alguns programas. No
entanto, os programas operam com base em dados e esses dados vêm de algum lugar. Vamos ver de perto como recolher
inputs da linha de comando e do utilizador.
No código anterior, a string "2023-01-01" pode ser utilizada como instrução para o programa backup.py iniciar um backup a
partir dessa data. O que obtemos utilizando argumentos de linha de comandos é flexibilidade. O programa pode comportar-se
de forma diferente dependendo do input externo.
Arrayaaaa array
Input do utilizador
Outra maneira de passar dados para o programa é aceitar dados do input do utilizador. Podemos programar para que o
programa diga ao utilizador para inserir informações. Salvamos os dados inseridos no programa e agimos sobre esses dados.
Para capturar informações do utilizador, usa-se a função input():
Suponha que o programa input.py contém o código de exemplo:
A função input() armazena um resultado como uma string , portanto, o código a seguir pode não fazer o que desejamos:
Provavelmente desejava que este programa lhe respondesse com 24 em vez de 1212. Então, o que é que correu mal?
A explicação é que first_number e second_number são strings. Para que o cálculo funcione correctamente, temos de
converter as strings para números/integers usando a função int(). Modificando a última linha do programa para usar a
função int(), resolvemos o problema:
Usando o código como base, actualizamos como o valor parsecs é definido. Começamos por criar uma variável chamada
parsecs_input e definimo-la como o resultado do input, o que deve solicitar ao utilizador inserir o valor de parsecs.
Depois convertemos parsecs_input para um número inteiro utilizando int armazenando-o em parsecs. Finalizamos
executando o cálculo e exibindo o resultado:
Lógica booleana em Python
Introdução
Os Booleanos são um tipo comum de dados em Python. Como já vimos, o modo como os valores booleanos são
armazenados na memória do computador pode variar dependendo da linguagem de programação. Algumas utilizam 1 para
verdadeiro e 0 para falso, enquanto outras utilizam palavras-chave específicas como true e false, ou seja, o seu valor só
pode ser uma de duas opções: verdadeiro ou falso. Entender como usar valores booleanos é fundamental, porque
precisamos deles para escrever lógica condicional.
Usaremos palavras-chave e operadores booleanos para escrever vários tipos de expressões condicionais e determinar a
reacção da nave.
Vamos executar código sob determinadas condições com instruções if, else, e elif. Podemos combinar lógica condicional
e criar condições mais complexas utilizando operadores and e or.
Vamos utilizar a lógica condiccional para criar programas orientados por decisões.
Para expressar a lógica condiccional em Python, usamos instruções if. Quando escrevemos uma instrução if, utilizamos
também outro conceito, os operadores matemáticos. O Python suporta os operadores lógicos comuns da matemática:
equals, not equals, less than, less than or equal to, greater than e greater than or equal to. Em lógica
matemática os operadores são exibidos utilizando símbolos, que é como também são representados em Python:
•Equals: a==b
•Not Equals: a!= b
•Less than: a<b
•Less than or equal to: a<=b
•Greater than: a>b
•Greater than or equal to: a>=b
Expressões de teste
Temos de utilizar uma instrução if para executar o código somente se uma determinada condição for satisfeita. Começamos
por escrever uma instrução if e verificamos a condição utilizando uma expressão de teste. De seguida, determinamos se a
instrução é avaliada como True ou False. Se for True, o próximo bloco de código indentado será executado:
if expressao_teste:
# instrução a executar
Por exemplo:
Output: 93
Em Python, o corpo de uma instrução if deve ser indentado. Qualquer código após uma expressão de teste que não
esteja indentado será sempre executado:
Output: 44
O que são instruções ‘else’ e ‘elif’?
E se quisermos que o programa execute código quando uma expressão de teste for False? E se quisermos incluir outra
expressão de teste? O Python tem outras palavras-chave que podemos utilizar para tornar as instruções if mais complexas:
else e elif. Quando utilizamos if, else e elif combinados, podemos escrever programas complexos com várias
expressões de teste e instruções para executar.
Output: 93
Se a expressão de teste for False, o código no corpo da instrução if será ignorado e o programa continuará a ser executado a
partir da instrução else. A sintaxe de uma declaração if/else é sempre:
if expressao_teste:
# instrução a executar 3
else:
# instrução a executar
a = 27
b = 93
Falso logo
if a <= b:
print("a é menor ou igual a b")
elif a == b:
print("a é igual a b")
Output: a é menor ou igual a b Output: a diferente de b
A sintaxe de uma instrução if/elif é :
if expressao_teste:
# instrução a ser executada
elif expressao_teste:
# instrução a ser executada
a = 27 if expressao_teste:
b = 93
# instrução a ser executada
if a < b:
elif expressao_teste :
print("a é menor do que b") # instrução a ser executada
elif a > b: elif expressao_teste :
print("a é maior que b") # instrução a ser executada
else: else:
print ("a é igual a b") # instrução a ser executada