| | | | |

2 Elementos da Linguagem

Compre o e-book deste material aqui!

2.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 2.1.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 2.1.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 2.1.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 2.1.1.

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

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

Justifique sua resposta e verifique-a.

Resposta.

1

Exercício 2.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.

Resposta.
1x = float(input('x = '))
2y = float(input('y = '))
3z = x
4x = y
5y = z
6print('x = ', x)
7print('y = ', y)

2.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 2.2.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 2.2.1.

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

Exercício 2.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..

Resposta.
1a = 2.
2b = -2.
3c = -4.
4dlta = b**2 - 4*a*c
5x1 = (-b - dlta**(1./2))/(2*a)
6x2 = (-b + dlta**(1./2))/(2*a)
7print('x1 = ', x1)
8print('x2 = ', x2)

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

15 % 2
1
15 // 2
2
Exercício 2.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.

Resposta.
1q = 25//3
2print('q = ', q)
3r = 25%3
4print('r = ', r)

2.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 2.3.1.

(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 2.3.1.

Compute

  1. a)

    sen(π4)

  2. b)

    elog3(π)

  3. c)

    273

Resposta.
1import math
2# a)
3a = math.sin(math.pi/4)
4print('a) ', a)
5# b)
6b = 3*math.pi
7print('b) ', b)
8# c)
9c = -(27)**(1/3)
10print('c) ', c)
Exercício 2.3.2.

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

Resposta.
1import math
2a = 2.
3b = -2.
4c = -4.
5dlta = b**2 - 4*a*c
6x1 = (-b - math.sqrt(dlta))/(2*a)
7x2 = (-b + math.sqrt(dlta))/(2*a)
8print('x1 = ', x1)
9print('x2 = ', x2)

2.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 2.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.

Resposta.
1x = float(input('x = '))
2y = float(input('y = '))
3resp = (x-1.)**2 + (y+1.)**2 <= 1.
4print('P em c?', resp)
Exercício 2.4.2.

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

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

Justifique sua resposta e verifique!

Resposta.

False

2.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 2.5.1.

(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 2.5.1.

Construa as tabelas booleanas do operador or e do not.

Resposta.
1print('A B | A or B')
2print(True, True, '|', True or True)
3print(True, False, '|', True or False)
4print(False, True, '|', False or True)
5print(False, False, '|', False or False)
6
7print('A | not(A)')
8print(True, '|', not(True))
9print(False, '|', not(False))
Exercício 2.5.2.

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

Resposta.
1import math
2resp = 1.4 <= math.sqrt(2) < 1.5
3print('1.4 <= math.sqrt(2) < 1.5 ?', resp)
Exercício 2.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. a)

    Pr.

  2. b)

    Pr.

  3. c)

    Pr¯.

Resposta.
1x = float(input('x = '))
2y = float(input('y = '))
3print('P em r', \
4      (1 < x < 2) and (1 < y < 3))
5print('P na fronteira', \
6      ((x == 1 or x == 2) and (1 <= y <= 3)) or \
7      (( 1 <= x <= 2) and (y == 1 or y == 3)))
8print('P fora do fecho', \
9      (x < 1 or x > 2) or (y < 1 or y > 3))
Exercício 2.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.

Resposta.

(A or B) and not(A and B)

2.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 2.6.1.

(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 2.6.1.

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 2.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 por 2.

  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.

Resposta.
1A = {-12, -10, -8, -6, \
2    -4, -2, 0, 2, 4, 6}
3B = {-12, -9, -6, -3, \
4    0, 3, 6}
5C = A & B
6print('C = ', C)
Observação 2.6.2.

(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 2.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, modifique-o para extrair o subconjunto dos números ímpares. Dica: use de compreensão de sets.

Resposta.
1Z = {-4, -3, -2, -1, \
2    0, 1, 2, 3, 4}
3P = {p for p in Z if p % 2 == 0}
4print('P = ', P)

2.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 2.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 2.6.2).

Resposta.
1A = {-1, 0, 2}
2B = {2, 3, 5}
3P = {(a,b) for a in A for b in B}
4print('P = ', P)
Exercício 2.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 2.6.2).

Resposta.
1X = {0., 0.5, 1., 2.}
2G = {(x, x**2) for x in X}
3print('G = ', G)

2.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 2.8.1.

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 2.8.2.

(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 2.8.3.

(Anexar ou Estender.) Um list tem tamanho dinâmico, permitindo a anexação de um novo item ou sua extensão. A anexação de um item pode ser feita com o método list.append, enquanto 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)]

Enquanto, que com o list.extend obtemos

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

A solução de

x22=0 (9)

pode ser aproximada pela iteração do método babilônico

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.

Resposta.
1x = [1] # x0
2x.append(0.5*(x[-1] + 2./x[-1])) # x1
3x.append(0.5*(x[-1] + 2./x[-1])) # x2
4x.append(0.5*(x[-1] + 2./x[-1])) # x3
5x.append(0.5*(x[-1] + 2./x[-1])) # x4
6print('x = ', x)
Exercício 2.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.

Resposta.
1# a)
2x = [-1, 3, -2]
3y = [4, -2, 0]
4xpy = [xy[0]+xy[1] for xy in zip(x,y)]
5print('x + y = ', xpy)
6
7# b)
8dxy = sum([xy[0]*xy[1] for xy in zip(x,y)])
9print('x . y = ', dxy)
Exercício 2.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

1M = [[1,-2],[2,3]]
2M
[[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.

Resposta.
1A = [[1,-2,1],
2    [8,0,-7],
3    [3,-1,-2]]
4x = [2,-3,1]
5Ax = [sum([aix[0]*aix[1] for aix in zip(ai, x)]) for ai in A]
6print('Ax = ', Ax)

2.9 dict

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

1a = {'nome': 'triangulo', 'perímetro': 3.2}
2print(a, type(a))
{’nome’: ’triangulo’, ’perímetro’: 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értice B =', a['vértices']['B'])
vértice B = (3,0)
Exercício 2.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.

Resposta.
1f_dict = {'raiz': 3.,
2          'y_intercep': 3.,
3          'coef_angular': -1.}
4print('raiz = ', f_dict['raiz'])
5print('y_intercep = ', f_dict['y_intercep'])
6print('coef_angular = ', f_dict['coef_angular'])
Exercício 2.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.

Resposta.
1g_dict = {'raízes': (-1., 2.),
2          'vértice': 0.5,
3          'y_intercep': 2.}
4print('raiz = ', g_dict['raízes'])
5print('y_intercep = ', g_dict['y_intercep'])
6print('vértice = ', g_dict['vértice'])

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 Uso 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!