| | | | |

3 Elementos da Linguagem

3.1 Classes de Objetos Básicos

Python é uma linguagem de programação dinâmica em que as variáveis/objetos são declaradas/os automaticamente ao receberem um valor/dado. Por exemplo, consideramos as seguintes instruções

1x = 2
2y = x * 3.0

Na primeira instrução, a variável x recebe o valor inteiro 2 e, então, é armazenado na memória do computador como um objeto da classe int (número inteiro). Na segunda instrução, y recebe o valor decimal 6.0 (resultado de 2×3.0) e é armazenado como um objeto da classe float (ponto flutuante de 64-bits). Podemos verificar isso, com as seguintes instruções

1print(x)
  2
1print(y)
  6.0
1print(type(x), type(y))
  <class ’int’> <class ’float’>
Observação 3.1.

(Comentários e Continuação de Linha.) Códigos Python admitem comentários e continuação de linha como no seguinte exemplo

1# isto é um comentário
2s = "isto é uma \
3string"
4print(s)
  isto é uma string
1  type(s)
  <class ’str’>
Observação 3.2.

(Notação científica.) O Python aceita notação científica. Por exemplo 5.2×102 é digitado da seguinte forma

15.2e-2
0.052
Observação 3.3.

(Casting.) Quando não há ambiguidade, pode-se fazer a conversão entre objetos de classes diferentes (casting). Por exemplo,

1x = 1
2print(x, type(x))
  1 <class ’int’>
1y = float(x)
2print(y, type(y))
1.0 <class ’float’>

Além de objetos numéricos e string, Python também conta com objetos list (lista), tuple (n-upla) e dict (dicionário). Estudaremos essas classes de objetos mais adiante no minicurso.

Exercício 3.1.1.

Antes de implementar, diga qual o valor de x após as seguintes instruções.

1x = 1
2y = x
3y = 0

Justifique seu resposta e verifique-a.

Exercício 3.1.2.

Implemente um código em que a(o) usuária(o) entra com valores para as variáveis x e y. Então, os valores das variáveis são permutados entre si. Dica: use input para a entrada de dados.

3.2 Operações Aritméticas Elementares

Os operadores aritméticos elementares são:

  • + adição

  • - subtração

  • * multiplicação

  • / divisão

  • ** potenciação

  • \% módulo

  • // divisão inteira

Exemplo 3.1.

Estudamos a seguinte computação

12+8*3/2**2-1
7.0

Observamos que as operações ** tem precedência sobre as operações *, /, \%, //, as quais têm precedência sobre as operações +, -. Operações de mesma precedência seguem a ordem da esquerda para direita, conforme escritas na linha de comando. Usa-se parênteses para alterar a precedência entre as operações, por exemplo

1(2+8*3)/2**2-1
5.5
Observação 3.4.

(Precedência das Operações.) Consulte mais informações sobre a precedência de operadores em Python Docs: Operator Precedence.

Exercício 3.2.1.

Compute as raízes do seguinte polinômio quadrático

p(x)=2x22x4 (1)

usando a fórmula de Bhaskara11endnote: 1Bhaskara Akaria, 1114 - 1185, matemático e astrônomo indiano. Fonte: Wikipédia: Bhaskara II..

O operador \% módulo computa o resto da divisão e o operador // a divisão inteira, por exemplo

1>>> 5 % 2
1
15 // 2
2
Exercício 3.2.2.

Use o Python para computar os inteiros não negativos q e r tais que

25=q3+r, (2)

sendo r o menor possível.

3.3 Funções e Constantes Elementares

O módulo Python math disponibiliza várias funções e constantes elementares. Para usá-las, precisamos importar o módulo em nosso código

1import math

Com isso, temos acesso a todas as definições e declarações contidas neste módulo. Por exemplo

1math.pi
3.141592653589793
1math.cos(math.pi)
-1.0
1math.sqrt(2)
1.4142135623730951
1math.log(math.e)
1.0
Observação 3.5.

