0% acharam este documento útil (0 voto)
8 visualizações

Alg Prog Python II

Enviado por

Manuel
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
8 visualizações

Alg Prog Python II

Enviado por

Manuel
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 48

AlgProgPython2SemEx

March 25, 2021

1 4. Python

1.1 4.1 Palavras reservadas em Python


1.2 4.1 Reserved Words in Python

[1]: import keyword


keyword.iskeyword('break')
True
keyword.kwlist

[1]: ['False',
'None',
'True',
'and',
'as',
'assert',
'async',
'await',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',

1
'is',
'lambda',
'nonlocal',
'not',
'or',
'pass',
'raise',
'return',
'try',
'while',
'with',
'yield']

[44]: import builtins


dir(builtins)

[44]: ['ArithmeticError',
'AssertionError',
'AttributeError',
'BaseException',
'BlockingIOError',
'BrokenPipeError',
'BufferError',
'BytesWarning',
'ChildProcessError',
'ConnectionAbortedError',
'ConnectionError',
'ConnectionRefusedError',
'ConnectionResetError',
'DeprecationWarning',
'EOFError',
'Ellipsis',
'EnvironmentError',
'Exception',
'False',
'FileExistsError',
'FileNotFoundError',
'FloatingPointError',
'FutureWarning',
'GeneratorExit',
'IOError',
'ImportError',
'ImportWarning',
'IndentationError',
'IndexError',
'InterruptedError',
'IsADirectoryError',

2
'KeyError',
'KeyboardInterrupt',
'LookupError',
'MemoryError',
'ModuleNotFoundError',
'NameError',
'None',
'NotADirectoryError',
'NotImplemented',
'NotImplementedError',
'OSError',
'OverflowError',
'PendingDeprecationWarning',
'PermissionError',
'ProcessLookupError',
'RecursionError',
'ReferenceError',
'ResourceWarning',
'RuntimeError',
'RuntimeWarning',
'StopAsyncIteration',
'StopIteration',
'SyntaxError',
'SyntaxWarning',
'SystemError',
'SystemExit',
'TabError',
'TimeoutError',
'True',
'TypeError',
'UnboundLocalError',
'UnicodeDecodeError',
'UnicodeEncodeError',
'UnicodeError',
'UnicodeTranslateError',
'UnicodeWarning',
'UserWarning',
'ValueError',
'Warning',
'WindowsError',
'ZeroDivisionError',
'__IPYTHON__',
'__build_class__',
'__debug__',
'__doc__',
'__import__',
'__loader__',

3
'__name__',
'__package__',
'__spec__',
'abs',
'all',
'any',
'ascii',
'bin',
'bool',
'breakpoint',
'bytearray',
'bytes',
'callable',
'chr',
'classmethod',
'compile',
'complex',
'copyright',
'credits',
'delattr',
'dict',
'dir',
'display',
'divmod',
'enumerate',
'eval',
'exec',
'filter',
'float',
'format',
'frozenset',
'get_ipython',
'getattr',
'globals',
'hasattr',
'hash',
'help',
'hex',
'id',
'input',
'int',
'isinstance',
'issubclass',
'iter',
'len',
'license',
'list',

4
'locals',
'map',
'max',
'memoryview',
'min',
'next',
'object',
'oct',
'open',
'ord',
'pow',
'print',
'property',
'range',
'repr',
'reversed',
'round',
'set',
'setattr',
'slice',
'sorted',
'staticmethod',
'str',
'sum',
'super',
'tuple',
'type',
'vars',
'zip']

1.3 4.2 Exemplos de atribuições de valores de diferentes tipos de dados


1.4 4.2 Diferent Types of Values Assignment

[2]: x = 20
print ('Inteiro', x, '\n')
print ('Vírgula Flutuante convertida de inteiro', float(x), '\n')
x=2.00034567
print ('Vírgula Flutuante', x, '\n')
x = complex(2 ,3)
print ('Complexo', x, '\n')
x = "a"
print ('Caracter', x,'\n')
x = "Estatística"
print ('Texto',x, '\n')
print ('Texto caracter na 2º posiçao',x[1])

5
Inteiro 20

Vírgula Flutuante convertida de inteiro 20.0

Vírgula Flutuante 2.00034567

Complexo (2+3j)

Caracter a

Texto Estatística

Texto caracter na 2º posiçao s

1.5 4.2. Operadores


1.6 4.2. Python Operators
Artimétricos

Arithmetics
‘+’ operador da adição
‘-’ operador da subtração
’*’ operador da multiplicação
‘/’ operador da divisão
‘%’ operador de módulo
‘//’ operador de divisão e conversão em inteiro aproximado (Floor)
** operador de potência (2 ** 3 -> 23)

[3]: a=5; b=4


print (a+b)

[7]: a=5; b=4


print (a-b)

[8]: a=5; b=4


print (a*b)

20

6
[4]: a=5; b=4
print (a/b)

1.25

[5]: a=15; b=10


print (a%b)

[8]: a=5; b=2


