Baixe o app para aproveitar ainda mais
Prévia do material em texto
Instituto Federal Minas Gerais - Campus Bambuí Departamento de Engenharia e Computação - DEC Curso de Engenharia de Computação - ENGCOMP Cálculo Numérico 00 – Introdução a Python Marcos Roberto Ribeiro 2021 IFMG - Campus Bambuí - DEC - ENGCOMP 1/69 Introdução A linguagem Python foi criada na década de 1990 Atualmente, é uma das linguagens mais utilizadas no mundo Uma das grandes vantagens da linguagem é sua extensa variedade de bibliotecas disponíveis IFMG - Campus Bambuí - DEC - ENGCOMP 2/69 Tipos básicos de dados Python Descrição int valores numéricos inteiros float valores numéricos fracionários bool valores lógicos (verdadeiro ou falso) str Valores textuais (ou string) IFMG - Campus Bambuí - DEC - ENGCOMP 3/69 Variáveis e literais Variáveis: representa uma posição de memória no computador cujo conteúdo pode ser lido e alterado durante a execução do código Literais : dados informados literalmente no código IFMG - Campus Bambuí - DEC - ENGCOMP 4/69 Atribuições A atribuição de valores a variáveis é feita com o operador de igualdade (=) Além de valores literais, podemos atribuir o valor de outras variáveis, resultados de expressões e valores retornados por funções O tipo da variável é o tipo do valor atribuído a ela Exemplo 1 n1 = 10 2 n2 = 2.5 3 nome = 'José' 4 teste = True IFMG - Campus Bambuí - DEC - ENGCOMP 5/69 Códigos legíveis Um dos principais cuidados na escrita de códigos é a legibilidade Um código escrito por você deve ser facilmente entendido por outra pessoa que vá estudá-lo ou usá-lo Alguns fatores que influenciam diretamente o entendimento de códigos são: Nomes sugestivos: usar nomes sugestivos para variáveis e outras estruturas Endentação: alinhamento correto de blocos de código Comentários: textos não executáveis com a finalidade de explicar o código IFMG - Campus Bambuí - DEC - ENGCOMP 6/69 Comentários Os comentário começam com # O texto após o # é desconsiderado Exemplo 1 n1 = 10 # Número inteiro 2 n2 = 2.5 # Número fracionário 3 nome = 'José' # Textual (sempre entre aspas) 4 teste = True # Variável lógica IFMG - Campus Bambuí - DEC - ENGCOMP 7/69 Entrada e saída de dados Em muitas situações práticas, precisamos receber dados do usuário e também mostrar mensagens Quando o código recebe dados do usuário, dizemos que ocorre uma entrada de dados De forma análoga, quando o código exibe mensagens para o usuário, acontece uma saída de dados IFMG - Campus Bambuí - DEC - ENGCOMP 8/69 Entrada de dados A entrada de dados é feita com a função input() A função pode receber um texto como parâmetro que pode ser informado para o usuário antes da entrada dos dados Normalmente, usamos uma variável para receber a resposta digitada Essa função sempre retorna o valor textual digitado pelo usuário, se precisarmos de outro tipo de dado, temos que fazer uma conversão1 1Podem ocorrer erros nessa conversão, mas trataremos disso mais tarde IFMG - Campus Bambuí - DEC - ENGCOMP 9/69 Saída de dados No caso da saída de dados, temos a função print() Essa função recebe como parâmetro as informações a serem mostradas para o usuário Se usarmos uma variável como parâmetro, será mostrado o valor dessa variável IFMG - Campus Bambuí - DEC - ENGCOMP 10/69 Exemplo de entrada e saída de dados 1 print('Bem vindo!') 2 nome = input('Informe seu nome: ') # Nome do usuário 3 idade = int(input('Informe sua idade: ')) # Idade convertida para inteiro 4 print() # Escreve uma linha em branco 5 # Escreve mensagem usando as variáveis 6 print('Olá,', nome, 'sua idade é', idade) 7 print('Até mais!') IFMG - Campus Bambuí - DEC - ENGCOMP 11/69 Operadores aritméticos + adição - subtração * multiplicação / divisão fracionária ** potenciação // divisão inteira % resto de divisão A ordem precedência dos operadores aritméticos é a mesma ordem precedência da matemática Também podem ser usados parênteses para alterar a ordem de precedência IFMG - Campus Bambuí - DEC - ENGCOMP 12/69 Exemplo com expressões matemáticas 1 ni = 10 // 3 2 print('10 // 3 =', ni) 3 ni = 10 % 3 4 print('10 % 3 =', ni) 5 nr = 2.34 * 3.58 6 print('2.34 * 3.58 =', nr) 7 nr = 2.99 / 4.1 8 print('2.99 / 4.1 =', nr) 9 nr = (10.5 - 7.8) * (3.2 + 200.43) 10 print('(10.5 - 7.8) * (3.2 + 200.43) =', nr) IFMG - Campus Bambuí - DEC - ENGCOMP 13/69 Exemplo de calculadora simples 1 print('Informe dois números') 2 n1 = float(input('Primeiro número: ')) 3 n2 = float(input('Segundo número: ')) 4 r = n1 + n2 5 print(n1, '+', n2, '=', r) 6 r = n1 - n2 7 print(n1, '-', n2, '=', r) 8 r = n1 * n2 9 print(n1, '*', n2, '=', r) 10 r = n1 / n2 11 print(n1, '/', n2, '=', r) IFMG - Campus Bambuí - DEC - ENGCOMP 14/69 Exercícios (entrada e saída) 1 No exemplos anteriores, mais especificamente nas instruções input(), qual a diferença entre escrever a expressão matemática com aspas e sem aspas? 2 Reescreva o código da calculadora sem usar a variável r IFMG - Campus Bambuí - DEC - ENGCOMP 15/69 Concatenação de texto Variáveis e literais de textuais podem ser concatenados através do operador + Dados não textuais devem ser convertidos para texto antes de serem concatenados Exemplo 1 print('Informe os dados') 2 nome = input('Nome: ') 3 sobrenome = input('Sobrenome: ') 4 idade = int(input('Idade: ')) 5 mensagem = nome + ' ' + sobrenome + ', ' + str(idade) 6 print(mensagem) IFMG - Campus Bambuí - DEC - ENGCOMP 16/69 Operadores relacionais Os operadores relacionais são utilizados para comparar dois valores == Igual != Diferente > Maior >= Maior ou igual < Menor <= Menor ou igual Exemplo considerando a = 10 e b = 5 a == b Falso a != b Verdadeiro a > b Verdadeiro a >= b Verdadeiro a < b Falso a <= b Falso IFMG - Campus Bambuí - DEC - ENGCOMP 17/69 Operadores lógicos Os operadores lógicos são equivalentes aos operadores da lógica proposicional Em muitas situações, esses operadores são usados para combinar as comparações relacionais Operador Descrição not Negação (tem a maior precedência entre os operadores lógicos) or ou lógico (verdadeiro quando um dos seus operandos lógicos for verdadeiro) and e lógico (verdadeiro somente se seus dois operandos lógicos forem verdadeiros) IFMG - Campus Bambuí - DEC - ENGCOMP 18/69 Exercício (operadores lógicos) 1 n1 = 5 2 n2 = n1 * 2 - 6 3 p = (n1 > n2) 4 q = (n1 != n2) 5 r = not (n2 <= n1) 6 g = not (p or q) and (not p or not r) Qual o valor de cada variável ao final da execução do código? IFMG - Campus Bambuí - DEC - ENGCOMP 19/69 Exercício (operadores lógicos) 1 n1 = 5 2 n2 = n1 * 2 - 6 3 p = (n1 > n2) 4 q = (n1 != n2) 5 r = not (n2 <= n1) 6 g = not (p or q) and (not p or not r) Qual o valor de cada variável ao final da execução do código? g: Falso (False) n1: 5 n2: 4 p: Verdadeiro (True) q: Verdadeiro (True) r: Falso (False) IFMG - Campus Bambuí - DEC - ENGCOMP 19/69 Desvio condicional Para resolver diversos tipos de problemas, muitas vezes, precisamos de desvios condicionais (também chamados de estruturas de decisão ou estruturas condicionais) Os desvios condicionais são testes feitos para decidir se uma determinada ação deve ou não deve ser realizada. IFMG - Campus Bambuí - DEC - ENGCOMP 20/69 Desvio condicional simples O desvio condicional mais simples é feito com a instrução if Fluxograma N ≥ 60 escreva(’Aprovado’) sim não Código 1 if N >= 60: 2 print('Aprovado') Basicamente, podemos dizer que se a condição N ≥ 60 for verdadeira, a instrução print(’Aprovado’) é executada A condição do se (if) pode ser qualquer expressão lógica que retorne um valor Verdadeiro (True) ou Falso (False) IFMG - Campus Bambuí - DEC - ENGCOMP 21/69 A importância da endentação A endentação deve ser feita corretamente para especificar quais instruções estão dentro da estrutura condicional Utilizamos quatro espaços para endentar um bloco de instruções Endentação em Python 1 N␣=␣int(input('Informe␣sua␣nota:␣')) 2 if␣N␣>=␣60: 3 ␣␣␣␣print('Aprovado') 4 ␣␣␣␣print('Parabéns') 5 print('Boas␣férias') Nos exemplos acima as mensagens’Aprovado’ e ’Parabéns’ são mostradas apenas se a condição N >= 60 for verdadeira Por outro lado, a mensagem ’Boas férias’ é mostrada incondicionalmente IFMG - Campus Bambuí - DEC - ENGCOMP 22/69 Desvio condicional composto No código anterior, consideramos apenas a possibilidade da nota maior ou igual a 60 Porém, seria interessante informar a mensagem de reprovado para notas menores que 60 N ≥ 60 escreva(’Aprovado’) escreva(’Reprovado’) sim não Para tratar a situação da condição não ser atendida, usamos as instrução else IFMG - Campus Bambuí - DEC - ENGCOMP 23/69 Exemplo de desvio condicional composto 1 N = int(input('Informe sua nota: ')) 2 if N >= 60: 3 print('Aprovado') 4 print('Parabéns') 5 else: 6 print('Reprovado') 7 print('Boas férias') Agora, as mensagens ’Aprovado’ e ’Parabéns’ são mostradas se a condição N >= 60 for verdadeira Caso contrário, a mensagem ’Reprovado’ é mostrada Já a mensagem ’Boas Férias’, continua aparecendo incondicionalmente IFMG - Campus Bambuí - DEC - ENGCOMP 24/69 Desvios condicionais aninhados Em muitas situações, precisamos colocar desvios condicionais aninhados (dentro) de outros desvios condicionais Como exemplo, considere o caso da nota inferior a 60 Nesse cenário, se a nota for menor que 40, o aluno está reprovado Entretanto, se a nota for maior ou igual a 40, o aluno está de reavaliação N ≥ 60 escreva(’Aprovado’) N ≥ 40 escreva(’Reavaliação’)escreva(’Reprovado’) nãosim simnão IFMG - Campus Bambuí - DEC - ENGCOMP 25/69 Exemplo de desvios condicionais aninhados 1 N = int(input('Informe sua nota: ')) 2 if N >= 60: 3 print('Aprovado') 4 print('Parabéns') 5 else: 6 if N >= 40: 7 print('Reavaliação') 8 else: 9 print('Reprovado') 10 print('Boas férias') IFMG - Campus Bambuí - DEC - ENGCOMP 26/69 Desvios condicionais aninhados com múltiplos testes Quando precisamos fazer diversos testes sobre uma mesma variável, o aninhamento de desvios condicionais pode ficar menos legível Nesses casos, podemos utilizar a instrução elif para tratar os múltiplos casos Como exemplo, vamos escrever um código para simular uma calculadora IFMG - Campus Bambuí - DEC - ENGCOMP 27/69 Exemplo com desvios condicionais aninhados com múltiplos testes 1 print('Informe os dados') 2 n1 = float(input('Número 1: ')) 3 n2 = float(input('Número 2: ')) 4 op = input('Operação (+, -, *, /): ') 5 if (op == '+'): 6 r = n1 + n2 7 elif (op == '-'): 8 r = n1 - n2 9 elif (op == '*'): 10 r = n1 * n2 11 else: 12 r = n1 / n2 13 print(n1, op, n2, '=', r) IFMG - Campus Bambuí - DEC - ENGCOMP 28/69 Estruturas de repetição Repetição while Indicado para situações nas quais não se sabe o número de repetições a serem executadas As repetições ocorrem enquanto uma determinada condição for verdadeira É importante garantir que a condição de parada realmente aconteça e o código não entre em um laço infinito Repetição for Indicado quando se sabe o número de repetições a serem feitas Utiliza uma variável contadora que é incrementada automaticamente IFMG - Campus Bambuí - DEC - ENGCOMP 29/69 Exemplo com repetição while 1 n = int(input('Informe um número: ')) 2 print(0) 3 x = 2 4 while x <= n: 5 print(x) 6 x = x + 2 IFMG - Campus Bambuí - DEC - ENGCOMP 30/69 Exemplo com repetição for início S ← 0 C ∈ {1, ..., 10} leia N S ← S + N escreva S fim Código 1 s = 0 2 for c in range(10): 3 n = float(input('Informe um número: ')) 4 s = s + n 5 print(s) IFMG - Campus Bambuí - DEC - ENGCOMP 31/69 Intervalo de números da repetição for No exemplo anterior utilizamos a função range para gerar o intervalo de números da repetição Essa função recebem um número inteiro N e gera o intervalo de números de 0 a N − 1 Além do parâmetro N, podemos incluir outros parâmetros para definir o início e a periodicidade dos números do intervalo IFMG - Campus Bambuí - DEC - ENGCOMP 32/69 A instrução break início S ← 0 (Verdadeiro) leia N N = 0 S ← S + N escreva Sfim sim não A instrução break permite interromper o laço de repetição a qualquer momento Exemplo 1 s = 0 2 while True: 3 n = float(input('Informe um número: ')) 4 if n == 0: 5 break 6 s = s + n 7 print('Soma dos números:', s) IFMG - Campus Bambuí - DEC - ENGCOMP 33/69 A instrução continue início S ← 0 C ∈ {1, ..., 10} leia N N % 5 = 0 S ← S + N escreva S fim não sim A instrução continue “pula” para a próxima iteração da repetição, ignorando as demais instruções da iteração atual Exemplo 1 s = 0 2 for c in range(10): 3 n = float(input('Informe um número: ')) 4 if n % 5 == 0: 5 continue 6 s = s + n 7 print('Soma dos números:', s) IFMG - Campus Bambuí - DEC - ENGCOMP 34/69 A ferramenta Spyder O Spyder é uma ferramente livre e multiplataforma para desenvolvimento Python Página oficial: http://www.spyder-ide.org Seus principais recursos são: Editor: editor de código integrado com explorador de código e auto-complemento Console IPython: console que permite a execução de comandos individuais Explorador de variáveis: permite visualizar e modificar as variáveis em tempo de execução Depurador: permite executar códigos passo-a-passo Ajuda: fornece documentação de comandos da linguagem IFMG - Campus Bambuí - DEC - ENGCOMP 35/69 http://www.spyder-ide.org Tela do Spyder IFMG - Campus Bambuí - DEC - ENGCOMP 36/69 Bibliotecas, pacotes, módulos e funções Funções são partes de códigos prontas para serem usadas As funções podem ter parâmetros de entrada e retornar algum resultado Em nossos códigos já usamos as funções input() e print() As funções podem ser agrupadas em arquivos chamados de módulos Os pacotes, por sua vez, são coleções de um ou mais módulos Por fim, uma biblioteca pode ser considerada uma coleção de pacotes, módulos e funções A linguagem Python possui uma biblioteca padrão de funções (como input() e print()) prontas para serem usadas Além disso, podemos importar bibliotecas com diversos tipos de funções específicas IFMG - Campus Bambuí - DEC - ENGCOMP 37/69 Principais funções da biblioteca padrão Python abs(x): retorna o valor absoluto de x chr(i): retorna o caractere representado Unicode pelo número i input(prompt): exibe a mensagem prompt e retorna o conteúdo digitado pelo usuário ord(c): retorna o código Unicode correspondente ao caractere c print(x1, ..., xn, sep=’ ’, end=’\n’): escreve os parâmetros x1, ..., xn na tela separados por sep e com end no final range(start=0, stop, step=1): gera uma sequência de valores de start até (stop− 1) com incremento de step round(number, ndigits): Arredonda number considerando ndigits casas decimais type(object): retorna o tipo de object IFMG - Campus Bambuí - DEC - ENGCOMP 38/69 Exemplos com funções 1 n = -123.456 2 na = abs(n) 3 nr = round(n, 2) 4 c = chr(68) 5 m = input('Informe um caractere: ') 6 cm = m[0] # Pega primeiro caractere de m 7 u = ord(cm) 8 9 for i in range(2, 15, 3): 10 print('i =', i) 11 12 print('n =', n, ', na =', na, ', nr =', nr) 13 print('c =', c) 14 print('m =', m , 'cm =', cm, ', u =', u) 15 print('n = ', n , ', type: ', type(n)) 16 print('na = ', na , ', type: ', type(na)) 17 print('nr = ', nr , ', type: ', type(nr)) 18 print('c = ', c , ', type: ', type(c)) 19 print('m = ', m , ', type: ', type(m)) 20 print('cm = ', cm , ', type: ', type(cm)) 21 print('u = ', u , ', type: ', type(u)) 22 print('i = ', i , ', type: ', type(i)) IFMG - Campus Bambuí - DEC - ENGCOMP 39/69 Principais funções para tipos textuais Na linguagem Python, o tipo de dado textual (str) possui diversas funções prontas para usar Por serem funções associadas ao tipo str, é preciso usá-las junto com o dado desse tipo Por exemplo, se tempos uma variável x do tipo str, podemos chamar uma função y com o código x.y() Alguns exemplos de funções são: find(sub, start, end): retorna o início de sub na string, começando a busca em start e terminando em end. Retorna −1, se sub não for encontrada format(x1, ..., xn): Retorna uma nova string com x1, ..., xn incorporados e formatados lower(): Retorna a string com todas asletras minúsculas replace(old, new, count): Retorna a string substituindo old por new count vezes upper(): Retorna a string com todas as letras maiúsculas IFMG - Campus Bambuí - DEC - ENGCOMP 40/69 Exemplo com funções textuais 1 nome_completo = input('Informe seu nome completo: ') 2 sobrenome = input('Informe seu sobrenome: ') 3 4 pos = nome_completo.find(sobrenome) 5 6 if pos != -1: 7 print('Seu sobrenome começa na posição ', pos) 8 else: 9 print('Sobrenome não encontrado') 10 11 n = float(input('Informe um número: ')) 12 13 print('{n:.8f}'.format(n=n)) IFMG - Campus Bambuí - DEC - ENGCOMP 41/69 Outras bibliotecas Além da biblioteca padrão, a linguagem Python possui diversas bibliotecas que podem ser usadas Para usar as demais bibliotecas, precisamos importá-las através da instrução import Um exemplo interessante é a biblioteca math que possui funções matemáticas, algumas delas são: ceil(x): Retorna o teto de x floor(x): Retorna o piso de x trunc(x): Retorna a parte inteira de x exp(x): Retorna ex log(x , base): Retorna o logaritmo de x em uma base. Se a base não for especificada, retorna o logaritmo natural de x sqrt(x): Retorna a raiz quadrada de x pi: Retorna o valor de π IFMG - Campus Bambuí - DEC - ENGCOMP 42/69 Exemplo com funções matematicas 1 import math 2 3 n = float(input('Informe um número: ')) 4 x = n * math.pi 5 print('x = n * pi = ', n) 6 print('Teto de x =', math.ceil(x)) 7 print('Piso de x =', math.floor(x)) 8 print('Log de x na base 10 =', math.log(x, 10)) 9 print('Raiz de x =', math.sqrt(x)) IFMG - Campus Bambuí - DEC - ENGCOMP 43/69 Tratamento de exceções Mesmo se um código estiver correto, podem ocorrer erros durante a execução Um exemplo comum de erro ocorre quando o usuário digita um número inválido Esses erros são chamados de exceções Podemos, tratar essas exceções para evitar que a execução seja interrompida Em Python, podemos utilizar a instrução try para lidar com as exceções IFMG - Campus Bambuí - DEC - ENGCOMP 44/69 Exemplo de tratamento de exceções 1 while True: 2 try: 3 quant = int(input('Informe a quantidade de números: ')) 4 break 5 except: 6 print('Número inválido! Tente novamente.') 7 8 soma = 0 9 for cont in range(quant): 10 while True: 11 try: 12 n = float(input('Informe um número: ')) 13 soma = soma + n 14 break 15 except: 16 print('Número inválido! Tente novamente.') 17 18 print('A média é', soma/quant) IFMG - Campus Bambuí - DEC - ENGCOMP 45/69 Listas Os tipos de dados básicos permitem armazenar um único valor de um tipo de dado Entretanto, em muitas situações, precisamos de listas para agrupar diversos dados A grande vantagem das listas é a facilidade de acesso por meio de posições indexadas Dessa maneira, cada posição da lista pode armazenar um valor diferente Por exemplo, na lista de inteiros representada abaixo, a posição 1 possui o valor 35, já a posição 5 possui o valor 52. Posição: 0 1 2 3 4 5 Valor: 40 35 61 89 10 52 IFMG - Campus Bambuí - DEC - ENGCOMP 46/69 O problema dos preços acima da média Considere o seguinte código para calcular o preço médio de uma lista de produtos: 1 soma = 0 2 print('Informe o preço dos produtos') 3 for cont in range(10): 4 mensagem = 'Produto ' + str(cont+1) + ': ' 5 preco = float(input(mensagem)) 6 soma = soma + preco 7 media = soma / 10 8 print('A média de preço é {m:.2f}'.format(m=media)) Agora imagine que fosse necessário listar os produtos com preço acima da média Como fazer isto de uma forma eficiente? IFMG - Campus Bambuí - DEC - ENGCOMP 47/69 Possíveis soluções O problema dos preços acima da média é que usamos os preços dos produtos para calcular a média e depois precisamos novamente do preço de cada produto Uma solução seria declarar 10 variáveis uma para cada produto Porém, imagine uma lista de 50 produtos ou mais A declaração de variáveis individuais não é viável na prática Outra solução seria pedir para o usuário para informar os preços, realizar o cálculo da média e solicitar os preços novamente Essa solução também não é eficiente, pois o usuário precisa digitar a lista de preços duas vezes Além disso, o usuário que pode digitar algum dado errado na segunda vez A melhor solução para o problema é a utilização de um vetor IFMG - Campus Bambuí - DEC - ENGCOMP 48/69 Listas em Python Em muitas linguagens de programação, é preciso declarar uma variável do tipo vetor Já na linguagem Python declaramos uma lista vazia onde podemos incluir e remover elementos As principais funções de dados do tipo lista são: append(x): adiciona x no final da lista insert(i , x): insere x na posição i da lista pop(i): remove e retorna o elemento na posição i da lista, se i não for informado, a última posição é considerada clear(): remove todos os elementos da lista IFMG - Campus Bambuí - DEC - ENGCOMP 49/69 Exemplo com lista 1 soma = 0 2 lista_precos = [] 3 print('Informe o preço dos produtos') 4 for cont in range(10): 5 mensagem = 'Produto ' + str(cont+1) + ': ' 6 preco = float(input(mensagem)) 7 soma = soma + preco 8 lista_precos.append(preco) 9 media = soma / 10 10 print('A média de preço é {m:.2f}'.format(m=media)) 11 print('Os produtos com preço acima da média são:') 12 for cont in range(10): 13 if lista_precos[cont] > media: 14 print('Produto', cont+1, ', preço: ', lista_precos[cont]) IFMG - Campus Bambuí - DEC - ENGCOMP 50/69 Inicialização de listas Em algumas situações, precisamos inicializar listas com certos valores ou com um determinado número de posições Podemos fazer isso com a função range() e com o operador * Exemplo de inicialização de listas 1 # Lista inicializada com números de 0 a 9 2 lista = list(range(10)) 3 print(lista) 4 # Lista de 10 posições com valores 0 5 lista = [0]*10 6 print(lista) IFMG - Campus Bambuí - DEC - ENGCOMP 51/69 Listas comprimidas e leitura de listas Outra maneira de inicializar listas é utilizando a compressão Também podemos ler um string e quebrá-lo em lista Nessa caso, podemos usar a função len() para obter o tamanho da lista Exemplo de compressão e quebra de string 1 # Lista inicializada com números de 0 a 9 2 lista = [n for n in range(9)] 3 print(lista) 4 # Leitura de string e com split 5 texto = input('Informe uma lista de números (separado com espaços): ') 6 lista = [int(x) for x in texto.split()] 7 print(lista) 8 print(len(lista)) IFMG - Campus Bambuí - DEC - ENGCOMP 52/69 Seleção de elementos As listas permitem diversos tipos de seleções de elementos Exemplo 1 # Lista com números de 1 a 10 2 lista = list(range(1, 11)) 3 # Último elemento 4 print(lista[-1]) 5 # Segundo ao terceiro elemento 6 print(lista[1:3]) 7 # Até o quinto elemento 8 print(lista[:5]) 9 # Do terceiro elemento até o final 10 print(lista[2:]) IFMG - Campus Bambuí - DEC - ENGCOMP 53/69 Cópia e o operador in Podemos copiar listas usando a seleção com : Também podemos testar se um elemento existe na lista com o operador in Exemplo 1 # Lista com números de 1 a 10 2 lista = list(range(1, 11)) 3 # Copia do sexto ao último elemento 4 lista2 = lista[5:] 5 print(lista2) 6 # Copia a lista completa 7 lista2 = lista[:] 8 print(lista2) 9 # Testa se 5 está na lista 10 print(5 in lista) 11 # Testa se 20 está na lista 12 print(20 in lista) IFMG - Campus Bambuí - DEC - ENGCOMP 54/69 Modularização A modularização consiste em dividir um algoritmo em partes menores chamadas de sub-rotinas ou funções A modularização facilita o desenvolvimento e a manutenção de softwares As funções representam pequenos problemas do programa principal e portanto possuem uma complexidade menor Além disso, as funções podem ser trabalhadas de forma independente e a localização de erros se torna mais fácil Um programa deve ser desenvolvido de forma modular sempre que possível Isto significa que se um mesmo código é executado em pontos diferentes do programa, então devemos criar uma função para executar esse código IFMG - Campus Bambuí - DEC - ENGCOMP 55/69 Vantagens da modularização Evita a reescrita desnecessária de códigos similaresMelhor legibilidade do código Um programa pode ser desenvolvido em equipe (cada programador cuida de uma parte) As sub-rotinas podem ser testadas isoladamente na verificação de erros A manutenção do programa é facilitada, apenas algumas partes podem precisar de manutenção. IFMG - Campus Bambuí - DEC - ENGCOMP 56/69 Chamada de funções Funções são trechos de código que executam determinada tarefa ao serem chamados e depois retornam o controle para o ponto em que foram chamados Apesar de ainda não termos criados nossas próprias funções, já escrevemos diversos códigos utilizando funções prontas como input() e print() Quando chamamos uma função devemos informar os parâmetros necessários Isto significa que se vamos usar uma função teste() que recebe um parâmetro int e outro str, então devemos usar o código teste(a,b), onde a é do tipo int e b é do tipo str IFMG - Campus Bambuí - DEC - ENGCOMP 57/69 Criando funções A estrutura básica de uma função é a seguinte: 1 def <nome_função>(<parâmetros>): 2 # Instruções da função 3 return <resultado> # Se a função retornar um resultado Exemplo de função (sem retorno de resultado) 1 def saudacao(): 2 print('*****************************') 3 print('* BEM VINDO *') 4 print('*****************************') 5 6 saudacao() IFMG - Campus Bambuí - DEC - ENGCOMP 58/69 Múltiplas funções e variáveis locais Em nosso exemplo, criamos apenas uma função, mas um programa pode ter várias funções Além disso, uma função pode chamar outras funções Uma função pode declarar variáveis para serem utilizadas apenas internamente Estas variáveis são chamadas de variáveis locais enquanto as variáveis do programa principal são chamadas de variáveis globais2. 2O uso de variáveis globais deve ser evitado sempre que possível. IFMG - Campus Bambuí - DEC - ENGCOMP 59/69 Passagem de parâmetros As função saudacao() desempenha sempre a mesma ação, pois ela não recebe parâmetros externos Os parâmetros são como variáveis inicializadas que possibilitam personalizar as ações das funções Exemplo 1 def calcula_cubo(num): 2 cubo = num * num * num 3 print(num, 'ao cubo é', cubo) 4 5 n = float(input('Informe um número: ')) 6 calcula_cubo(n) IFMG - Campus Bambuí - DEC - ENGCOMP 60/69 Função com retorno Quando uma função retorna um resultado, podemos utilizá-la em expressões como se fosse uma variável Exemplo 1 def cubo(num): 2 return num * num * num 3 4 n = float(input('Informe um número: ')) 5 print(n, 'ao cubo é', cubo(n)) IFMG - Campus Bambuí - DEC - ENGCOMP 61/69 Recursão Em certas situações, as funções podem usar recursividade A recursividade permite que uma função chame a si mesma Nesses casos, é importante ter uma condição de parada para não entrar em uma recursão infinita Exemplo 1 def fatorial(num): 2 if num <= 1: 3 return 1 4 else: 5 return num * fatorial(num - 1) 6 7 n = int(input('Informe um número: ')) 8 print('O fatorial de', n, 'é', fatorial(n)) IFMG - Campus Bambuí - DEC - ENGCOMP 62/69 Módulos e bibliotecas Podemos criar nossos próprios módulos contendo nossas funções Dependendo da quantidade de código, pode ser interessante a criação de vários módulos agrupando as funções correlacionadas IFMG - Campus Bambuí - DEC - ENGCOMP 63/69 Exemplo com módulo I mat.py 1 # -*- coding: utf-8 -*- 2 3 def cubo(num): 4 return num * num * num 5 6 7 def fatorial(num): 8 if num <= 1: 9 return 1 10 else: 11 return num * fatorial(num - 1) IFMG - Campus Bambuí - DEC - ENGCOMP 64/69 Exemplo com módulo II principal.py 1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 4 from mat import cubo, fatorial 5 6 n = int(input('Informe um número: ')) 7 print(n, 'ao cubo é', cubo(n)) 8 print('O fatorial de', n, 'é', fatorial(n)) IFMG - Campus Bambuí - DEC - ENGCOMP 65/69 Chamada com nomes de parâmetros e parâmetros opcionais Na chamada de funções é possível, especificar os parâmetros em ordem diferente da especificada, desde que hajam atribuições aos nomes dos parâmetros Também podemos criar funções com parâmetros opcionais Os parâmetros opcionais devem ser os últimos e devem ter um valor padrão já atribuído IFMG - Campus Bambuí - DEC - ENGCOMP 66/69 Exemplo com parâmetro opcional 1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 4 def juros(capital, taxa, tempo=12): 5 return (capital * taxa * tempo) / 100 6 7 print('Cálculo de juros') 8 cap = float(input('Capital: ')) 9 tax = float(input('Taxa: ')) 10 escolha = input('Tempo diferente de 12 meses? (S/N)') 11 if escolha.lower() == 's': 12 temp = int(input('Tempo: ')) 13 jur = juros(taxa=tax, capital=cap, tempo=temp) 14 else: 15 jur = juros(cap, tax) 16 print('O valor dos juros é', jur) IFMG - Campus Bambuí - DEC - ENGCOMP 67/69 Executáveis Também é possível converter módulos em scripts executáveis No Linux, isso é feito incluindo o seguinte conteúdo na primeira linha do arquivo #!/usr/bin/env python3 Também é necessário dar permissão de execução ao arquivo No Windows, é preciso associar o executável pythonw.exe à extensão de arquivos Python Assim, os scripts podem ser executados diretamente através do gerenciador de arquivos ou linha de comando IFMG - Campus Bambuí - DEC - ENGCOMP 68/69 Referências PYTHON SOFTWARE FOUNDATION. Python.org: our documentation. 2021. Disponível em: <https://www.python.org/doc/>. WIKIPÉDIA. Python. 2021. Disponível em: <https://pt.wikipedia.org/wiki/Python>. IFMG - Campus Bambuí - DEC - ENGCOMP 69/69 https://www.python.org/doc/ https://pt.wikipedia.org/wiki/Python Introdução Tipos básicos de dados Variáveis e literais Atribuições Códigos legíveis Entrada e saída de dados Operadores aritméticos Concatenação de texto Operadores relacionais Operadores lógicos Desvio condicional Estruturas de repetição A ferramenta Spyder Bibliotecas, pacotes, módulos e funções Tratamento de exceções Listas Modularização Chamada de funções Passagem de parâmetros Recursão Módulos e bibliotecas Chamada com nomes de parâmetros e parâmetros opcionais Referências
Compartilhar