(Função Logaritmo.) Notamos que math.log é a função logaritmo natural, i.e. ln(x)=loge(x). A implementação Python para o logaritmo de base 10 é math.log(x, 10) ou, mais acurado, math.log10.

Exercício 3.3.1.

Compute

  1. a)

    sen(π4)

  2. b)

    elog3(π)

  3. c)

    273

Exercício 3.3.2.

Refaça o Exercício 3.2.1 usando a função math.sqrt para computar a raiz quadrada do discriminante.

3.4 Operadores de Comparação Elementares

Os operadores de comparação elementares são

  • == igual a

  • != diferente de

  • > maior que

  • < menor que

  • >= maior ou igual que

  • <= menor ou igual que

Estes operadores retornam os valores lógicos True (verdadeiro) ou False (falso).

Por exemplo, temos

1x = 2
2x + x == 4
True
Exercício 3.4.1.

Considere a circunferência de equação

c:(x1)2+(y+1)2=1. (3)

Escreva um código em que a(o) usuária(o) entra com as coordenadas de um ponto P=(x,y) e o código verifica se P pertence ao disco determinado por c.

Exercício 3.4.2.

Antes de implementar, diga qual é o valor lógico da instrução

1math.sqrt(3)**2 == 3

Justifique sua resposta e verifique!

3.5 Operadores Lógicos Elementares

Os operadores lógicos elementares são:

  • and e lógico

  • or ou lógico

  • not não lógico

Exemplo 3.2.

(Tabela Booleana do and.) A tabela booleana22endnote: 2George Boole, 1815 - 1864, matemático britânico. Fonte: Wikipédia: George Boole. do and é

A B A and B
True True True
True False False
False True False
False False False

Por exemplo, temos

1x = 2
2(x > 1) and (x < 2)
False
Exercício 3.5.1.

Construa as tabelas booleanas do operador or e do not.

Exercício 3.5.2.

Use Python para verificar se 1.4<=2<1.5.

Exercício 3.5.3.

Considere um retângulo r:ABDC de vértices A=(1,1) e D=(2,3). Crie um código em que a(o) usuária(o) informa as coordenadas de um ponto P=(x,y) e o código imprime True ou False para cada um dos seguintes itens:

  1. 1.

    Pr.

  2. 2.

    Pr.

  3. 3.

    Pr¯.

Exercício 3.5.4.

Implemente uma instrução para computar o operador xor (ou exclusivo). Dadas duas afirmações A e B, A xor B é True no caso de uma, e somente uma, das afirmações ser False, caso contrário é False.

3.6 set

Um set em Python é uma coleção de objetos não ordenada, imutável e não admite itens duplicados. Por exemplo,

1a = {1, 2, 3}
2type(a)
  <class ’set’>
1b = set((2, 1, 3, 3))
2print(b)
  {1, 2, 3}
1a == b
True
1# conjunto vazio
2e = set()

Acima, alocamos o conjunto a={1,2,3}. Note que o conjunto b é igual a a. Observamos que o conjunto vazio deve ser construído com a instrução set() e não com {}33endnote: 3Isso constrói um dicionário vazio, como estudaremos logo mais..

Observação 3.6.

(Tamanho de uma Coleção de Objetos.) A função len retorna o número de elementos de uma coleção de objetos. Por exemplo,

1len(a)
3

Operadores envolvendo conjuntos:

  • - diferença entre conjuntos

  • | união de conjuntos

  • & interseção de conjuntos

  • ^ diferença simétrica

Exemplo 3.3.

Os conjuntos

A={2,π,0.25,3,’banana’}, (4)
B={’laranja’,3,arccos(1),1} (5)

podem ser alocados como sets

1import math
2A = {2, math.pi, -0.25, 3, 'banana'}
3B = {'laranja', 3, math.acos(-1), -1}

e, então, podemos computar:

  1. a)

    AB

    1a = A - B
    2print(a)
    {-0.25, 2, ’banana’}
    
  2. b)

    AB

    1b =  A | B
    2print(b)
    {-0.25, 2, 3, 3.141592653589793, ’laranja’, ’banana’, -1}
    
  3. c)

    AB

    1c = A & B
    2print(c)
    {3, 3.141592653589793}
    
  4. d)

    AΔB=(AB)(BA)

    1d = A ^ B
    2print(d)
    {-0.25, 2, ’laranja’, ’banana’, -1}
    