print (a//b)

[9]: a=5; b=4


print (a**b)

625

Relacionais

Relational
‘==’ operador de comparação de equivalência
‘!=’ operador da comparação de não equivalência
‘<’ operador menor que
‘>’ operador maior que
‘<=’ operador menor ou igual que
‘>=’ operador maior ou igual que

[10]: z=1
z == 1

[10]: True

[12]: z=1
z != 1

[12]: False

[14]: z=0
z < 1

[14]: True

7
[24]: z=1
z > 1

[24]: False

[17]: z=1
z <= 1

[17]: True

[26]: z=1
z >= 1

[26]: True

1.6.1 Condições compostas


Operadores lógicos (and, or e not)

1.6.2 Composed conditins


Logic Operators (and, or e not)
[21]: x=1
y=2
z=3
z > y and z>x

[21]: True

[25]: x=3
y=2
z=1
z > y or z<x

[25]: 1

[28]: y=2
z=1
not (z > y)

[28]: True

[30]: x=3
y=2
z=1
not(z > y and z>x)

8
[30]: True

[33]: idade = 22
idade > 21 and idade < 25

[33]: True

[35]: # OU, em alternativa o python permite escrever a condição anterior desta forma
idade = 22
21 < idade < 25
idade > 21 or idade < 25

[35]: True

Lógicos binários ou de bits

1.6.3 Binary Logic or Bits Operators


‘&’ operador E (And)
‘|’ operador Ou (or)
‘ˆ’ operador xor (xor)
‘~’ operador negação
‘«’ mudar bits à esquerda
‘»’ mudar bits à direita
[41]: a = 1 # binário (01) 100=>010
b = 1 # binário (01)

[44]: print ("E: ", a & b, "\n") #1


print (bin(a & b), "\n") #1
print ("Ou: ", a | b, "\n")#1
print (bin(a | b), "\n")#1
print ("Xor: ", a ^ b, "\n")#0
print (bin(a ^ b), "\n")#0
print ("Negação: ", ~ a & b , "\n")#0
print (bin(~a & b), "\n")

print ("mudar bit esq.: ", a << 2, "\n")


print (bin(a << 2), "\n")

print ("mudar bit dir.: ", 4 >> 2, "\n")


print (bin(4 >> 2), "\n")

E: 1

9
0b1

Ou: 1

0b1

Xor: 0

0b0

Negação: 0

0b0

mudar bit esq.: 4

0b100

mudar bit dir.: 1

0b1

Prioridade de operadores em Python


Priority of operator’s in Python

Prioridade/ Priority Operador / Operator


1 ** Exponenciação
2 * / % // Mult, Div e Módulo
3 +- Adição, Subtração
4 »« Deslocação de bits
5 & E
6 ˆ
7 <= < > >= Comparações
8 <> == != Igualdades
9 = %= /= //= -= += *= **= Atribuições

[57]: a=1

a-=2 #ou #a=a-2

print(a)

-1

10
2 4.3 Funções

3 4.3 Function in Python


3.0.1 Funções embebidas
3.0.2 Embeded Functions
[58]: from IPython.display import IFrame
IFrame('https://docs.python.org/3/library/functions.html', width='100%',␣
,→height=350)

[58]: <IPython.lib.display.IFrame at 0x19cf9ee3c40>

Conversão de sistemas numéricos:

Numerical Systems Conversion:


hex() Conversão de uma valor para hexadecimal
oct() Conversão de uma valor para octal
Conversão de uma valor hexadecimal para decimal
> '0XAA' int('0xaa',16) Conversão de uma valor hexadecimal para decimal, sendo que a entrada da
Conversão de uma valor octal para decimal
> '010' int('010',8) Conversão de uma valor octal para decimal, sendo que a entrada da função é
Conversão de uma valor binário para decimal
> '1010' int('1010',2) Conversão de uma valor binário para decimal, sendo que a entrada da funçã
int(número) Devolve a parte inteira de um número
float(número) Devolve um número em |R.
str(número) Devolve um número em texto
bin(número) Devolve um número em binário
chr(número) Devolve o valor ASCII de um número
ord(‘númerocaracter’) Devolve o valor de ordem ASCII de um caracter
[64]: ord("A")

#int('1110',2)

[64]: 98

[66]: chr(65)

11
[66]: 'A'

3.0.3 Simplificação:
3.0.4 Mathematical Simplification:
round() Arredonda o número com x casa decimais round(x, 2)
complex() Definição de um número complexo
abs() Obter o valor absoluto, caso complexo devolve a parte real
divmod(x,y) Devolve o quociente e o resto
isinstance(x,classe) Devolve verdadeiro caso o valor pertença a uma classe
pow(x,potência, terceirovalor para obter o módulo do resultado) Devolve a solução da
potência x elevado y
range(x, y, z) constrói um conjunto de números entre x e y com um salto de z

[71]: # round()
print ("round: ", round(5.6231))
print ("round 2 casas: ",round(4.55892, 2))

# complex()
c = complex (5.6231, 2)
print ("complex(): ", c)

# abs()
print ("abs(): ",abs(c))

# divmod(x,y)
print ("divmod(): ",divmod(5,2))

#isinstance(x,classe)
print ("isinstance(): ",isinstance(5,int))
print ("isinstance(): ",isinstance(5.0,int))
print ("isinstance(): ", isinstance(5,(int, float)))

# pow(x,y)
print ("pow(): ",pow(5,2))

# pow(x,y, z)
print ("pow(): ",pow(2,2,6))

# range(x,y, z)
print(list(range(5, 25, 5)))

round: 6
round 2 casas: 4.56

12
complex(): (5.6231+2j)
abs(): 5.968186794161189
divmod(): (2, 1)
isinstance(): True
isinstance(): False
isinstance(): True
pow(): 25
pow(): 4
[5, 10, 15, 20]

3.0.5 4.4. Entrada e saída de dados


3.0.6 4.4. Entrada e saída de dados
[72]: name = input("What's your name? ")
print("Nice to meet you " + name + "!")
age = int(input("Your age? "))
print("So, you are already " + str(age) + " years old, " + name + "!")

What's your name? nuno


Nice to meet you nuno!
Your age? 22
So, you are already 22 years old, nuno!

[73]: idade = input("Introduza a idade: ")

Introduza a idade: 15

[74]: print("A sua idade é: %s" % idade)

idadecom30 = int(idade) + 30

print("A sua idade daqui a 30 anos: %s" % idadecom30)

A sua idade é: 15
A sua idade daqui a 30 anos: 45

[75]: type(idade)

[75]: str

[ ]: # Introduza em forma de lista ex.: Python, Lisp,C++


programming_language = input("Your favourite programming languages? ")

print(programming_language, type(programming_language))

13
3.1 4.5 Decisão
3.2 4.5 Decision
3.2.1 if-then (com alternativa vazia)

[3]: var = 100


if ( var == 100 ) :
print("O valor da variável é 100!")
print ("Terminou!")

O valor da variável é 100!


Terminou!

3.2.2 if-then-else
[5]: a = int(input("1.º Valor:"))
b = int(input("2.º Valor:"))
if a > b:
max = a
print("O 1.º valor é o maior")
else:
max = b
print("O 2.º valor é o maior")
print("O valor maior é = " + str(max))

1.º Valor: 12
2.º Valor: 1
O 1.º valor é o maior
O valor maior é = 12

3.2.3 If´s indentados/aninhados


[8]: a = int(input("1.º Valor:"))
b = int(input("2.º Valor:"))
c = int(input("3.º Valor"))
if a > b:
max = a
if max < c:
max = c
else:
max = b
if max < c:
max = c
print("O maior valor de " + str(a) + ", " + str(b) + ", " + str(c) + " é " +␣
,→str(max))

1.º Valor: 12

14
2.º Valor: 12
3.º Valor 12
O maior valor de 12, 12, 12 é 12

3.2.4 Estrutura IF-THEN-ELSE IF


[9]: # Problema (5) da aula téorica
nome = input("Nome:")
hExtras = int(input("Horas extras:"))
print("Horas em falta")
hFaltas = int(input("Horas em falta:"))
hIndice = hExtras - 2 / 3.0 * hFaltas
print("hIndice " + str(hIndice))
if hIndice > 40:
premio = 500
elif hIndice > 30:
premio = 400
elif hIndice > 20:
premio = 300
elif hIndice > 10:
premio = 200
else:
premio = 100
print("O premio para o " + nome + " é " + str(premio))

Nome: António
Horas extras: 12
Horas em falta
Horas em falta: 3
hIndice 10.0
O premio para o António é 100

3.3 4.5. Ciclos de Iteração


3.4 4.5. Ciclos de Iteração
[10]: #ciclo While
# Este programa em python conta os números inteiros entre [0 a 9[ e imprime o␣
,→valor do contador em cada momento

count = 12
while (count > -1):
print ('Contador:', count)
count -= 1

print ("Terminou ciclo!")

15
Contador: 12
Contador: 11
Contador: 10
Contador: 9
Contador: 8
Contador: 7
Contador: 6
Contador: 5
Contador: 4
Contador: 3
Contador: 2
Contador: 1
Contador: 0
Terminou ciclo!

[13]: #ciclo for


# Este programa em python imprime a palavra "Python" letra a letra
for letter in 'Python': # 1º exemplo
print ('Current Letter :', letter)

print ("Terminou ciclo!\n")


# Este programa em python imprime o conteúdo de uma lista de frutas
fruits = ['banana', 'maçã', 'manga']
for fruit in fruits: # 2º exemplo
print ('Current fruit :', fruit)

print ("Terminou ciclo!\n")

# Este programa em python imprime o conteúdo entre [2 e 6[


for x in range(2, 6):
print(x)

print ("Terminou ciclo!\n")

Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : h
Current Letter : o
Current Letter : n
Terminou ciclo!

Current fruit : banana


Current fruit : maçã
Current fruit : manga
Terminou ciclo!

16
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
37
39
41
43
45
47
49
51
53
55
57
59
61
63
65
67
69
71
73
75
77
79
81
83
85
87
89
91
93
95
97

17
99
Terminou ciclo!

[14]: #Ciclos aninhados


# Este programa em python imprime os números primos até 100
# A instrução break deve ser utilizada após esgotadas as restantes soluções.␣
,→Neste caso, impede que se processo o número não sendo par.

i = 2
while(i < 100):
j = 2
while(j <= (i/j)):
if not(i%j): break
j = j + 1
if (j > i/j) : print( i, " é primo!")
i = i + 1

print ("Terminou ciclo!")


# Elabore outra versão

2 é primo!
3 é primo!
5 é primo!
7 é primo!
11 é primo!
13 é primo!
17 é primo!
19 é primo!
23 é primo!
29 é primo!
31 é primo!
37 é primo!
41 é primo!
43 é primo!
47 é primo!
53 é primo!
59 é primo!
61 é primo!
67 é primo!
71 é primo!
73 é primo!
79 é primo!
83 é primo!
89 é primo!
97 é primo!
Terminou ciclo!

18
[16]: #Os ciclos podem ser interrompidos com a instrução 'break'

for letter in 'Python': # 1º exemplo


if letter == 'h':
break
print( 'Letra atual :', letter)

var = 10 # 2º exemplo
while var > 0:
print( 'Valor da variável atual :', var)
var -= 1
if var == 5:
break

print ("Terminou ciclo!")

Letra atual : P
Letra atual : y
Letra atual : t
Valor da variável atual : 10
Valor da variável atual : 9
Valor da variável atual : 8
Valor da variável atual : 7
Valor da variável atual : 6
Terminou ciclo!

[17]: #ignorar iterações com 'continue'

for letter in 'Python': # 1º exemplo


if letter == 'h':
continue
print( 'Letra atual :', letter)

var = 10 # 2º exemplo
while var > 0:
var = var -1
if var == 5:
continue
print( 'Valor da variável atual :', var)
print ("Terminou ciclo!")

Letra atual : P
Letra atual : y
Letra atual : t
Letra atual : o
Letra atual : n
Valor da variável atual : 9
Valor da variável atual : 8

19
Valor da variável atual : 7
Valor da variável atual : 6
Valor da variável atual : 4
Valor da variável atual : 3
Valor da variável atual : 2
Valor da variável atual : 1
Valor da variável atual : 0
Terminou ciclo!

3.5 4.6 Definição de funções


3.6 4.6 Users function definition
[18]: #def <nomedafinção (parâmetros)=> instrução para indicar que se trata de uma␣
,→função e respetivas parâmetros

def calcular_pagamento(qtd_horas, valor_hora):


horas = float(qtd_horas)
taxa = float(valor_hora)
if horas <= 40:
salario=horas*taxa
else:
h_excd = horas - 40
salario = 40*taxa+(h_excd*(1.5*taxa))
return salario

print("Valor a pagar:", calcular_pagamento(41, 10))

Valor a pagar: 415.0


Passagem por valor e referência vs Imutável e não Imutável (Python)
Parameters by value, by reference VS Immutable and mmutable (Python)

3.7 Funções Recursivas


Tratam-se de funções que para determinada solução são chamadas dentro dela mesma.
Por exemplo, factorial(3)

3.7.1 Recursive Functions


Special functions that call themselves
e.g, factorial(3)

[19]: def fatorial (n):


if n == 0:
return 1
else:

20
return n * fatorial(n - 1)

fatorial(3)

[19]: 6

3 * factorial(2)
3 * (2 * factorial(1))
3 * (2 * (1 * factorial(0)))
3 * (2 * (1 * 1))
3 * (2 * 1)
3*2
6
As funções recursivas são constituídas por duas partes distintas:
1. Uma parte básica, também chamada caso terminal, a qual constitui a versão mais simples
do problema para o qual a solução é conhecida. No caso da função fatorial esta parte corre-
sponde ao caso em que n = 0.
2. Uma parte recursiva, também chamada caso geral, na qual o problema é definido em termos
de uma versão mais simples de si próprio. No caso da função fatorial, isto corresponde ao
caso em que n > 0.
O algoritmo apresentado para o cálculo do máximo divisor comum afirma que:
1. O máximo divisor comum entre um número e zero é o próprio número.
2. Quando dividimos um número por um menor, o máximo divisor comum entre o resto da
divisão e o divisor é o mesmo que o máximo divisor comum entre o dividendo e o divisor.
Este algoritmo corresponde claramente uma definição recursiva. Podemos aplicar directamente o
algoritmo, dado origem à seguinte função que calcula o máximo divisor comum:
The recursive functions are composed by two parts:
1. Basic part or terminal case which is the simple known version of the solution. In this case of
factorial it’s when n=0.
2. The other part is the recursive or general case which the simplest version of itself. In this
case is when n > 0.
The algorithm proposed to obtain the common maximum divisor (c.m.d.) states that:
1. The c.m.d. between a number and zero is the number itself.
2. When we divide the number by another and it’s minor, the c.d.m between the remain of the
division by it’s divider is the same of the c.d.m. of the dividend and the divisor.
The described algorithm it’s clearly a recursive definition. Thus, we can apply directly the logic to
the following function of c.d..m.:

21
[1]: def mdc (m, n):
if n == 0:
return m
else:
return mdc(n, m % n)

#Programa mdc

print('Introduza o 1º número:')
a=int(input())
print('Introduza o 2º número:')
b=int(input())
m_d_c = mdc(int(a),int(b))
print("máximo divisor comum é:" + str(m_d_c))

Introduza o 1º número:
7
Introduza o 2º número:
3
máximo divisor comum é:1

3.8 4.7 Estruturas de dados em Python


https://docs.python.org/3/tutorial/datastructures.html

3.9 4.7 Estruturas de dados em Python


3.9.1 4.7.1 Tuplos (Tuple)
Sintaxe:
<estrutura "tuple"> ::= () | (<elemento>, <elementos>)
<elementos> ::= (vazio) | (<elemento>, ) | (<elemento>, [<elementos>])
<elemento>::= <expressão> <expressão>::= <Tuplo> | <Range()> | <dicionário> | <lista> Syntax:
<structure "tuple"> ::= () | (<element>, <elements>)
<elements> ::= (empty) | (<element>, ) | (<element>, [<elements>])
<element>::= <expression> <expression>::= <Tuple> | <Range()> | <list> | <dictionary> O tuplo
() não tem elementos e é chamado o tuplo vazio.
As seguintes entidades representam tuplos em Python:
(1, 2, “três”)
(2, True)
(1, ).

22
Na estrutura tuplo é possível guardar dados de vários tipo no mesmo.
Note-se que o último tuplo apenas tem um elemento. A definição sintática de um tuplo exige que
um tuplo com um elemento contenha esse elemento seguido de uma vírgula, pelo que (1) não
corresponde a um tuplo em Python, mas sim (1, ).
Os tuplos são imutáveis pelo que não é possível alterar os valores dos seus elementos.
When the tuple () hasn’t elements it’s called empty tuple.
The following entities represent tuples in Python:
(1, 2, “three”)
(2, True)
(1, ).
In the tuple striucture it’spossible to store values from different types.
Note that the last example only has on element. According to the syntax of the tuple when it has
one element only it has to be with a comma. thus (1) doesn’t represent a tuple it should be like (1,
).
The tuples are immutable so its values cannot be changed.

[3]: notas = (15, 6, 10, 12, 12)


print(notas[-3])
print(notas[2])

10
10
Para acedermos a um elemento de um tuplo é necessário indicar o seu índice. Nota: os índices
começam em (0. . . n), no caso de índice positivo ou (n..0) no caso de índice negativo.
To get access to an element of a tuple we need its index. Note: The index begin with (0. . . n) when
it is positive or (n..0) in case of negative.

[4]: print(notas[0])

print(notas[3])

print(notas[6]) # IndexError: tuple index out of range - o índice 6 não existe!!!

15
12

---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-4-747a74b5607c> in <module>
3 print(notas[3])
4

23
----> 5 print(notas[6]) # IndexError: tuple index out of range - o índice 6 não␣
,→existe!!!

IndexError: tuple index out of range

[5]: #quando se trata do índice negativo, obtemos o elemento do final do tuplo para o␣
,→início

print(notas[-5])

print(notas[-1])

print(notas[-6]) # IndexError: tuple index out of range - o índice -6 não existe!


,→!!

15
12

---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-5-c1dbc09e5d5f> in <module>
5 print(notas[-1])
6
----> 7 print(notas[-6]) # IndexError: tuple index out of range - o índice -6 não␣
,→existe!!!

IndexError: tuple index out of range

[17]: # elementos de um tuplo que são tuplos


a = ((1,2,3),4,(5,6))
print(a)
#imprimir o primeiro elemento do tuplo a que se trata do tuplo (1,2,3)
print(a[0])
#imprimir o segundo elemento do tuplo (1,2,3)
print(a[0] [1])

# não é possível atribuir valores aos elementos dos tuplos


a[0] [1] = 4 #'tuple' object does not support item assignment

((1, 2, 3), 4, (5, 6))


(1, 2, 3)
2

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-48a8c6517cdc> in <module>

24
8
9 # não é possível atribuir valores aos elementos dos tuplos
---> 10 a[0] [1] = 4 #'tuple' object does not support item assignment

TypeError: 'tuple' object does not support item assignment

3.9.2 Operações com tuplos


3.9.3 Possible operations with Tuples

Operação Sintaxe valor


+ <tuplo> + <tuplo> Concatenação dos dois tuplos
* <tuplo> <inteiro> Repete o tuplo n vezes
[indi:indf] <índice inicial> : <índice final> Obtém o tuplo desde o índice inicial ao final
-1
in <elemento> in <tuplo> Verdadeiro caso o elemento pertença ao tuplo
len() len(<tuplo>) Devolve o tamanho do tuplo
max() max(<tuplo>) Devolve o maior valor dos elementos de um
tuplo
min() min(<tuplo>) Devolve o menor valor dos elementos de um
tuplo
sum() sum(<tuplo>) Devolve o somatório dos elementos
cmp() cmp(<tuplo1>,<tuplo2> ) Devolve verdadeiro se os tuplos forem
idênticos
sorted() sorted(<tuplo1>, Devolve uma lista ordenada
<reverse=True|False>)

[18]: a = (1,2,3)
b= (4,5,6)
print (a+b)

(1, 2, 3, 4, 5, 6)

[22]: c = a+b
c[3:5]

[22]: (4, 5)

[89]: a*3

[89]: (1, 2, 3, 1, 2, 3, 1, 2, 3)

[25]: print (3 in a)
print (4 in a)

25
True
False

[26]: print(len(a))

[19]: print(a[:2])# Até à posição do índice 2


print(a[2:]) # a partir da posição do índice 2
print(a[:]) # qualquer índice, ou seja, tudo

(1, 2)
(3,)
(1, 2, 3)
Embora não seja possível alterar o valor dos elementos, o conteúdo da variável a é
substituído pelo a+b
Besides the immutability of the tuples we can substitute the content of a previous tuple
variable with another set of elements a+b has follow:
[20]: a = a+b
print(a)

(1, 2, 3, 4, 5, 6)

[8]: # Descompactar - atribuir variáveis a cada elemento do tuplo


percentagens=(99,95,90,89,93,96)
p1,p2,p3,p4,p5,p6=percentagens
p3

book=(1,"nome", "tema")
ind,tit,tema=book
tit

[8]: 'nome'

[25]: # Apagar elemento num tuplo não é possível pela imutabilidade,


# no entanto podemos apagar todo o tuplo
percentagens=(99,95,90,89,93,96)
del percentagens

Iteração em tuplos
Problema:
Elabore um programa em python que some o valor dos elementos de um tuplo

[9]: #Com o ciclo de repetição while


t1 = (23,44,6,77,8,23,3)

26
it, soma=0, 0

while it < len(t1):


soma+=t1[it]
it+=1#it=it+1
print("Soma:", soma)

Soma: 184

[10]: #Com o ciclo de repetição sequencial for


t1 = (23,44,6,77,8,23,3)
el, soma=0, 0

for el in t1:
ifel[0]>vint
soma+=el
print("Soma:", soma)

Soma: 184

[28]: #Com o ciclo de repetição sequencial for e a função range


t1 = range(1,100,2)
el, soma=0, 0

for el in t1:
soma+=el
print("Soma:", soma)

Soma: 2500

3.9.4 4.7.2 Listas (Lists)


Uma lista é uma sequência de elementos de qualquer tipo. Esta definição é semelhante à de um tu-
plo. Contudo, em oposição aos tuplos (), as listas são tipos mutáveis[], no sentido de que podemos
alterar destrutivamente os seus elementos. Na maioria das linguagens de programação existem
tipos semelhantes às listas existentes em Python, sendo conhecidos por vectores ou por tabelas,
em Inglês Arrays.
A list is a sequence of elements of any type of values. This definition is alike the definition of Tu-
ples () but, the main diferrence is that the lists are mutable[] so it is possible to change destructibly
its elements.
In general the other programming languages call this kind of type Arrays. Sintaxe:
<estrutura "List"> ::= [] | [<elementos>]
<elementos> ::= [<elemento>] | [<elemento>, <elementos>]
<elemento>::= <expressão>

27
<expressão>::= <Tuplo> | <Range()> | <dicionário> | <lista> <div class="alert alert-block alert-
success">
Syntax:
<structure "List"> ::= [] | [<elemento>]
<elementos> ::= [<element> ] | [<element>, <elements>]
<element>::= <expression>
<expression>::= <Tuple> | <Range()> | <dictionary> | <list> A lista[] tem o nome de lista vazia.
As seguintes entidades representam listas em Python [1, 2, 3], [2, (1, 2)], [’a’]. Em oposição aos
tuplos, uma lista de um elemento não contém a virgula ex.:(1,).
Tal como no caso dos tuplos, os elementos de uma lista podem ser, por sua vez, outras listas, pelo
que a seguinte entidade ´e uma lista em Python [1, [2], [[3]]].
some list lista[] is called empty list.
The following lements are lists in Python [1, 2, 3], [2, (1, 2)], [’a’]. In lists of one element does not
require a comma like the tuples eg.:(1,).
As in Tuples the elements could be another lists like this list in Python [1, [2], [[3]]].

3.9.5 Operações com listas


3.9.6 Some possible operations with lists

Operação Sintaxe valor


+ <lista> + <lista> Concatenação dos duas listas
* <lista> <expressão> Repete o lista n vezes
[indi:indf] <índice inicial> : <índice final> Obtém a lista desde o índice inicial ao final -1
in <elemento> in <lista> Verdadeiro caso o elemento pertença à lista
len() len(<lista>) Devolve o tamanho da lista
max() max(<lista>) Devolve o maior valor dos elementos de uma
lista
min() min(<lista>) Devolve o menor valor dos elementos de
uma lista
sum() sum(<lista>) Devolve o somatório dos elementos
del() del(<elemento> | <lista> ) Aapaga o elemento da lista ou a lista inteira
append() append(<elemento>) Adiciona elemento à lista
insert() <lista>.insert(<índice>, Insere um elemento à lista na posição do
<elementonovo>) índice
remove() <lista>.remove(<valor>) Remove o elemento à lista com determinado
valor
sort() <lista>.sort( [<key>,<reverse>]) Ordena os elementos da lista
split() <lista>.split( [<carater>]) Separa valores pelo carater definido

28
[29]: lst1 = [1, 2, 3]
lst2 = [[4, 5]]
lst = lst1 + lst2
print(lst)
print(len(lst))
print(lst[3])
print(lst[3][0])
lst[2] = 'a'
print(lst)
lst.remove("a")
print(lst)
lst1.sort()
print(lst1)

del(lst[1])
print(lst)
del(lst[1:])
print(lst)

1 in lst
lst.append(2)
print(lst)

[1, 2, 3, [4, 5]]


4
[4, 5]
4
[1, 2, 'a', [4, 5]]
[1, 2, [4, 5]]
[1, 2, 3]
[1, [4, 5]]
[1]
[1, 2]

[31]: #Definição de lista l1, este identificador l1 passa a apontar no endereço da␣
,→memória para os dados[1, 2, 3, 4]

l1 = [1, 2, 3, 4]
#Definição de lista l2 = L1, estes identificadores passam a apontar no endereço␣
,→da memória para os dados[1, 2, 3, 4]

l2 = l1
print(l1)
print(l2)
# Ao alterarmos o valor do segundo elemento da lista para l2 e uma vez que l1␣
,→aponta para o mesmo endereço de l2, temos:

l2[1] = 'a'
print(l2)
print(l1)
#l1 deixa de apontar para o endereço de memória da lista e passa a apontar para␣
,→o endereço onde foi guardado o valor 10

l1=10

29
print(l1)
print(l2)

[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 'a', 3, 4]
[1, 'a', 3, 4]
10
[1, 'a', 3, 4]

3.9.7 4.7.3 Dicionários (Dictionary)


Um dicionário, em Python designado por dict, em programação, normalmente, conhecido como
lista associativa ou tabela de dispersão (hash table), é um tipo mutável constituído por um con-
junto de pares. O primeiro elemento de cada par tem o nome de chave e o segundo elemento do
par corresponde ao valor associado com a chave.
A dictionary in python it’s represented by dict, in the general of the other programming languages
is called associative list or Hash Table, it is a set of pair of values that are mutable.The first element
is the key and the second is the value associated with the key. Os elementos de um dicionário
são representados dentro de chavetas, podendo corresponder a qualquer número de elementos,
incluindo zero. O dicionário tem o nome de dicionário vazio.
Sintaxe:
<estrutura "dict"> ::= | <pares>
<pares> ::= <par> | <par>, <pares>
<par>::= < <chave>: <valor>>
<chave>::= <expressão> NOTA: em python é obrigatório que seja imutável (número, cadeia de
carateres ou tuplo)
<valor>::= <expressão>
<expressão>::= <Tuplo> | <Range()> | <dicionário> | <lista> EN:
A dict is an empty dictionary.
Syntaxe:
<structure "dict"> ::= | <pair>
<pairs> ::= <pair> | <pair>, <pairs>
<pair>::= < <key>: <value>>
<key>::= <expression> NOTE: In python is mandatory that he key is immutable (number, set of
character or tuple)
<value>::= <expression>
<expression>::= <Tuple> | <Range()> | <dictionary> | <lists>

30
[11]: dict1 = {'a':3, 'b':2, 'c':4}
dictMat = {'Mat1':{Dens:1.7, Fragi:0.02, p3:'A'}, 'Mat2':{Dens:2.2, Fragi:0.22,␣
,→p3:'C'}

dens=2.0=>Material2
dict2 = {'9':12}
dict3 = {1:'c', 'b':4} #Nota as chaves e os valores de um dicionário podem ser␣
,→de tipos diferentes.

dict4 = {chr(56+1):12}
dict5 = {(1, 2):'amarelo', (2, 1):'azul'}
dict6 = { '9':12, 1:2}

print(dict1)
print(dict2)
print(dict2['9'])
print(dict3)
print(dict3[1])
print(dict3['b'])
print(dict4)
print(dict5)
print(dict5[(1,2)])
print(dict6)

{'a': 3, 'b': 2, 'c': 4}


{'9': 12}
12
{1: 'c', 'b': 4}
c
4
{'9': 12}
{(1, 2): 'amarelo', (2, 1): 'azul'}
amarelo
{'9': 12, 1: 2}

3.9.8 Operações com dicionários


3.9.9 Some possible operations with dictionaries

Operação Sintaxe valor


len() len(<dicionário>) Devolve o tamanho do dicionário
del() del(<dicionario> ( <chave>) ) Aapaga o elemento do dicionário com a
chave correpsondente
in <chave> in<dicionario> True se chave existe no dicionário
not in <chave> not in<dicionario> True se chave não existe no dicionário
cmp() cmp(<dicionário1>, Compara os elementos de dois dicionários (0
<dicionário2>) - se forem iguais, -1 se for dict1<dict2 ou 2 se
dict1 > dict2
clear() <dicionario>.clear() Apaga todo o dicionário

31
Operação Sintaxe valor
copy() <dicionario>.copy() Cria uma cópia do dicionário
fromkeys() <dicionario>.fromkeys(<list>) Cria um dicionário de uma sequência de
chaves e valores
get() <dicionario>.get(<key>) Obtêm o valor que correponde à chave
has_key() <dicionario>.has_key(<key>) Verifica se a chave existe (Booleano)
items() <dicionario>.items() Obtêm os items, em lista, do dicionário
keys() <dicionario>.keys() Obtêm as chaves, em lista, do dicionário
values() <dicionario>.values() Obtêm os valores, em lista, do dicionário
update() <dicionario>.update(<dicionário2>) Acrecenta o dicionário2 ao dicionário

[38]: dict1 = {'a':3, 'b':2, 'c':4}


dict2 = {'9':12}
#https://docs.python.org/3/reference/

[14]: print(len(dict1))
print(len(dict2))
del(dict1[ 'c'])
print(dict1.items())
print(dict1.keys())
print(dict1.values())
print(dict2.fromkeys([1,2,3,4]))
dict2[9]=12
print(dict2)

3
2
dict_items([('a', 3), ('b', 2)])
dict_keys(['a', 'b'])
dict_values([3, 2])
{1: None, 2: None, 3: None, 4: None}
{'9': 12, 9: 12}

4 4.8 Ficheiros
https://docs.python.org/3/tutorial/inputoutput.html (7.2. Reading and Writing Files)

4.1 4.8 Files


Ficheiro é um tipo estruturado de informação constituído por uma sequência de elementos, todos
do mesmo tipo, que é utilizado para armazenar de forma persistente na memória secundária.
Para ser possível manipularmos ficheiros, é necessária uma representação ou referência ao mesmo
no ambiente python. O acesso de leitura terá de ser sempre sequencial: linha a linha até ao fim do
ficheiro ou carater a carater até ao fim da linha.
Ao ler um texto fazemo-lo linha a linha sequencialmente.

32
4.1.1 Tipos de ficheiros
• Binários
• Texto
File is a structured type of information composed by a sequence of elements of the same type of
data which is used to store permanently in the secondary memory.
To process files we need a reference in the python context.
The reading access to the file data is allways sequencial: line by line until the end of the file (EOF)or
character by character until the end of the line (EOL).
As we read a book line by line sequentilly.

4.1.2 File Type


• Binary
• Text

Ficheiro de texto Carateres de escape

scape Sequence Meaning


Ignorar linha
\ Barra ao contrário (\)
’ Apóstrofe (’)
" Aspas (")
ASCII Campaínha (BEL)
| ASCII Backspace (BS)
¯
| ASCII Mudar de página (FF)

Escape Character for file text

Tipos de acessos a ficheiros em python que são definidos na abertura do ficheiro:


• Leitura
• Escrita
– Escrita e Reescrita (apaga o conteúdo anterior)
– Adicionar após o conteúdo
• Leitura e Escrita

Sintaxe de abertura de um ficheiro: open(<file>, [<mode=‘r’>], [<buffering=-1>], [<encod-


ing=None>], [<errors=None>], [<newline=None>], [<closefd=True>], [<opener=None>])
file::= [<Caminho para a pasta>] <nomeficheiro>

The kind of access that ww’ll perform with the file is define in the open of the file:
• Read

33
• Write
– Write and Rewrite (Clear the previous content of the file)
– Add after the previous content of the file (Append)
• Read and Write

Sintaxe de abertura de um ficheiro: open(<file>, [<mode=‘r’>], [<buffering=-1>], [<encod-


ing=None>], [<errors=None>], [<newline=None>], [<closefd=True>], [<opener=None>])
file::= [<Caminho para a pasta>] <nomeficheiro>
mode

Modo Ação
‘r’ abre o ficheiro para leitura (default)
‘w’ abre o ficheiro para reescrita, apaga o conteúdo anterior
‘x’ Cria o ficheiro para escrita, falha se o ficheiro já existir
‘a’ abre o ficheiro para escrita após o conteúdo anterior
‘b’ abre o ficheiro em modo binário
‘t’ abre o ficheiro em modo texto (default)
‘+’ abre o ficheiro para leitura/escrita

buffering::= <valor>
valor::= {0,1, \>0} 0 - desativado, apenas em modo binário; 1 - Ativo buffer de uma linha para o
encoding::= <tipo de codificação> Exemplo: UTF8, entre outros
errors::= <Tipo de tratamento do erro>
Tipo de tratamento do erro::= {'strict', 'ignore', 'replace', 'surrogateescape', 'xmlcharrefrepl

Strict: Mostra o valor do erro (default)

ignore: Ignora os erros, Atenção pode existir perda de dados

replace: Uma má formação de dados é substituída por um carater, ex: "?"

surrogateescape: Substituí erros de byte code por carateres de escape UTF. (Apenas na escr

xmlcharrefreplace: Substituí erros de xml por carateres de erro xml. (Apenas na escrita de f

backslashreplace: Uma má formação de dados é substituída por uma sequência de "\"

namereplace: Carateres não reconhecidos são substituídos por "\N{..." (Apenas na escrita de
newline (apenas para ficheios do tipo texto)::=
Valoresnewline ::= {None, '', '\n', '\r', and '\r\n'}.

34
4.1.3 Ler um ficheiro de Texto caso 1
4.1.4 Read from file - Case 1
[13]: #Abrir o ficheiro para leitura e obter referência no python (f)
f = open("voostap.csv", "r")
lin=[]
#Percorrer linha a linha
while(f.readline()):
lin.append(line)
#for line in f:
# lin.append(line)
#Obter a separação pelo ;
passageiros=lin[1].split(";")
print(passageiros[0])
print(passageiros[1])
#Fechar o ficheiro
f.close()

1500
11/12/2020

4.1.5 Ler um ficheiro de Texto caso 2


4.1.6 Read from file - Case 2
[11]: #Abrir o ficheiro para leitura e obter referência no python (f)
f = open("voostap.csv", "r")
lin=[]
#Guardar todas as linhas, linha a linha, numa lista
lin=f.readlines()
#Obter a separação pelo ;
for l in lin:
passageiros=l.split(";")
print(passageiros[0])
print(passageiros[1])
#Fechar o ficheiro, principalmente para abrir de outro modo (no jupyter é␣
,→indiferente!!!)

f.close()

#voostap
Data

1500
03/12/2020

1000
04/12/2020

35
1500
05/12/2020

3000
06/12/2020

1500
07/12/2020

1500
08/12/2020

4500
09/12/2020

200
10/12/2020

1500
11/12/2020

4.1.7 Ler um ficheiro de Texto caso 3


[15]: #Abrir o ficheiro para leitura e obter referência no python (f)
f = open("voostap.csv", "r")
lin=[]
#Percorrer linha a linha
for line in f:
#Se tivere o caracter X ignorar linha
lin.append(line)
#Obter a separação pelo ;
passageiros=lin[1].split(";")
print(passageiros[0])
print(passageiros[1])
#Fechar o ficheiro
f.close() #f.readline()

1500
03/12/2020

36
4.1.8 Ler ficheiros de texto separados por vírgula (csv)
4.1.9 Read text file type (.csv)

[17]: import csv

with open('voostap.csv') as csv_file:


csv_reader = csv.reader(csv_file, delimiter=';')
line_count = 0
med=0
iniciodados=0
totpass=0
for row in csv_reader:
if line_count == iniciodados:
print(f'Nome das Colunas {" - ".join(row)}')
elif line_count > iniciodados:
print(f'\t No dia {row[1]} viajaram na TAP {row[0]} passageiros.')
totpass+=int(row[0])
line_count += 1
med=totpass/line_count
print(f'Total de passsageiros {totpass}.')
print(f'Média de passsageiros diária {round(med,0)}')
print(f'Processed {line_count} lines.')

Nome das Colunas voostap - Data


No dia 03/12/2020 viajaram na TAP 1500 passageiros.
No dia 04/12/2020 viajaram na TAP 1000 passageiros.
No dia 05/12/2020 viajaram na TAP 1500 passageiros.
No dia 06/12/2020 viajaram na TAP 3000 passageiros.
No dia 07/12/2020 viajaram na TAP 1500 passageiros.
No dia 08/12/2020 viajaram na TAP 1500 passageiros.
No dia 09/12/2020 viajaram na TAP 4500 passageiros.
No dia 10/12/2020 viajaram na TAP 200 passageiros.
No dia 11/12/2020 viajaram na TAP 1500 passageiros.
Total de passsageiros 16200.
Média de passsageiros diária 1620.0
Processed 10 lines.

4.1.10 Escrever num ficheiro de Texto


4.1.11 Write to a file
[19]: import random as r
import datetime as dt
#Abrir o ficheiro para leitura e obter referência no python (f)
f = open("gerarvoostap.txt", "w")

lin=[]

37
for el in range(1,100):
lin.append( r.randrange(90, 180))
#print (lin)
#Percorrer linha a linha
for line in lin:
strtowrite=str(line) + ", " + str(dt.datetime.now().date()) + "\n"
#print(strtowrite)
f.write(strtowrite)
#Fechar o ficheiro, principalmente para abrir de outro modo
f.close()

[25]: f1 = open("gerarvoostap.txt", "r")


lin=[]
#Guardar todas as linhas, linha a linha, numa lista
lin= f1.readlines()
for line in lin:
passageiros=line.split(",")
print(passageiros[0] + " - " + passageiros[1]+ "\n")
f1.close()

173 - 2020-12-03

160 - 2020-12-03

133 - 2020-12-03

173 - 2020-12-03

174 - 2020-12-03

130 - 2020-12-03

174 - 2020-12-03

111 - 2020-12-03

135 - 2020-12-03

38
152 - 2020-12-03

116 - 2020-12-03

175 - 2020-12-03

170 - 2020-12-03

175 - 2020-12-03

112 - 2020-12-03

157 - 2020-12-03

123 - 2020-12-03

113 - 2020-12-03

176 - 2020-12-03

164 - 2020-12-03

116 - 2020-12-03

177 - 2020-12-03

161 - 2020-12-03

142 - 2020-12-03

96 - 2020-12-03

39
145 - 2020-12-03

157 - 2020-12-03

98 - 2020-12-03

172 - 2020-12-03

101 - 2020-12-03

135 - 2020-12-03

132 - 2020-12-03

176 - 2020-12-03

129 - 2020-12-03

99 - 2020-12-03

169 - 2020-12-03

158 - 2020-12-03

108 - 2020-12-03

148 - 2020-12-03

99 - 2020-12-03

113 - 2020-12-03

40
158 - 2020-12-03

119 - 2020-12-03

135 - 2020-12-03

129 - 2020-12-03

98 - 2020-12-03

102 - 2020-12-03

101 - 2020-12-03

166 - 2020-12-03

162 - 2020-12-03

128 - 2020-12-03

111 - 2020-12-03

115 - 2020-12-03

98 - 2020-12-03

114 - 2020-12-03

94 - 2020-12-03

129 - 2020-12-03

41
114 - 2020-12-03

96 - 2020-12-03

156 - 2020-12-03

99 - 2020-12-03

94 - 2020-12-03

96 - 2020-12-03

154 - 2020-12-03

145 - 2020-12-03

163 - 2020-12-03

105 - 2020-12-03

91 - 2020-12-03

106 - 2020-12-03

113 - 2020-12-03

109 - 2020-12-03

153 - 2020-12-03

160 - 2020-12-03

42
109 - 2020-12-03

138 - 2020-12-03

96 - 2020-12-03

168 - 2020-12-03

130 - 2020-12-03

162 - 2020-12-03

98 - 2020-12-03

134 - 2020-12-03

139 - 2020-12-03

128 - 2020-12-03

134 - 2020-12-03

136 - 2020-12-03

177 - 2020-12-03

123 - 2020-12-03

112 - 2020-12-03

119 - 2020-12-03

43
134 - 2020-12-03

141 - 2020-12-03

127 - 2020-12-03

131 - 2020-12-03

124 - 2020-12-03

134 - 2020-12-03

126 - 2020-12-03

116 - 2020-12-03

130 - 2020-12-03

140 - 2020-12-03

5 EXERCÍCIOS

6 EXERCISES

6.0.1 Exercícios de aplicação “Expressões”

1. Escreva um programa em Python que pede ao utilizador que lhe forneça um inteiro correspon-
dente a um número de segundos e que calcula o número de dias correspondentes a esse número de
segundos. O número de dias é fornecido como um real. O programa termina quando o utilizador
fornece um número negativo. O seu programa deve possibilitar a seguinte interacção:
Escreva um número de segundos (um número negativo para terminar) ? 45 O número de dias

44
correspondente é 0.0005208333333333333 Escreva um número de segundos (um número negativo
para terminar) ? 6654441 O número de dias correspondente é 77.01899305555555 Escreva um
número de segundos (um número negativo para terminar) ? -1 »>
Escreva e execute o código em python na célula seguinte:2. Escreva um programa em Python que
lé 100 números e que diz qual o maior, o menor e a média dos números lidos.
Escreva e execute o código em python na célula seguinte:3. A conversão de temperatura em graus
Farenheit (F) para graus centígrados (C) e o contrário caso o utilizador opte por converter C em F.
Para tal, deve mostrar no ecrã as opções 1. F->C e 2 C->F, sendo que a conversão de C->F é dada
através da expressão:
C = 5 / 9 * (F-32).
Escreva e execute o código em python na célula seguinte:4. Escreva um programa em Python que
lê uma sequência de dígitos, sendo cada um do dígitos fornecido numa linha separada, e calcula
o número inteiro composto por esses dígitos, pela ordem fornecida. Para terminar a sequência de
dígitos é fornecido ao programa o inteiro 1.
Por exemplo, lendo os dígitos 1 5 4 5 8 -1, o programa calcula o número inteiro 15458.
Escreva e execute o código em python na célula seguinte:5. Escreva um programa em Python que
lê um número inteiro positivo e calcula a soma dos seus dígitos pares. Por exemplo, Escreva um
inteiro positivo ? 234567 Soma dos dígitos pares: 12
Escreva e execute o código em python na célula seguinte:6. Escreva um programa em Python que
lê um número inteiro positivo na base binária e produz o número correspondente em decimal.
Por exemplo,
Escreva um inteiro positivo na base dez ? 1111 O número em Decimal é 15 (10)
Escreva e execute o código em python na célula seguinte:

7 Exercícios de aplicação “Funções”


7. Escreva um programa em python com uma função com o nome cinco que tem o valor True se
o seu argumento for 5 e False no caso contrário. Se não pudesse utilizar uma instrucão if, como
resolveria (apresente em comentário pyhton).
Escreva e execute o código em python na célula seguinte:8. Escreva um programa em python
com uma função com o nome bissexto que determina se um ano é bissexto. Um ano é bissexto se
for divisível por 4 e não for divisível por 100, a não ser que seja também divisível por 400. Por
exemplo, 1984 é bissexto, 1100 não é, e 2000 é bissexto.
Escreva e execute o código em python na célula seguinte:9. Um número primo é um número
inteiro maior do que 1 que apenas é divisível por 1 e por si próprio. Por exemplo, 5 é primo
porque apenas é divisível por si próprio e por um, ao passo que 6 não é primo pois é divisível
por 1, 2, 3, e 6. Os números primos têm um papel muito importante tanto em Matemática como
em Ciências da computação. Um método simples, mas pouco eficiente, para determinar se um
número, n, é primo consiste em testar se n é múltiplo de algum número entre 2 e sqrt(n). Usando
este processo, escreva um programa em python com uma função chamada primo que recebe um
número inteiro e tem o valor True apenas se o seu argumento for primo.

45
Escreva e execute o código em python na célula seguinte:10. Um número inteiro, n, diz-se triangu-
lar se existir um inteiro m tal que n = 1 + 2 + ... +(m1) + m. Escreva uma função chamada triangular
que recebe um número inteiro positivo n, e cujo valor é True apenas se o número for triangular. No
caso de n ser 0 deverá devolver False. Por exemplo, »> triangular(6) True »> triangular(8) False.
Escreva e execute o código em python na célula seguinte:

7.0.1 Exercícios de aplicação “Funções recursivas”


11. Escreva um programa em python com uma função que calcula o valor aproximado da série
para um determinado valor de x, em que é dado o número de termos n:

xn
∑ n! = ex
0

Escreva e execute o código em python na célula seguinte:12. Escreva um programa em Python


que calcula o valor da série:
x2 x3 xn
1+x+ + + ... +
2! 3! n!
para um dado valor de x e de n. O seu programa deve ter em atenção que cada termo da série
pode ser obtido a partir do anterior, multiplicando-o x por n.
Escreva e execute o código em python na célula seguinte:13. Escreva uma função recursiva em
Python que recebe um número inteiro positivo e devolve a soma dos seus dígitos pares. Por
exemplo, »> somad igitos p ares(234567)12
Escreva e execute o código em python na célula seguinte:

7.0.2 Exercícios de aplicação “Tuplos”


14. Escreva uma função recursiva em Python que recebe um número inteiro positivo e
devolve o inteiro correspondente a inverter a ordem dos seus dígitos. Por exemplo, »>
inverted igitos(7633256)6523367
Escreva e execute o código em python na célula seguinte:15. Escreva em Python a função duplica
que recebe um tuplo e tem como valor um tuplo idêntico ao original, mas em que cada elemento
está repetido. Por exemplo, »> duplica((1, 2, 3)) (1, 1, 2, 2, 3, 3)
Escreva e execute o código em python na célula seguinte:16. Escreva uma função em Python com
o nome conta menores que recebe um tuplo contendo números inteiros e um número inteiro e que
devolve a contagem de elementos do tuplo que são menores do que esse inteiro. Por exemplo,
»> contam enores((3, 4, 5, 6, 7), 5)2 >>> contam enores((3, 4, 5, 6, 7), 2)0
Escreva e execute o código em python na célula seguinte:17. Escreva uma função em Python
chamada maior elemento que recebe um tuplo contendo números inteiros, e devolve o maior
elemento do tuplo.
Por exemplo, »> maiore lemento ((2, 4, 23, 76, 3))76
Escreva e execute o código em python na célula seguinte:18. Escreva uma função em Python
chamada juntos que recebe um tuplo contendo inteiros e tem como valor o número de elementos
iguais adjacentes.

46
Por exemplo, »> juntos((1, 2, 2, 3, 4, 4)) 2 »> juntos((1, 2, 2, 3, 4)) 1
Escreva e execute o código em python na célula seguinte:19. Escreva uma função em Python
chamada juntao rdenados, querecebedoistuploscontendointeiros, ordenadosporordemcrescente, edevolveumtuplotambm
»> juntao rdenados((2, 34, 200, 210), (1, 23))(1, 2, 23, 34, 200, 210)
Escreva e execute o código em python na célula seguinte:

7.0.3 Exercícios de aplicação “Listas”


20. Escreva uma função chamada substitui que recebe uma lista, lst, dois valores, velho e novo, e
devolve a lista que resulta de substituir em lst todas as ocorrências de velho por novo.
Por exemplo, »> substitui([1, 2, 3, 2, 4], 2, ’a’) [1, ’a’, 3, ’a’, 4]
Escreva e execute o código em python na célula seguinte:21. Escreva uma função chamada posi-
coes lista que recebe uma lista e um elemento, e devolve uma lista contendo todas as posições em
que o elemento ocorre na lista.
Por exemplo, »> posicoesl ista([0 a0 , 2,0 b0 ,0 a0 ],0 a0 )[0, 3]
Escreva e execute o código em python na célula seguinte:22. Escreva uma função chamada parte
que recebe como argumentos uma lista, lst, e um elemento, e, e que devolve uma lista de dois
elementos, contendo na primeira posição a lista com os elementos de lst menores que e, e na
segunda posição a lista com os elementos de lst maiores ou iguais a e.
Por exemplo,
»> parte([2, 0, 12, 19, 5], 6) [[2, 0, 5], [12, 19]] »> parte([7, 3, 4, 12], 3) [[], [7, 3, 4, 12]] Escreva e
execute o código em python na célula seguinte:23. Escreva um programa em Python que leia uma
lista contendo letras(caracteres) e mude a ordem dos seus elementos de modo que estes apareçam
por ordem inversa.
»> invertelista([’a’, ’z’, ’a’, ’t’, ’u’]) [’u’,’t’,’a’,’z’,’a’] Escreva e execute o código em python na célula
seguinte:

7.0.4 Exercícios de aplicação “Dicionários”


24. Escreva uma função chamada ocorrências que recebe uma lista de strings, lstStr, e devolve um
dicionário com o caracter e o número de ocorrências superiorers a 1 ocorrência.
Por exemplo, »> ocorrencias(["Casa", "Casinha", "Casota"]) ’C’: 3, ’a’: 6, ’s’: 3
Escreva e execute o código em python na célula seguinte:25. Escreva uma função chamada invert-
Dict que recebe um dicionário, dict, e devolve um dicionário em que os valores são as chaves e as
chaves são os valores do cidcionário dict.
Por exemplo, dict = "chave1" : "valor1", "chave2" : "valor2", "chave3" : "valor3" »> invertDict(dict)
"valor1" : "chave1", "valor2" : "chave2", "valor3" : "chave3"
Escreva e execute o código em python na célula seguinte:26. Escreva uma função chamada
encontrav alorquerecebeumdicionrio, dict, eumvalor, val, edevolveumalistacomchavesdicionriodictondeovalexista.
Por exemplo, dict = "chave1" : "valor1", "chave2" : "valor2", "chave3" : "valor1" »>
encontrav alor (dict, ”valor1”)[”chave1”, ”chave3”]

47
Escreva e execute o código em python na célula seguinte:27. Escreva uma função chamada veri-
ficaTiro que recebe um dicionário, tabuleiro que contêm as posições dos barcos de guerra, e um
tuplo correspondente a coordenadas (colunas de A a J e linhas de 1 a 10), tiroparaacertar, e de-
volve uma das seguintes respostas em formato de tuplo ("Água", "Porta Aviões":5, "Cruzador":4,
"Contratorpedeiro":3, "Rebocador":2) em que o número corresponde à capacidade de suporte de
tiros que ainda tem a embarcação.
Assumindo que: Porta aviões (5 espaços) está na horizontal inicia em B3 Cruzador (4 espaços) está
na vertical inicia em F2 Contratorpedeiro (3 espaços) está na vertical e inicia em B5 Rebocador (2
espaços) está na horizontal e inicia em I7
Por exemplo, tabuleiro1 = "Porta aviões" : "B3", "Cruzador" : F2, "Contratorpedeiro": "B5", "Rebo-
cador" : "I7" »> verificaTiro(tabuleiro1, (A,2)) ("Água", )
Escreva e execute o código em python na célula seguinte:

48

Você também pode gostar