Exercício 3.6.1.

Aloque como set cada um dos seguintes conjuntos:

  1. a)

    O conjunto A dos números 12n6 e que são divisíveis pares.

  2. b)

    O conjunto B dos números 12<n6 e que são divisíveis por 3.

Então, compute o subconjunto de A e B que contém apenas os números divisíveis por 2 e 3.

Observação 3.7.

(Compreensão de sets.) Python disponibiliza a sintaxe de compreensão de sets. Por exemplo,

1C = {x for x in A if type(x) == str}
2print(C)
{’banana’}
Exercício 3.6.2.

Considere o conjunto

Z={4,3,2,1,0,1,2,3,4}. (6)

Faça um código Python para extrair o subconjunto 𝒫 dos números pares do conjunto Z. Depois, modefique-o para extrair o subconjunto dos números ímpares. Dica: use de compreensão de sets.

3.7 tuple

Em Python, tuple é uma coleção ordenada e imutável de objetos. Por exemplo, na sequência alocamos um par, uma tripla e uma quadrupla ordenada usando tuples.

1a = (1, 2)
2print(a, type(a))
(1, 2) <class ’tuple’>
1b = -1, 1, 0
2print(b, len(b))
(-1, 1, 0) 3
1c = (0.5, 'laranja', {2, -1}, 2)
2print(c)
(0.5, ’laranja’, {2, -1}, 2)

Os elementos de um tuple são indexados, o índice 0 corresponde ao primeiro elemento, o índice 1 ao segundo elemento e assim por diante. Desta forma é possível o acesso direto a um elemento de um tuple usando-se sua posição. Por exemplo,

1print(c[2])
{2, -1}

Pode-se também extrair uma fatia (um subconjunto) usando-se a notação :. Por exemplo,

1d = c[1:3]
2print(d)
(’laranja’, {2, -1})

Operadores básicos:

  • + concatenação

    1a = (1, 2) + (3, 4, 5)
    2print(a)
    (1, 2, 3, 4, 5)
    
  • * repetição

    1b = (1, 2) * 2
    (1, 2, 1, 2)
    
  • in pertencimento

    1c =  1 in (-1, 0, 1, 2)
    True
    
Exercício 3.7.1.

Use sets para alocar os conjuntos

A={1,0,2}, (7)
B={2,3,5}. (8)

Então, compute o produto cartesiano A×B={(a,b):aA,bB}. Qual o número de elementos da A×B? Dica: use a sintaxe de compreensão de sets (consulte a Observação 3.7).

Exercício 3.7.2.

Aloque o gráfico discreto da função44endnote: 4O gráfico de uma função restrita a um conjunto A é o conjunto G(f)|A={(x,y):xA,y=f(x)}. f(x)=x2 para x=0,12,1,2. Dica: use a sintaxe de compreensão de conjuntos (consulte a Observação 3.7).

3.8 list

Um list é uma uma coleção de objetos indexada e mutável. Por exemplo,

1x = [-1, 2, -3, -5]
2print(x, type(x))
  [-1, 2, -3, -5] <class ’list’>
1y = [1, 1, 'oi', 2.5]
2print(y)
[1, 1, ’oi’, 2.5]
1vazia = []
2print(len(vazia))
3print(len(y))
0
4

Os elementos de um list são indexados de forma análoga a um tuple, o índice 0 corresponde ao primeiro elemento, o índice 1 ao segundo elemento e assim por diante. Bem como, o índice 1 corresponde ao último elemento, o 2 ao penúltimo e segue. Por exemplo,

1x[-1] = 3.14
2print('x[0] = ', x[0])
3print(x = ', x)'
x[0] = 1
x = [-1, 2, -3, 3.14]
1x[:3] = [10, -20]
2print(x)
[10, -20, -3, 3.14]

Os operadores básicos de concatenação e de repetição também estão disponíveis para um list. Por exemplo,

1x = [1,2] + [3, 4, 5]
2print(x)
3y = [1,2]*2
4print(y)
[1, 2, 3, 4, 5]
[1, 2, 1, 2]
Observação 3.8.

list conta com várias funções prontas para a execução de diversas tarefas práticas como, por exemplo, inserir/deletar itens, contar ocorrências, ordenar itens, etc. Consulte na web Python Docs: More on Lists.

Observação 3.9.

(Alocação versus Cópia.) Estudamos o seguinte exemplo

1x = [2, 3, 1]
2y = x
3y[1] = 0
4print('x =', x)
x = [2, 0, 1]

Em Python, dados têm identificação única. Logo, neste exemplo, x e y apontam para o mesmo endereço de memória. Modificar y é também modificar x e vice-e-versa. Para desassociar y de x, y precisa receber uma cópia de x, como segue

1x = [2, 3, 1]
2print('id(x) =', id(x))
3y = x.copy()
4print('id(y) =', id(y))
5y[1] = 0
6print('x =', x)
7print('y =', y)
id(x) = 140476759980864
id(y) = 140476760231360
x = [2, 3, 1]
y = [2, 0, 1]
Observação 3.10.

(Anexar ou Estender.) Um list tem tamanho dinâmico, premitindo a anexação de um novo item ou sua estensão. A anexação de um item pode ser feita com o método list.append, equanto que a extensão é feita com list.extend. Por exemplo, com o list.append temos

1l = [1, 2]
2l.append((3,4)))
3print(l)
[1, 2, (3, 4)]

Equanto, que com o list.extend obtemos

1l = [1, 2]
2l.extend((3,4)))
3print(l)
[1, 2, 3, 4]
Exercício 3.8.1.

A solução de

x22=0 (9)

pode ser aproximada pela iteração55endnote: 5Iteração do método babilônico. Saiba mais em Wikipédia: Raiz quadrada.

x0=1, (10)
xi+1=12(xi+2xi) (11)

para i=0,1,2,. Aloque uma lista com as quatro primeiras iteradas, i.e. [x0,x1,x2,x3,x4]. Dica: use list.append.

Exercício 3.8.2.

Aloque cada um dos seguintes vetores como um list:

x=(1,3,2), (12)
y=(4,2,0). (13)

Então, compute

  1. a)

    x+y

  2. b)

    xy

Dica: use uma compreensão de lista e os métodos zip e sum.

Exercício 3.8.3.

Uma matriz pode ser alocada como um encadeamento de lists. Por exemplo, a matriz

M=[1223] (14)

pode ser alocada como a seguinte list

1>>> M = [[1,-2],[2,3]]
2>>> M
3[[1, -2], [2, 3]]

Use list para alocar a matriz

A=[121807312] (15)

e o vetor

x=(2,3,1), (16)

então compute Ax.

3.9 dict

Um dict é um mapeamento de objetos (um dicionário), em que cada item é um par chave:valor. Por exemplo,

1a = {'nome': 'triangulo', 'perimetro': 3.2}
2print(a, type(a))
{’nome’: ’triangulo’, ’perimetro’: 3.2} <class ’dict’>

O acesso a um item do dicionário pode ser feito por sua chave, por exemplo,

1a['nome'] = 'triângulo'
2print(a[nome])
’triângulo’

Pode-se adicionar um novo par, simplesmente, atribuindo valor a uma nova chave. Por exemplo,

1a['vértices'] = {'A': (0,0), 'B': (3,0), 'C': (0,4)}
2print('vétice B =', a['vértices']['B'])
vértice B = (3,0)
Exercício 3.9.1.

Considere a função afim

f(x)=3x. (17)

Implemente um dicionário para alocar a raiz da função, a interseção com o eixo y e seu coeficiente angular.

Exercício 3.9.2.

Considere a função quadrática

g(x)=x2x2 (18)

Implemente um dicionário para alocar suas raízes, vértice e interseção com o eixo y.


Envie seu comentário

As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Use de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!