Algoritmos e Programação com a Linguagem de Programação Python por Prof. Dr. Paulo Roberto Gomes Luzzardi facebook: Paulo Roberto Gomes Luzzardi WhatsApp: 99164-8037 e-mail: [email protected] (principal) e [email protected] e-mail (Senac): [email protected] DropBox: https://www.dropbox.com/sh/kea9kr4j2qttnjg/4xXvw0pvxX?m Hostinger: http://pluzzardi.w.pw e http://pluzzardi.zz.mu (Home Page) Versão 1.35 27-05-2017 Bibliografia recomendada: MENEZES, Nilo Ney Coutinho. Introdução à Programação com Python: Algoritmos e Lógica de Programação para Iniciantes. São Paulo: Editora Novatec, 2010 (ISBN 978-85-7522-250-8). Pelotas, sábado, 27 de maio de 2017 (02:28 am) 1 Sumário 1. Linguagem de Programação Python ............................................................... 3 2. Como executar comandos em Python ............................................................ 3 3. Entrar na IDLE do Python ................................................................................ 3 4. Primeiros comandos ou instruções ............................................................ 3 5. Identificadores e variáveis ........................................................................ 4 6. Operadores aritméticos .................................................................................... 5 6.1 Hierarquia dos operadores (precedência) ......................................... 5 7. Comando print (imprimir dados na tela) .............................................. 6 8. Comando input (ler dados do teclado) ................................................... 7 9. Deletar uma variável (del) ........................................................................... 8 10. Módulos (import) ................................................................................................ 9 11. Funções de matemáticas (math) ................................................................. 9 12. Strings (cadeia de caracteres) ............................................................. 11 12.1 Funções para Strings .................................................................................. 12 13. Comandos: Sequência, Seleção e Repetição ..................................... 13 13.1 Comandos de Sequência ................................................................................ 13 13.2 Lista de Exercícios (Comandos de sequência) ........................... 14 14. Operadores relacionais ................................................................................ 18 15. Operadores lógicos .......................................................................................... 18 16. Comando de Seleção (if) .............................................................................. 18 16.1 Lista de Exercícios (Comando de Seleção if) ........................... 20 17. Contador e acumulador .................................................................................. 22 18. Comandos de Repetição (while e for) ................................................. 22 18.1 range (faixa) ................................................................................................... 24 18.2 Lista de Exercícios (Comando de Repetição while e for) . 26 19. Listas em Python (vetores) ...................................................................... 27 19.1 Lista de Exercícios de Vetores (listas) ..................................... 30 20. Curiosidades e testes no Python .......................................................... 33 21. Funções escritas pelo programador em Python .............................. 34 22. Criação e utilização de módulos em Python .................................. 37 23. Questões de prova ............................................................................................ 39 24. Tratamento de erros (exceções) (em construção e teste) ... 44 25. Banco de Dados em Python (SQLite) ...................................................... 47 26. Sistema de Arquivos em Python (em construção e teste) ...... 52 Lista de Exercícios do Prof. Dr. Ricardo Andrade Cava DropBox: https://www.dropbox.com/sh/kea9kr4j2qttnjg/AAAGkXES6sWvRKCJh8R7x9aia/ListaCava?dl=0 2 1. Linguagem de Programação Python Python é uma linguagem de programação interpretada (onde cada linha é compilada e executada, uma por vez), ou seja, não é compilada (onde todo o programa é traduzido para linguagem de máquina e posteriormente executado). Em Python, cada comando tem sua sintaxe verificada, sendo executado a seguir. Python é uma linguagem de alto nível e um software livre, ou seja, não se paga por sua utilização. É utilizado em muitas aplicações, inclusive em Redes de Computadores para criação de scripts utilizados em servidores e outras aplicações da área, além de ser uma linguagem de uso geral. 2. Como executar comandos em Python Windows: Iniciar ... Programas ... Python 3.? (versão) Linux: $ python3.? (versão – digite TAB para descobrir) MacOsX: $ python3.? (TAB para descobrir as versões instaladas) 3. Entrar na IDLE do Python IDLE é a Interface Gráfica da Linguagem de Programação Python que permite a edição e execução dos programas escritos em Python. Windows: Iniciar ... Programas ... Python 3.? (versão) ... IDLE Linux: $ idle-python3.6 & <enter> MacOsX: $ idle3.6 <enter> Observação: Todo programa fonte em Python possui a extensão “.py”. Instalação e download do Python: http://www.python.org 4. Primeiros comandos ou instruções Python permite executar comandos ou instruções, tais como: Imprimir na tela: >>> print(“Hello”) <enter> Hello Realizar operações matemáticas: 3 >>> 3 + 4 <enter> 7 >>> 2 ** 3 <enter> 8 >>> Operações mais complexas: >>> a = 3 <enter> >>> b = 4 <enter> >>> c = a + b <enter> >>> print(a, b, c) <enter> 3 4 7 >>> print(“c = “, c) <enter> c = 7 >>> print(3>4) <enter> False # valor lógico >>> 5. Identificadores e variáveis Identificadores são os nomes criados pelo programador para fazer referência a variáveis, constantes, funções e módulos. Regras para a criação de identificadores: ü O primeiro caracter deve ser uma letra ou sublinha (_); ü Os caracteres seguintes devem ser letras, números ou sublinhas; ü Não há limite de caracteres; ü Não é permitido a utilização de caracteres em branco (caracter espaço); ü Podem ser letras maiúsculas e minúsculas, pois são diferenciados. Comentário do programador: # não é interpretado - comentário de uma linha ””” comentário em mais de uma linha Não é interpretado ””” ’’’ comentário em mais de uma linha Não é interpretado ’’’ Variáveis em Python existem em três e string. Na declaração de cada variável, o tipo, por exemplo: a = 3, a é declarado é declarado como float, s = “Python” ou string’s. Função type: Exibe o Tipo do Dado. # -------------------------- Type.py a = 3 print(type(a)) 4 tipos: int, float Python especifica como int, b = 3.4 s = ‘Python’ são b = 3.4 print(type(b)) c = 'Python' print(type(c)) d = 'A' print(type(d)) Resultado do Programa: ========= RESTART: /Users/pluzzardi/Documents/Type.py ========= <class 'int'> <class 'float'> <class 'str'> <class 'str'> >>> Comando id: Retorna o identificador do objeto, inteiro que identifica cada objeto do Python. >>> a = 3 >>> b = 4 >>> print(id(a)) 4297624000 >>> print(id(b)) 4297624032 >>> número # 32 bits / 8 bits = 4 bytes (inteiro) 6. Operadores aritméticos Os operadores aritméticos permitem ao programador realizar várias operações matemáticas, tais como: adição, subtração, divisão, multiplicação e potenciação. A seguir, a Tabela 1 exibe os operadores aritméticos utilizados em Python. Tabela 1: Operadores Aritméticos Matemática Operador aritmético Adição + Subtração - Multiplicação * Divisão / Potenciação ** 6.1 Hierarquia dos operadores (precedência) A Tabela 2, a seguir, exibe a precedência dos operadores do Python, ou seja, a ordem de execução das operações matemáticas. 5 Tabela 2: Hierarquia dos Operadores Aritméticos Ordem de precedência Tipo de Operador Parênteses () ** Potenciação - (unário) Unário * / % // Multiplicação, divisão, modulo (resto inteiro da divisão) e divisão inteira + - Adição e subtração Exemplos: >>> 7 / 2 3.5 >>> 7 % 2 1 >>> 7 // 2 3 >>> # divisão real # resto inteiro da divisão (módulo) # divisão inteira 7. Comando print (imprimir dados na tela) O comando print permite enviar (imprimir) para a tela qualquer informação do python, como números, constantes, resultados de operações, strings, etc. Sintaxe simples: print(string, lista_de_variáveis) Exemplos: >>> print(4) <enter> 4 >>> print(3+4) <enter> 7 >>> print(3>4) enter> False # tipo lógico (True ou False) >>> a = 3 <enter> >>> print(a) <enter> 3 >>> b = 4 <enter> >>> print(a+b) <enter) 7 >>> A = 7 <enter> >>> print(A+b) <enter> 11 >>> print(“a = ”, a) <enter> a = 3 >>> >>> print(4%2) # resto inteiro da divisão 0 >>> >>> print(3**4) # Potenciação 81 >>> número_dentes = 32 <enter> >>> print(“Número de Dentes: “, número_dentes) <enter> >>> Número de Dentes = 32 6 >>> a = 3 >>> b = 4 >>> print("a = ", a, "b = ", b) a = 3 b = 4 >>> dia = 3 <enter> >>> mês = 7 <enter> >>> ano = 2017 <enter> >>> print(“Data: %02d/%02d/%d” %(dia, mês, ano)) <enter> 03/07/2017 # saída formatada >>> Tabela 3: Operadores % Operador % Significado %s Uma string %c Caractere %d Decimal inteiro %f Real (float) %% Um '%' Note que o Python permite formatar os dados que serão exibidos na tela através do print, para tanto usa os operadores da Tabela 3, acima. Repare novamente nos exemplos abaixo: >>> dia = 3 <enter> >>> mês = 7 <enter> >>> ano = 2017 <enter> >>> print(“Data: %02d/%02d/%d” %(dia, mês, ano)) <enter> 03/07/2017 >>> # ================================== data e hora from datetime import datetime data = datetime.now() print(data) print("Data: %02d/%02d/%d" %(data.day, data.month, data.year)) print("Tempo: %02d:%02d:%02d" %(data.hour, data.minute, data.second)) 8. Comando input (ler dados do teclado) O comando input permite ler informações via teclado, o valor digitado pelo usuário é lido como uma string, podendo ser convertido para inteiro (int) ou real (float). Sintaxe: string input(string mensagem) Exemplos: Entrada de uma String: >>> s = input(“Digite um Nome: “) <enter> >>> Digite um Nome: Luzzardi <enter> 7 >>> print(len(s)) # número de caracteres da string 8 >>> Entrada de um Inteiro: >>> i = int(input(“Digite um Valor: “)) <enter> >>> Digite um Nome: 34 <enter> >>> print(i) 34 >>> Entrada de um Real (float): >>> i = float(input(“Digite um Valor: “)) <enter> >>> Digite um Nome: 34 <enter> >>> print(i) 34.0 >>> Outra forma, em duas etapas: >>> s = input("Digite um Valor: ") <enter> Digite um Valor: 34 <enter> >>> x = int(s) <enter> # conversão para inteiro >>> print(x) <enter> 34 >>> 9. Deletar uma variável (del) Em Python é possível deletar (apagar, remover, desalocar da memória RAM) uma variável da memória, isto é feito através do comando del. Sintaxe: >>> del variável Exemplo: >>> a = 3 <enter> >>> print(a) <enter> 3 >>> del a >>> print(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined Erro: identificador ‘a’ não definido Observação: É possível também reinicializar o terminal (shell), vá na opção Shell .. Restart Shell, todas as variáveis são destruídas, ou seja, desalocadas da memória RAM (Random Acess Memory). 8 10. Módulos (import) Python possui um conjunto de funções pré-definidas agrupadas em estruturas chamadas de módulos, tais como: math (mathematics), os (sistema operacional), datetime (data e hora), etc. Forma de importar: import módulo Para utilizar a função de um módulo: módulo.função(argumento) Para importar apenas uma função desejada: from módulo import função Exemplos: >>> import math <enter> >>> print(math.pi) <enter> 3.141592653589793 >>> import os <enter> >>> os.system(“clear”) <enter> >>> from math import sqrt <enter> >>> print(math.sqrt(16)) 16 >>> Ajuda (help) dos módulos: >>> import math <enter> >>> help(math) <enter> # exibe funções do módulo math # idêntico ao Linux 11. Funções de matemáticas (math) Python possui diversas funções matemáticas oriundas do módulo “math”. São elas: math.factorial(x): Retorna o valor fatorial de x, onde x deve ser sempre positivo. >>> fat = math.factorial(5) >>> print(fat) 120 >>> # 5x4x3x2x1 = 120 math.modf(x): Retorna o valor inteiro e o valor fracionário da variável x. >>> print(math.modf(5.34)) (0.33999999999999986, 5.0) >>> math.exp(x): Retorna o exponencial de x, ou seja, ex. >>> print(math.exp(1)) 2.718281828459045 >>> print(math.exp(2)) 7.38905609893065 9 >>> print(math.exp(3)) 20.085536923187668 >>> math.log(x, base): Retorna o log de x na base pedida. >>> print(math.log(2,10)) 0.30102999566398114 >>> print(math.log(3,10)) 0.47712125471966244 >>> math.log1p(x): Retorna o logaritmo natural de x. >>> print(math.log1p(1)) 0.6931471805599453 >>> print(math.log1p(2)) 1.0986122886681098 >>> math.sqrt(x): Retorna a raiz quadrada de x. >>> x = 16 >>> print(math.sqrt(x)) 4.0 >>> x = -16 # x deve ser positivo >>> print(math.sqrt(x)) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: math domain error >>> math.degrees(x): graus. Converte o ângulo x de radianos para pi radianos à 180 graus math.radians(x): radianos. Converte o ângulo x de graus para math.sin(x): Retorna o seno de x, onde x deve estar em radianos. >>> x = math.sin(45) >>> print(x) 0.8509035245341184 >>> x = math.sin(math.radians(45)) >>> print(x) 0.7071067811865475 >>> math.cos(x): Retorna o cosseno de x, onde x deve estar em radianos. >>> x = math.cos(45) >>> print(x) 10 0.5253219888177297 >>> x = math.cos(math.radians(45)) # converte 45 para radianos >>> print(x) 0.7071067811865476 math(tan(x): Retorna a tangente de x, onde x deve estar em radianos. >>> tangente = math.tan(math.radians(45)) >>> print(tangente) 0.9999999999999999 >>> math.hypot(x, y): Retorna a hipotenusa do triângulo retângulo, onde x e y são os catetos oposto e adjacente. >>> hipotenusa = math.hypot(3 ,4) >>> print(hipotenusa) 5.0 >>> 12. Strings (cadeia de caracteres) String é uma sequência de caracteres, letras, números e caracteres especiais, que permite trabalhar com textos. >>> s = "Python" <enter> >>> print(s) <enter> Python >>> print("Número de caracteres da string: %d" %(len(s))) <enter> 6 >>> ou >>> s = ‘Python’ <enter> >>> l = len(s) <enter> # pode ser utilizado aspas simples # retorna o número de caracteres >>> print("Número de caracteres da String: %d" %l) <enter> 6 >>> outra forma de inicialização: >>> s = 'P' 'y' 't' 'h' 'o' 'n' <enter) >>> print(s) <enter> Python >>> Vetor de Strings: (será visto em outro capítulo) >>> s = ('Paulo', 'Roberto', 'Gomes', 'Luzzardi') <enter> >>> print(s[0]) <enter> Paulo >>> print(s[3]) <enter> Luzzardi >>> 11 12.1 Funções para Strings # ------------------------------------------- Split.py s = "Paulo Roberto Gomes Luzzardi" print("Número de letras: ", len(s)) partes = s.split(' ') n = len(partes) print("Número de nomes: ", n) for i in range(n): print(partes[i]) print(partes) Resultado do Programa: ===== RESTART: /Users/pluzzardi/Desktop/Python/Python/Split.py ==== Número de letras: 28 Número de nomes: 4 Paulo Roberto Gomes Luzzardi ['Paulo', 'Roberto', 'Gomes', 'Luzzardi'] >>> Exemplo de funções de Strings: # -------------------------------- String.py # -------------------------------------------- len s = 'Paulo Roberto Gomes Luzzardi' n = len(s) # retorna o total de caracteres da string print("Número de Caracteres: ", n) # -------------------------------------------- count caracter = 'a' letras = s.count(caracter) # retorna o número de vezes que o caracter aparece na string print('Número de letras "%c" é %d' %(caracter,letras)) # -------------------------------------------- replace s = s.replace('Roberto', 'R.') # troca parte da string s = s.replace("Gomes", "G.") print(s) # -------------------------------------------- find pos = s.find('z') # procura a primeira aparição de uma letra print(pos) # -------------------------------------------- upper e lower print("STRING: ", s.upper()) # exibe como maiúscula print(s) print("string: ", s.lower()) # exibe como minúscula print(s) # -------------------------------------------- title s = "paulo roberto gomes luzzardi" print(s.title()) 12 # -------------------------------------------- swapcase s = 'Paulo Roberto Gomes Luzzardi' print(s.swapcase()) # inverte as letras maiúsculas e minúsculas # -------------------------------------------- isalpha print('Contém apenas letras: ', s.isalpha()) # verifica se contém apenas letras s = 'FatecSenac' print('Contém apenas letras: ', s.isalpha()) # --------------------------------------------- isdigit print('Contém apenas números: ', s.isdigit()) s = '123456' print('Contém apenas números: ', s.isdigit()) Resultado do Programa: =========== RESTART: /Users/pluzzardi/Documents/String.py ========== Número de Caracteres: 28 Número de letras "a" é 2 Paulo R. G. Luzzardi 14 STRING: PAULO R. G. LUZZARDI Paulo R. G. Luzzardi string: paulo r. g. luzzardi Paulo R. G. Luzzardi Paulo Roberto Gomes Luzzardi pAULO rOBERTO gOMES lUZZARDI Contém apenas letras: False Contém apenas letras: True Contém apenas números: False Contém apenas números: True >>> 13. Comandos: Sequência, Seleção e Repetição Python possui três tipos principais de comandos, sequência, onde todos são executados, seleção, onde alguns são e outros não são executados e repetição, comandos são executados diversas vezes. 13.1 Comandos de Sequência Comandos de Sequência: Todos os comandos (ou instruções) em sequência são sempre executados no fluxo do programa. # --------------------- Circulo.py import math diametro = float(input("Digite o valor do Diâmetro: ")) raio = diametro / 2 area = math.pi * raio ** 2 print("Área do Círculo é: ", area) 13 Resultado do Programa: Digite o valor do Diâmetro: 6 <enter> Área do Círculo é: 28.274334 >>> # ----------------------------------- Temperatura.py f = 120 c = (f - 32) * 5 / 9 print("Celsius: %d" %c, sep='', end='') print(" - Fahrenheit: ", f) # imprime mesma linha Resultado do Programa: == RESTART: /Users/pluzzardi/Desktop/Python/Python/Temperatura.py == Celsius: 48 - Fahrenheit: 120 >>> # ---------------------------------- Random.py import random n = 10 print("Faixa de Sorteio: 0 ... %d" %(n-1)) numero = int (random.random() * n) print("Número Sorteado: ", numero) # A função random gera um número float aleatório entre 0.0 e 1.0 Resultado do Programa: ========== RESTART: /Users/pluzzardi/Documents/Random.py ======= Faixa de Sorteio: 0 ... 9 Número Sorteado: 8 >>> # ----------------------------- Aleatorio.py import random for i in range(6): n = random.randint(1, 10) print("n = ", n) Resultado do Programa: ======= RESTART: /Users/pluzzardi/Documents/Aleatorio.py ======= n = 2 n = 9 n = 7 n = 6 n = 5 n = 7 >>> 13.2 Lista de Exercícios (Comandos de sequência) a) Escreva um programa em Python que recebe dois valores 14 via teclado: cateto adjacente (b) e cateto oposto (a) e calcula o valor da hipotenusa dado pela seguinte fórmula: Teste do Programa: Cateto Adjacente (b): 3 <enter> Cateto Oposto (a): 4 <enter> Hipotenusa: 5.0 b) Escreva um programa em Python que lê 4 notas via teclado: n1, n2, n3 e n4 obtidas por um aluno em 4 avaliações. Calcule a média utilizando a seguinte fórmula: n1 + n2 x 2 + n3 x 3 + n4 Média = --------------------------7 c) Escreva um programa em Python que recebe via teclado: comprimento da circunferência. O programa deve calcular e imprimir na tela o diâmetro e o raio da circunferência (veja exemplo abaixo): Teste do Programa: Comprimento da circunferência: 36 <enter> Diâmetro: 11.46 Raio: 5.73 comprimento da circunferência = 2 . Pi . raio diâmetro = 2 . raio d) Desenvolva um programa em Python que recebe via teclado: peso da carne que será vendida e preço por 15 quilo. O programa deve calcular e imprimir na tela o total a pagar, o valor pago ao ICMS (17%) e o lucro líquido do açougue. Teste do Programa (1): Peso: 3.5 <enter> Preço por Kg (R$): 4.90 <enter> Total a pagar: 17.15 ICMS (17%): 2.91 Lucro líquido do açougue (R$): 14.24 Teste do Programa (2): Peso: 1.5 <enter> Preço por Kg (R$): 9.00 <enter> Total a pagar: 13.5 ICMS (17%): 2.29 Lucro líquido do açougue (R$): 11.21 e) Escreva um programa em Python que recebe via teclado: a data de hoje da seguinte forma: dia, mês, ano e a sua idade, da seguinte forma: anos, meses e dias vividos. Calcule e imprima a data de nascimento no seguinte formato: dd/mm/aaaa. Teste do Programa: Qual a data de hoje: Dia: 16 <enter> Mês: 3 <enter> Ano: 2017 <enter> Qual a sua idade: Anos: 55 <enter> Meses: 1 <enter> Dias: 6 <enter> Data de Nascimento: 10/02/1962 f) Escreva um programa em Python que recebe via teclado: salário mensal e percentual de reajuste. Calcular e escrever o valor do novo salário. Teste do Programa: Salário: 500 <enter> Percentual de reajuste: 15 <enter> Novo salário: 575 16 g) Escreva um programa em Python que lê via teclado as dimensões de uma cozinha retangular (comprimento, largura e altura), calcular e escrever a quantidade de caixas de azulejos para se colocar em todas as suas paredes (considere que não será descontado a área ocupada por portas e janelas). Cada caixa de azulejos possui 1,5 m2. Teste do Programa: Comprimento: 4.5 <enter> Largura: 3 <enter> Altura: 2.8 <enter> Quantidade de caixas: 28 h) A turma C é composta de 60 alunos, e a turma D de 20 alunos. Escreva um programa em Python que leia o percentual de alunos reprovados na turma C, o percentual de aprovados na turma D, calcule e escreva: a) O número de alunos reprovados na turma C. b) O número de alunos reprovados na turma D. c) A percentagem de alunos reprovados em relação ao total de alunos das duas turmas. Teste do Programa: Percentual de Percentual de Quantidade de Quantidade de Percentual de turmas: 11.25 alunos alunos alunos alunos alunos reprovados na turma C: 10 <enter> aprovados na turma D: 85 <enter> reprovados na turma C: 6 reprovados na turma D: 3 reprovados em relação ao total de alunos das duas i) Escreva um programa em Python que recebe três valores via teclado: a, b e c. O programa deve calcular e imprimir na tela os valores das raízes x1 e x2 dados pela fórmula da bhaskara, ou seja, uma equação de segundo grau: a.x2 + b.x + c = 0 Teste do Programa: a = 1 <enter> b = 2 <enter> c = -3 <enter> x1 = 1 x2 = -3 17 14. Operadores relacionais Os operadores relacionais permitem ao programador realizar comparações. A seguir, a Tabela 4 exibe os operadores relacionais utilizados em Python. Tabela 4: Operadores Relacionais Operador relacional Função == Igual != Diferente > Maior < Menor >= Maior ou igual <= Menor ou igual 15. Operadores lógicos Os operadores lógicos permitem ao programador realizar várias comparações em uma mesma condição. A seguir, a Tabela 5 exibe os operadores lógicos utilizados em Python. Tabela 5: Operadores Lógicos Operador lógico and or not and é verdadeiro quando ambas condições forem verdadeiras or é verdadeiro quando uma ou ambas condições forem verdadeiras. not é o inverso da condição, ou seja, inverte o True ou False. 16. Comando de Seleção (if) O comando de seleção if permite o programa seguir dois caminhos, isto é feito através de uma condição, utilizando um operador relacional (Tabela 4), que pode ser verdadeira (True) ou falsa (False). Sintaxe: if condição: comando # simples ou if condição: # simples 18 comando ou if condição: comando1 else: comando2 # composto ou if condição1: comando1 elif condição2: comando2 else: comando3 Programa Exemplo: if simples # -------------------------------------- If.py 1: x = int(input("Digite um Número: ")) 2: if x < 0: 3: print("Número é negativo") 4: print("x = ", x) Observação: Note a endentação no comando if (linha 3), Python utiliza a endentação como forma de formar blocos de comandos, ou seja, delimitar instruções ligadas a um único comando. Resultado do Programa: ======= RESTART: /Users/pluzzardi/Documents/If.py ======== Digite um Número: -5 Número é negativo x = -5 >>> ======= RESTART: /Users/pluzzardi/Documents/If.py ======== Digite um Número: 5 x = 5 >>> Programa exemplo: If completo, ou seja, com duas partes # ---------------------------------------- Par.py x = int(input("Digite um Número: ")) if x % 2 == 0: print("Par") else: print("Ímpar") 19 Resultado do Programa: ================= RESTART: /Users/pluzzardi/Documents/Par.py ======= Digite um Número: 4 Par >>> # ------------------------- Bhaskara.py import math a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) delta = b**2 - 4 * a * c if delta >= 0: x1 = (-b + math.sqrt(delta)) / 2*a x2 = (-b - math.sqrt(delta)) / 2*a print("x1 = ", x1) print("x2 = ", x2) else: print("Erro: Raizes complexas") Resultado do Programa: ===== RESTART: /Users/pluzzardi/Documents/bhaskara.py ====== a = 1 b = 2 c = -3 x1 = 1.0 x2 = -3.0 >>> Programa exemplo: if com elif # ---------------------------------------- Elif.py numero = int(input("Digite um Número: ")) if numero > 0: print("Positivo") elif numero < 0: print("Negativo") else: print("Zero") 16.1 Lista de Exercícios (Comando de Seleção if) a)Escreva um programa em Python que lê as notas de duas avaliações de um aluno no semestre. Calcular e escrever a média semestral e a seguinte mensagem: ‘PARABÉNS! Você foi aprovado’ somente se o aluno foi aprovado (considere 7.0 a nota mínima para aprovação) ou ‘Você foi reprovado! Estude mais’. Teste do Programa: Nota 1: 6 <enter> 20 Nota 2: 8 <enter> Média: 7.0 PARABÉNS! Você foi aprovado b)Escreva um programa em Python que lê dois valores. Escreva o valor do maior, o menor e a média dos dois valores. Teste do Programa: Valor: Valor: Maior: Menor: Média: 3 <enter> 4 <enter> 4 3 3.5 c)Escreva um programa em Python que lê o ano de nascimento de uma pessoa. Escrever: PODE VOTAR ou NÃO PODE VOTAR e a idade, conforme exemplo abaixo. Teste do Programa: Ano de Nascimento: 1999 <enter> Status: PODE VOTAR Idade: 18 anos d) As maçãs custam R$ 0,30 ser forem compradas menos do que uma dúzia, e R$ 0,25 ser forem compradas pelo menos doze. Escreva um programa em Python que leia o número de maçãs compradas, calcule e escreva o valor total da compra. Testes do Programa: Maças: 20 <enter> Valor da Compra: R$ 5.00 ou Maças: 12 <enter> Valor da Compra: R$ 3.00 e) Escreva um programa em Python que recebe via teclado a altura e o sexo (codificado da seguinte forma: [f] feminino - [m] masculino) de uma pessoa. Calcule e imprima na tela o peso ideal, utilizando as seguintes fórmulas: Homens: 72.7 * h - 58 Mulheres: 62.1 * h - 44.7 Testes do Programa: Altura: 1.80 <enter> Sexo [M] ou [F]: m <enter> Peso Ideal: 72.86 ou Altura: 1.65 <enter> Sexo [M] ou [F]: F <enter> 21 Peso Ideal: 57.765 17. Contador e acumulador Um contador é uma variável que possui uma expressão matemática, dentro de um comando de atribuição, que realiza uma contagem de uma certa quantidade de vezes que um comando de repetição é executado, ou seja, ela mantém a quantidade de vezes que um laço foi executado. Pode-se contar de um em um, dois em dois e assim sucessivamente, servindo, normalmente, para contar o número de elementos. Sintaxe: x = x + 1 # x ß x + 1 Note que é somado um (1) ao x e então atribuído este novo valor ao próprio x. Note ainda que um (1) é uma constante, que pode ser 1, 2, 3, ... Um acumulador ou somador é uma variável que contém uma expressão matemática que serve para acumular valores a cada vez que o código é executado. Sintaxe: soma = soma + n # soma ß soma + n Note que é somado o valor ‘n’ a soma e atribuído este novo valor a própria soma. Note ainda que n é uma variável, que pode ser qualquer valor inteiro ou real (float). 18. Comandos de Repetição (while e for) Os comandos de repetição while e for permitem repetir diversas vezes um bloco de comandos ou instruções. While repete enquanto a condição é verdadeira. Comando while: Sintaxe: while condição: comando1 comando2 ... # --------------------------- While.py i = 1 while i <= 10: print("i = ", i) i = i + 1 Resultado do Programa: ========= RESTART: /Users/pluzzardi/Documents/While.py ========= 22 i = i = i = i = i = i = i = i = i = i = >>> 1 2 3 4 5 6 7 8 9 10 # -------------------- In2.py import random s = 's' while s in ['S', 's']: # operador in num = random.randint(1, 10) print("Número sorteado: ", num) s = input("Continua [S/N]") Resultado do Programa: ============= RESTART: /Users/pluzzardi/Documents/In2.py ========= Número sorteado: 2 Continua [S/N]s Número sorteado: 2 Continua [S/N]s Número sorteado: 7 Continua [S/N]s Número sorteado: 10 Continua [S/N]n >>> Comando for: Permite executar várias vezes um bloco de comandos. Sintaxe: for variável in faixa: comando1 comando2 ... Observação: A escolha entre o comando while e for se dá sempre que sabe-se a quantidade de vezes que um bloco é executado. Sempre que se sabe o número de vezes, deve-se usar o comando for, caso contrário, deve-se utilizar o comando while, que pode ser controlado de várias formas, baseados em sua condição. Para utilizar o comando for deve-se saber o início (start), o ponto de parada (stop) e a variação (step). # --------------------------------- For.py for i in range(6): print(i) # faixa: 0 à 5, onde 6 é o ponto de parada 23 ====== RESTART: /Users/pluzzardi/Desktop/Python/Python/For.py ===== 0 1 2 3 4 5 >>> # ----------------------------------- ForDuplo.py for i in range(3): for j in range(4): print(i, j) ====== RESTART: /Users/pluzzardi/Documents/ForDuplo.py ========== 0 0 0 1 0 2 0 3 1 0 1 1 1 2 1 3 2 0 2 1 2 2 2 3 >>> Observação: Note que começa sempre em zero. # ----------------------------------- ForDuplo2.py for i in range(3): for j in range(4): print(i+1, j+1) === RESTART: /Users/pluzzardi/Desktop/Python/Python/ForDuplo2.py === 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4 3 1 3 2 3 3 3 4 >>> 18.1 range (faixa) Range permite determinar o ponto de partida (start), ponto de parada (stop) e a variação (step) usado no comando for. 24 Sintaxe: range(start, stop, step) Onde: Start: partida Stop: parada (stop - 1) Step: passo (incremento [+] ou decremento [-]) Exemplos: for i in range(10): print(i) # 0 1 2 3 4 5 6 7 8 9 for i in range(0, 10, 2): print(i) # 0 2 4 6 8 for i in range(0, 11, 2): print(i) # 0 2 4 6 8 10 for i in range(10, -1, -1): print(i) # 10 9 8 7 6 5 4 3 2 1 0 for i in range(10, 0, -1): print(i) # 10 9 8 7 6 5 4 3 2 1 Observação: Nunca chega no ponto de parada. Observação: Será visto no capítulo sobre listas (vetores). lista = {10, 20, 30, 40, 50} # é uma lista print("Lista sem Ordenação") for i in lista: print(i) print("Lista Ordenada") for i in sorted(lista): print(i) for i, valor in enumerate(lista): print("%d - %d" %(i, valor)) lista = list(range(10)) for i in lista: lista[i] = i + 5 print(lista[i]) print(lista) nomes = {"Carla", "Ana", "Debora", "Eva", "Beatriz"} for i in sorted(nomes): print(i) # for <variável> in <lista>: # <bloco de código endentado> Resultado do Programa: ===== RESTART: /Users/pluzzardi/Desktop/Python/Python/For.py ===== 0 1 2 3 25 4 5 Lista sem Ordenação 40 10 50 20 30 Lista Ordenada 10 20 30 40 50 0 - 40 1 - 10 2 - 50 3 - 20 4 - 30 5 6 7 8 9 10 11 12 13 14 [5, 6, 7, 8, 9, 10, 11, 12, 13, 14] Ana Beatriz Carla Debora Eva 18.2 Lista de Exercícios (Comando de Repetição while e for) a)Escreva um programa em Python que lê um número via teclado. O programa deve exibir se o número é PAR ou ÍMPAR. O programa é encerrado quando o número digitado for ZERO. Teste do Programa: Número: 6 <enter> PAR Número: 7 <enter> IMPAR Número: 0 <enter> PAR >>> b)Escreva um programa em Python que lê um número via teclado. O programa deve exibir: POSITIVO, NEGATIVO ou ZERO. O programa é encerrado quando o usuário digitar ‘N’ ou ‘n’ na pergunta “Continua [S/N]?”. Teste do Programa: 26 Número: 6 <enter> POSITIVO Continua [S/N]? s Número: -7 <enter> NEGATIVO Continua [S/N]? S Número: 0 <enter> ZERO Continua [S/N]? N >>> c)Escreva um programa em Python que lê um nome via teclado. O programa deve exibir o número de palavras do nome e a abreviatura do nome. Teste do Programa: Nome: Paulo Roberto Gomes Luzzardi <enter> Número de palavras: 4 Abreviatura: P. R. G. L. >>> d)Escreva um programa em Python que teclado. O programa deve exibir o conforme exemplo abaixo: lê um nome via nome do autor, Teste do Programa: Nome: Paulo Roberto Gomes Luzzardi <enter> Autor: Luzzardi, Paulo R. G. >>> e) Escreva um programa em Python que lê um nome qualquer via teclado. Logo após a entrada exiba na tela: (a) todas as vogais do nome; (b) todas as consoantes do nome e o (c) total de letras, conforme e exatamente igual ao teste abaixo: Teste do Programa: Nome: paulo roberto gomes luzzardi <enter> Vogais: auooeooeuai (11) Consoantes: plrbrtgmslzzrd (14) Total de letras: 25 >>> 19. Listas em Python (vetores) Em Python vetores são representados em forma de listas. Vetores são estruturas que permitem armazenar valores homogêneos, ou seja, de mesmo tipo. Listas por outro lado, são classes que permitem armazenar qualquer tipo de informação. Exemplo: 27 # ------------------------------- Lista1.py x = [10, 20, 30] n = len(x) for i in range(n): print(x[i]) Resultado do Programa: ======= RESTART: /Users/pluzzardi/Documents/Lista1.py ========== 10 20 30 >>> # ------------------------------- Lista2.py x = [] n = int(input("Número de Elementos: ")) for i in range(n): num = int(input("Digite um Número: ")) x.append(num) # insere um elemento no fim da lista for i in range(n): print('x[',i,'] = ', x[i], sep='') # elimina o espaço print("Lista: ", x) Resultado do Programa: ==== RESTART: /Users/pluzzardi/Desktop/Python/Python/Lista2.py ==== Número de Elementos: 4 Digite um Número: 10 Digite um Número: 20 Digite um Número: 30 Digite um Número: 40 x[0] = 10 x[1] = 20 x[2] = 30 x[3] = 40 Lista: [10, 20, 30, 40] >>> # ------------------------------ Lista3.py x = [10, 20, 30] y = x print("x = ", x, "y = ", y) print(x is y) print(id(x)) print(id(y)) t = x[:] # cria uma cópia da lista x print(t is x) print(id(t)) print("Número de Elementos: ", len(x)) Resultado do Programa: ======== RESTART: /Users/pluzzardi/Documents/Lista3.py ========== x = [10, 20, 30] y = [10, 20, 30] True 4380371208 28 4380371208 False 4320652552 Número de Elementos: >>> 3 # -------------------------------- Lista4.py nome = [] nota = [] media = 0.0 numeroAlunos = 4 for i in range(numeroAlunos): nome.append(input("Nome do Aluno: ")) nota.append(float(input("Nota do " + nome[i] + ": "))) # ao lado media = media + nota[i] media = media / numeroAlunos print("Média da Turma:", media) Resultado do Programa: ======== RESTART: /Users/pluzzardi/Documents/Lista4.py ============= Nome do Aluno: Paulo Nota do Paulo: 7 Nome do Aluno: Roberto Nota do Roberto: 8 Nome do Aluno: Gomes Nota do Gomes: 9 Nome do Aluno: Luzzardi Nota do Luzzardi: 10 Média da Turma: 8.5 >>> O programa a seguir mostra a criação aleatória de palpites para a MegaSena. # ---------------------------- MegaSena.py import random # ---------------------------- repetido def repetido(num, n, t): for i in range(n): if num[i] == t: return(True) return(False) # ---------------------------- imprime def imprime(num): for i in range(len(num)): t = num[i] print("%2d " %t, sep='', end='') print() ch = 's' while ch in ['S', 's']: palpites = int(input("Número de palpites: ")) for i in range(palpites): num = [] n = 1 num.append(random.randint(1, 60)) 29 while n != 6: t = random.randint(1, 60) if not(repetido(num, n, t)): num.append(t) n = n + 1 num.sort() # ordena a lista imprime(num) ch = input("Continua [s/n]?") Resultado do Programa: ======== RESTART: /Users/pluzzardi/Desktop/MegaSena.py ============= Número de palpites: 5 3 9 14 17 26 40 2 7 10 12 28 54 9 13 16 30 36 39 2 26 29 43 47 54 5 12 23 31 37 55 Continua [s/n]?s Número de palpites: 6 9 11 23 26 33 34 8 28 31 40 43 50 9 17 22 24 28 47 22 31 33 36 39 45 16 27 39 40 43 46 15 31 36 42 48 60 Continua [s/n]?n >>> 19.1 Lista de Exercícios de Vetores (listas) a) Escreva um programa em Python que recebe via teclado um conjunto de letras. Armazene todas as letras em um vetor ou lista (letras) até que o usuário digite apenas <enter>. Logo após copie todas as letras (em ordem inversa) para outro vetor (inverso). Ao final imprima os dois vetores (conforme exemplo abaixo). Teste do programa: Letra: L <enter> Letra: I <enter> Letra: M <enter> Letra: A <enter> Letra: <enter> [‘L’, ‘I’, ‘M’, ‘A’] [‘A’, ‘M’, ‘I’, ‘L’] b) Escreva um programa em Python que recebe via teclado: número de idades e as respectivas idades. Armazene todas as idades em um vetor (idade). Logo após a entrada de todas as idades, o programa deve receber via teclado: idade para consulta. O programa deve imprimir na tela, o número de idades antes da idade de consulta e o número de idades depois da idade de consulta (conforme exemplo abaixo). 30 Teste do programa: Número de idades: 6 <enter> Idade: 30 <enter> Idade: 60 <enter> Idade: 10 <enter> Idade: 50 <enter> Idade: 20 <enter> Idade: 40 <enter> Idade para consulta: 50 <enter> Antes: 3 Depois: 2 Continua [S/N]? n <enter> c) Escreva um programa em Python que recebe via teclado um conjunto de números inteiros. Armazene todos os números inteiros em um vetor até que o usuário digite 0 (zero). Logo após permita ao usuário consultar um número informando o seu valor. O programa deve imprimir na tela a posição do número no vetor ou ERRO: Número não encontrado (veja exemplos abaixo): Exemplo: Número: 50 <enter> Número: 30 <enter> Número: 20 <enter> Número: 10 <enter> Número: 40 <enter> Número: 0 <enter> Valor: 20 <enter> Posição no vetor: 2 Valor: 40 <enter> Posição no vetor: 4 Valor: 60 <enter> ERRO: Número não encontrado Valor: 0 <enter> Observação: O programa termina quando o usuário digitar 0 (zero). d) Escreva um programa em Python que recebe via teclado "n" conceitos (A, B, C, D e E) até que o usuário digite F ou f. Armazene todos os conceitos em um vetor (conceito). Imprima na tela o número de alunos: aprovados (A, B e C), reprovados (D) e os infrequentes (E). Teste do programa: Conceito: B <enter> Conceito: A <enter> 31 Conceito: E <enter> Conceito: B <enter> Conceito: D <enter> Conceito: C <enter> Conceito: A <enter> Conceito: E <enter> Conceito: f <enter> 5 Aprovado(s) 1 Reprovado(s) 2 Infrequente (s) e) Escreva um programa em Python que recebe via teclado “n” nomes. A entrada dos nomes termina quando o usuário digitar apenas <enter>. Logo após a entrada de todos os nomes o programa deve permitir a entrada via teclado de uma letra. O programa deve imprimir na tela todos os nomes que começam com a letra especificada pelo usuário. O programa termina quanto o usuário digitar “” (nada) na entrada da letra (conforme exemplos abaixo): Teste do programa: Nome: Paulo <enter> Nome: Roberto <enter> Nome: Renato <enter> Nome: Pedro <enter> Nome: Fabio <enter> Nome: <enter> Letra: R <enter> Nome: Roberto Nome: Renato Letra: P <enter> Nome: Paulo Nome: Pedro Letra: T <enter> Letra: <enter> f) Escreva um programa em Python que recebe via teclado “n” nomes e idades. A entrada dos dados termina quando o usuário digitar 'N' ou 'n' na pergunta "Continua [S/N]?". Logo após a entrada de todos os dados o programa deve imprimir na tela todos os nomes e idades desde o mais velho até o mais novo. Teste do programa: Nome: Ana <enter> Idade: 12 <enter> Continua [S/N]? s <enter> Nome: Beatriz <enter> Idade: 13 <enter> Continua [S/N]? s <enter> 32 Nome: Carla <enter> Idade: 14 <enter> Continua [S/N]? N <enter> Carla 14 Beatriz 13 Ana 12 20. Curiosidades e testes no Python A seguir são vistos algumas curiosidades e testes feitos no Python: # --------------------------------- Teste.py # ==================== inicialização de várias variáveis a, b = 10, 20 print(a, b) # ==================== None (nulo ou null x = None x = 5 print(x) # None é nulo ou null # ===================== imprimir várias variáveis x = 10 y = 20 print("x = %d - y = %d\n" %(x, y)) # print formatado # ===================== definição de uma função em Python def maior(x, y): if x > y: return(x) else: return(y) print(maior(3,4)) # ============================== if simples x = int(input("Digite um Número: ")) if x < 0: print('Valor Negativo') print("Número Digitado: ", x) # ============================== imprimir uma string for letter in "python": print(letter) # ============================== if ... elif ... else ... numero = int(input("Digite um Número: ")) if numero > 0: print("Positivo") elif numero < 0: 33 print("Negativo") else: print("Zero") # ================================== data e hora from datetime import datetime data = datetime.now() print(data) print("Data: %02d/%02d/%d" %(data.day, data.month, data.year)) print("Tempo: %02d:%02d:%02d" %(data.hour, data.minute, data.second)) Resultado do Programa: 10 20 5 x = 10 - y = 20 4 Digite um Número: -5 Valor Negativo Número Digitado: -5 p y t h o n Digite um Número: 0 Zero 2017-03-08 14:47:17.866354 Data: 08/03/2017 Tempo: 15:01:59 >>> # ----------------------------------- str.py s = "" for i in range(10): s = s + str(i) + ", " print(s) # forma uma string com números Resultado do Programa: ========== RESTART: /Users/pluzzardi/Documents/str.py =========== 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, >>> 21. Funções escritas pelo programador em Python Em Python é possível o programador escrever suas próprias funções, ou seja, dividir o programas em módulos menores (programação modular ou estruturada ou dividir para conquistar). Uma função deve ser uma caixa preta, que depois de funcionar não precisa mais manutenção. Uma função pode ou não receber argumentos (parâmetros) e retornar ou não um valor. 34 A seguir é visto um exemplo que mostra duas funções que permitem entrada de dados de números reais (REAL) ou números inteiros (INTEIRO) via teclado sem erro, ou seja, o usuário pode cometer erros de digitação que o programa não é abortado. Para escrever uma função usa-se a palavra reservada def. A princípio a função deve estar localizada antes da chamada da função. A sintaxe é: def nome_função(lista de argumentos): comando1 comando2 return(valor) chamada_função(argumentos) Exemplo: # -------------------------------- Funcoes.py import math def Hipotenusa(a, b): h = math.sqrt(a**2 + b**2) return(h) def Maior(a, b): if a > b: return(a) else: return(b) def Menor(a, b): if a < b: return(a) else: return(b) a = float(input("Digite um valor (a): ")) b = float(input("Digite outro valor (b): ")) print("Hipotenusa: ", Hipotenusa(a,b)) print("Maior: ", Maior(a, b)) print("Menor: ", Menor(a, b)) Resultado do Programa: ===== RESTART: /Users/pluzzardi/Documents/Funcoes.py ==== Digite um valor (a): 3 Digite outro valor (b): 4 Hipotenusa: 5.0 Maior: 4.0 Menor: 3.0 >>> # ------------------------------------------ Fatorial.py 35 # Exemplo de função recursiva, função que chama a si própria # É complexo o ponto de parada # -----------------------------------------------------def Fatorial(n): if n <= 1: return(1) fat = n * Fatorial(n-1) return(fat) x = int(input("Digite um valor: ")) fat = Fatorial(x) print("Fatorial: ", fat) Resultado do Programa: === RESTART: /Users/pluzzardi/Documents/Fatorial.py ===== Digite um valor: 20 Fatorial: 2432902008176640000 >>> # ---------------------------------------------------------- Float.py # O programa testa a conversão de string para float ou inteiro # sem erro na entreda de dados com input # ------------------------------------------------------------------def REAL(s): n = len(s) temLetras = False for i in range(n): if s[i] == ',': s = s.replace(',','.') # trocar vírgula por ponto if s[i] == '-' and i != 0: # verifica o sinal negativo temLetras = True; break if s[i] not in ['.', ',', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8','9']: temLetras = True break if not temLetras: numero = float(s) return(numero) else: print("ERRO: Conversão Inválida") return(-1) def INTEIRO(s): n = len(s) temLetras = False for i in range(n): if s[i] == '-' and i != 0: temLetras = True; break if s[i] not in ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8','9']: temLetras = True break if not temLetras: numero = int(s) return(numero) else: 36 print("ERRO: Conversão Inválida") return(-1) s = input("Digite um Real: ") numero = REAL(s) if numero != -1: print("Real digitado foi: ", numero) while numero == -1: s = input("Digite um Real: ") numero = REAL(s) print("Número digitado: ", numero) s = input("Digite um Inteiro: ") numero = INTEIRO(s) if numero != -1: print("Inteiro digitado foi: ", numero) while numero == -1: s = input("Digite um Inteiro: ") numero = INTEIRO(s) print("Número digitado: ", numero) Resultado do Programa: ===== RESTART: /Users/pluzzardi/Desktop/Python/Python/float.py ===== Digite um Real: 1234Paulo ERRO: Conversão Inválida Digite um Real: 123,45 Número digitado: 123.45 Digite um Inteiro: paulo123 ERRO: Conversão Inválida Digite um Inteiro: 123 Número digitado: 123 >>> 22. Criação e utilização de módulos em Python Em Python é possível o programador escrever suas próprias funções dentro de um módulo e inseri-lo em seus programas. O módulo é um arquivo Python (modulo.py) somente com definições de funções. A princípio, este módulo deve estar junto ao programa fonte, ou seja, na mesma localização. #--------------------------------------------------------- Luzzardi.py # O programa testa a conversão de string para float ou inteiro # sem erro na entrada de dados com input # ------------------------------------------------------------------def REAL(s): n = len(s) temLetras = False for i in range(n): if s[i] == ',': s = s.replace(',', '.') # converte vírgula em ponto if s[i] == '-' and i != 0: # verifica sinal negativo temLetras = True; break if s[i] not in ['.', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8','9']: # verifica caracteres não numéricos 37 temLetras = True break if not temLetras: numero = float(s) return(numero) else: print("ERRO: Conversão Inválida") return(-1) # retorna um valor inválido def INTEIRO(s): n = len(s) temLetras = False for i in range(n): if s[i] == '-' and i != 0: temLetras = True; break if s[i] not in ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8','9']: temLetras = True break if not temLetras: numero = int(s) return(numero) else: print("ERRO: Conversão Inválida") return(-1) # ---------------------------------------- Modulo.py import Luzzardi # inserção do módulo do programador s = input("Digite um Real: ") numero = luzzardi.REAL(s) if numero != -1: print("Real digitado foi: ", numero) while numero == -1: s = input("Digite um Real: ") numero = luzzardi.REAL(s) print("Número digitado: ", numero) s = input("Digite um Inteiro: ") numero = luzzardi.INTEIRO(s) if numero != -1: print("Inteiro digitado foi: ", numero) while numero == -1: s = input("Digite um Inteiro: ") numero = luzzardi.INTEIRO(s) print("Número digitado: ", numero) ======= RESTART: /Users/pluzzardi/Desktop/Python/Python/Modulo.py === Digite um Real: 1234Paulo ERRO: Conversão Inválida Digite um Real: 123,45 Número digitado: 123.45 Digite um Inteiro: 123Paulo ERRO: Conversão Inválida Digite um Inteiro: 123 Número digitado: 123 >>> 38 23. Questões de prova A seguir são apresentadas diversas questões de provas. Resolva-as, pois elas servirão como um simulado para treino da linguagem de programação Python. 1. Escreva um programa em Python que lê um nome qualquer via teclado. Logo após a entrada, imprima na tela o nome abreviado e a quantidade de palavras abreviadas, conforme e exatamente igual aos testes abaixo: Teste do programa (1): Nome: Paulo Roberto Gomes Luzzardi <enter> Abreviatura: Paulo R. G. Luzzardi Palavras abreviadas: 2 Teste do programa (2): Nome: adriane maria machado freitas luzzardi <enter> Abreviatura: adriane m. m. f. luzzardi Palavras abreviadas: 3 2. Escreva um programa em Python que lê nomes via teclado. Para cada nome digitado pelo usuário, armazene em uma Lista [f] para feminino, [m] para masculino ou [i] para indeterminado, conforme exemplo abaixo. Ao final imprima a Lista, o total de homens, o total de mulheres e o total de indeterminados. Teste do programa: Nome: Debora <enter> Nome: Carla <enter> Nome: Beatriz <enter> Nome: Paulo <enter> Nome: Renato <enter> Nome: <enter> Lista: [‘m’, ‘m’, ‘i’, ‘f’, 2 homens 2 mulheres 1 indeterminados ‘f’] 3. Escreva um programa em Python que recebe “n” nomes via teclado (até que o usuário digite apenas <enter>). Insira todos os nomes ORDENADOS em uma Lista de Strings (conforme exemplo abaixo). Ao final, o programa deve exibir a Lista contendo os nomes em ordem alfabética. Teste do programa: Nome: Nome: Nome: Nome: Nome: Nome: Debora <enter> Carla <enter> Eva <enter> Beatriz <enter> Ana <enter> <enter> 39 Lista: [‘Ana’, ‘Beatriz’, ‘Carla’, ‘Debora’, ‘Eva’] 4. Escreva um programa em Python que lê um nome via teclado. Logo após a entrada crie uma outra string (invertido) para inverter e exibir este nome na tela e ainda o número de letras do nome (sem contar os espaços) e o total de espaços do nome, conforme exemplo abaixo. Teste do programa: Nome: paulo roberto gomes luzzardi <enter> Invertido: idrazzul semog otrebor oluap Total de Letras: 25 Total de Espaços: 3 5. Escreva um programa em Python que recebe via teclado: valor inicial, valor final e intervalo. O programa deve inserir “n” valores em uma Lista (desde o valor inicial até o valor final levando em consideração o intervalo entre eles, conforme exemplos abaixo. Ao final, o programa deve exibir a Lista criada com estes valores. Teste do programa: Valor Inicial: 10 <enter> Valor Final: 70 <enter> Intervalo: 10 <enter> Lista: [10, 20, 30, 40, 50, 60, 70] Valor Inicial: 60 <enter> Valor Final: 20 <enter> Intervalo: 5 <enter> Lista: [60, 55, 50, 45, 40, 35, 30, 25, 20] 6. Escreva um programa em Python que insere “n” números inteiros em uma Lista (até que o usuário digite zero). Logo após permita a consulta de um valor e então exiba: (a) o antecessor e (b) o sucessor ou Antecessor não existe, Sucessor não existe ou Elemento não Encontrado (exatamente igual aos exemplos abaixo). Teste do programa: Valor: 10 <enter> Valor: 20 <enter> Valor: 30 <enter> Valor: 40 <enter> Valor: 50 <enter> Valor: 0 <enter> Lista: [10, 20, 30, 40, 50] Valor a consultar: 30 <enter> Antecessor: 20 Sucessor: 40 Valor a consultar: 10 <enter> Antecessor não existe Sucessor: 20 Valor a consultar: 60 <enter> 40 Antecessor não existe Erro: Elemento não encontrado Sucessor não existe Valor a consultar: 0 <enter> 7. Escreva um programa em Python que recebe via teclado: número de idades e as referidas idades. O programa deve então imprimir na tela: (a) as idades em ordem crescente; (b) maior idade; (c) menor idade e (d) a média de idades. Teste do programa: Número de Idades: 4 <enter> Idade: 49 <enter> Idade: 51 <enter> Idade: 48 <enter> Idade: 50 <enter> Idades Ordenadas: [48, 49, 50, 51] Maior Idade: 51 Menor Idade: 48 Média de Idades: 49.5 8. Escreva um programa em Python que lê um vetor R de 5 elementos contendo o gabarito da LOTO. A seguir, ler um vetor A de 10 elementos contendo uma aposta. A seguir imprima quantos pontos fez o apostador. Teste do programa: [Entrada] R: 4 12 34 25 17 (gabarito) A: 3 17 55 21 34 4 27 29 20 11 (aposta) [Saída] 3 (pontos) 9. Dada a seguinte tela: Salário Mensal (R$): 900 <enter> Férias (R$): 450 <enter> 13 Salário (R$): 780 <enter> Salário Anual (R$): 12030.00 Alíquota do Imposto de Renda: ISENTO Escreva um programa em Python que recebe via teclado: Salário mensal, valor das férias e 13o salário. O programa deve calcular e imprimir na tela: Salário Anual e a Alíquota do imposto de renda (dada pela tabela abaixo): Salário Mensal Menor ou igual a 1.058,00 Maior que 1.058,00 Maior que 2.700,00 Alíquota do Imposto de Renda Isento 15% 27,5% 41 10. Escreva um programa em Python que lê via teclado, um número inteiro qualquer (positivo ou negativo). O programa deve calcular e imprimir na tela: (a) inverso; (b) quadrado; (c) raiz quadrada e (d) cubo deste número. Teste do programa: Número: 4 <enter> Inverso: 0.25 Quadrado: 16 Raiz Quadrada: 2 Cubo: 64 11. Dada os seguintes exemplos de entrada de dados: a = 1 <enter> b = -4 <enter> c = 2 <enter> a = 1 <enter> b = 2 <enter> c = 3 <enter> Raízes Reais Raízes Complexas x1 = 3.41 x2 = 0.59 x1 = -1.00 + 1.41 i x2 = -1.00 - 1.41 i Escreva um programa em Python que recebe via teclado: os coeficientes a, b e c de uma equação do segundo grau. O programa deve calcular e imprimir na tela: as raízes x1 e x2. a . x2 + b . x + c = 0 # equação de segundo grau Atenção: Note que as raízes podem ser Reais ou Complexas. delta = b2 – 4ac Raízes Reais: +------b +- \/ delta x1,2 = -----------------2.a Raízes Complexas: x1,2 -b = ----- +2.a “delta maior ou igual a zero” +--------\/ | delta | ------------- i “delta menor que zero” 2.a 12. Escreva um programa em Python que lê um conjunto de 10 pares de dados contendo, cada um, a altura e um código para masculino (1) e outro para feminino (2) de uma turma de alunos. Calcular e imprimir na tela: (a) maior e a menor altura da turma e (b) média de altura das mulheres e dos homens e (c) total de homens e total de mulheres. Teste do programa: [Entrada] 42 1.80 (altura) 1 (masculino) 1.60 (altura) 2 (feminino) 1.62 (altura) 1 (masculino) 1.70 (altura) 2 (feminino) 1.72 (altura) 1 (masculino) 1.80 (altura) 2 (feminino) 1.92 (altura) 1 (masculino) 1.40 (altura) 1 (masculino) 1.42 (altura) 1 (masculino) 1.64 (altura) 1 (masculino) [Saída] 1.92 (maior altura da turma) 1.40 (menor altura da turma) 1.70 (média de altura das mulheres 1.65 (média de altura dos homens 7 Homens 3 Mulheres 13. Escreva um programa em Python que recebe via teclado “n” nomes e idades. A entrada dos dados termina quando o usuário digitar 'N' ou 'n' na pergunta "Continua [S/N]?". Logo após a entrada de todos os dados o programa deve imprimir na tela todos os nomes e idades em ordem alfabética (conforme exemplo abaixo). Teste do programa: Nome: Beatriz <enter> Idade: 12 <enter> Continua [S/N]? s <enter> Nome: Carla <enter> Idade: 13 <enter> Continua [S/N]? s <enter> Nome: Debora <enter> Idade: 15 <enter> Continua [S/N]? s <enter> Nome: Ana <enter> Idade: 14 <enter> Continua [S/N]? N <enter> Ana 14 Beatriz 12 Carla 13 Debora 15 14. Escreva um programa em Python que recebe via teclado: valor e quantidade até que o usuário tecle zero (0) no valor. O programa deve inserir ambos valores em uma Lista (conforme exemplo abaixo). Ao final, o programa deve criar e exibir outra Lista (Lista por extenso) contendo todos os valores por extenso (conforme exemplo abaixo) e ainda o total de valores da lista por extenso. Teste do programa: Valor: 10 <enter> Quantidade: 3 <enter> Valor: 20 <enter> 43 Quantidade: 4 <enter> Valor: 30 <enter> Quantidade: 2 <enter> Valor: 0 <enter> Lista: [10, 3, 20, 4, 30, 2] Lista por Extenso: [10, 10, 10, 20, 20, 20, 20, 30, 30] Total de valores por extenso: 9 24. Tratamento de erros (exceções) (em construção e teste) Na execução de um programa em Python, podem ocorrer erros não previstos que podem interromper a execução normal do programa. Tais erros podem ser: • • • • • • • Conversão numérica inválida; Limite de um vetor (acessar um índice inválido) Problemas em arquivos: abertura, criação ou caminho (path); Overflow; Erro de entrada e saída (input/output); Divisão por zero; Validação de dados. Python pode assumir o controle da execução em caso que ocorra uma situação de erro não prevista. Isso é feito através do mecanismo de tratamento de exceções que ao detectar uma situação de erro, o programa em Python gera uma exceção. Se o programa que estiver sendo executado possuir um tratamento de exceções (try: ... except ...:), ele assume o controle da execução. Mas se a exceção não tiver um tratamento associado, o programa é interrompido e é exibida uma mensagem de erro e o programa é abortado. Uma exceção é um evento que indica uma condição anormal que interrompe a execução normal de um programa. O tratamento de erros no Python cria objetos da classe error, o tratamento destes erros é feita pela manipulação destes objetos. Analise o exemplo abaixo, aonde são testados a conversão de string para inteiro (comando input) e raiz quadrada de número negativo (math.sqrt()). Tipo de Exceção: ValueError # -------------------------- ValueError.py import math 44 try: num = int(input("Digite um Número: ")) try: raiz = math.sqrt(num) print("Raiz Quadrada: ", raiz) except ValueError as error: print("Erro: ", error) except ValueError as error: print("Erro: ", error) Teste do Programa: ========== RESTART: /Users/pluzzardi/Documents/ValueError.py ======= Digite um Número: paulo Erro: invalid literal for int() with base 10: 'paulo' >>> ========= RESTART: /Users/pluzzardi/Documents/ValueError.py ======== Digite um Número: -16 Erro: math domain error >>> ======= RESTART: /Users/pluzzardi/Documents/ValueError.py ========= Digite um Número: 16 Raiz Quadrada: 4.0 >>> O tratamento de erros em Python baseia-se no comando try. A sintaxe é a seguinte: try: comando comando except erro: comando comando A execução de um bloco de código, protegido por um tratamento de erros, é feito colocando o bloco no try, e para cada erro que se deseja tratar, deve-se colocar uma cláusula except (tipo_de_erro variável_erro) Exceções são instâncias de classes geradas quando houver erro. Estas exceções podem ser captadas e tratadas para que não ocorra erros em tempo de execução. Tipo de Exceção: ZeroDivisionError # ------------------------------- Zero.py x = float(input("Digite um Valor: ")) y = float(input("Digite outro Valor: ")) try: divisão = x / y print("Divisão é: ", divisão) except ZeroDivisionError as error: print("Erro: ", error) Teste do Programa: 45 ========= RESTART: /Users/pluzzardi/Documents/Zero.py ============ Digite um Valor: 4 Digite outro Valor: 2 Divisão é: 2.0 >>> ============ RESTART: /Users/pluzzardi/Documents/Zero.py =========== Digite um Valor: 4 Digite outro Valor: 0 Erro: float division by zero >>> Tipo de Exceção: NameError e TypeError # ------------------------------------ NameError.py try: num = int(input("Valor: ")) print("Soma: ", soma + num) except NameError as error: print("ERRO: ", error) # soma não está definido # erro por nome try: a = 5 soma = 'a' + print("Soma: except TypeError print("ERRO: a ", soma) as error: ", error) # tipos diferentes # erro por tipo Teste do Programa: ========== RESTART: /Users/pluzzardi/Documents/NameError.py ======== Valor: 5 ERRO: name 'soma' is not defined ERRO: must be str, not int >>> Tipo de Exceção: IndexError # ------------------------- LimiteVetor.py x = [10, 20, 30, 40, 50] n = 5 try: i = 1 while i <= n: # erro i <= n, pois o vetor começa em ZERO print(x[i]) i = i + 1 except IndexError as error: print("Erro: ", error) Teste do Programa: ========= RESTART: /Users/pluzzardi/Documents/LimiteVetor.py ======== 20 30 40 50 Erro: list index out of range 46 >>> Tipo de Exceção: IOError (Arquivos) # ---------------------------------------- FileCria.py nomeArquivo = input("Nome do Arquivo: ") try: file = open(nomeArquivo, 'r') except IOError as error: print("Erro: ", error) else: print("Nome do Arquivo: ", nomeArquivo) file.close() Teste do Programa: ========== RESTART: /Users/pluzzardi/Documents/FileCria.py ======== Nome do Arquivo: Agenda.bd Nome do Arquivo: Agenda.bd >>> ========== RESTART: /Users/pluzzardi/Documents/FileCria.py ========== Nome do Arquivo: test.bd Erro: [Errno 2] No such file or directory: 'test.bd' >>> 25. Banco de Dados em Python (SQLite) A seguir são dados alguns exemplos de programas com Banco de Dados (BD) em Python (SQLiteCriaBD, SQLiteLeBD, SQLiteConsultaBD, SQLiteRemoveBD e SQLiteAppendBD). É criado um banco de dados de uma agenda contendo id (identificador), nome e fone utilizando o módulo SQLite3. SQLiteCriaBD: Cria um banco de dados. SQLiteLeBD: Faz a leitura dos registros do BD criado. SQLiteConsultaBD: Consulta um registro através do id. SQLiteRemoveBD: Remove um registro através do id. SQLiteAppendBD: Anexa novos registros ao final do BD. O programa a seguir cria um BD (Agenda.bd) com uma tabela “agenda” com os seguintes campos: id, nome e fone. # ------------------------ SQLiteCriaBD.py import sqlite3 nomeBD = input("Nome do Banco de Dados: ") conector = sqlite3.connect(nomeBD) cursor = conector.cursor() cursor.execute(''' create table agenda ( id integer, # identificador nome text, fone text) ''') id = 1 47 nome = "Pessoa" while nome != "": print("id: ", id) nome = input("Nome: ") if nome != "": fone = input("Fone: ") cursor.execute(''' insert into agenda (id, nome, fone) values(?, ?, ?) ''', (id, nome, fone)) conector.commit() id = id + 1 cursor.close() conector.close() print("Banco de Dados foi CRIADO: ", nomeBD) Teste do Programa: ====== RESTART: /Users/pluzzardi/Desktop/Python/SQLiteCriaBD.py ===== Nome do Banco de Dados: Agenda.bd id: 1 Nome: Paulo Roberto Fone: 99164-8037 id: 2 Nome: Adriane Maria Fone: 99145-6789 id: 3 Nome: Paola Maria Fone: 98478-7856 id: 4 Nome: Banco de Dados foi CRIADO: Agenda.bd >>> O programa a seguir faz uma leitura dos campos do banco de dados (Agenda.bd) gerado pelo programa anterior. # -------------------------- SQLiteLeBD.py import sqlite3 import os # as lite nomeBD = input("Nome do Banco de Dados: ") try: # tratamento de exceção conector = sqlite3.connect(nomeBD) cursor = conector.cursor() numRegistros = 0 cursor.execute("SELECT * FROM agenda") result = cursor.fetchall() for contato in result: print("id: %d\nNome: %s \nFone: %s" % (contato)) numRegistros += 1 print(numRegistros, "registro(s)") cursor.close() conector.close() except sqlite3.Error as error: # executa quando ocorre um erro print("Erro: BD não encontrado") print("Erro: ", error) os.remove(nomeBD) # remove arquivo criado 48 Teste do Programa: ====== RESTART: /Users/pluzzardi/Desktop/Python/SQLiteLeBD.py ======= Nome do Banco de Dados: Luzzardi.bd id: 1 Nome: Paulo Roberto Fone: 99164-8037 id: 2 Nome: Adriane Maria Fone: 99156-4567 id: 3 Nome: Paola Maria Fone: 98434-1234 3 registro(s) >>> O programa a seguir faz uma consulta dos campos do banco de dados (Agenda.bd) gerados pelo programa anterior através da leitura via teclado do identificador (id). # ------------------------ SQLiteConsultaBD.py import sqlite3, os nomeBD = input("Nome do Banco de Dados: ") try: conector = sqlite3.connect(nomeBD) id = '1' cursor = conector.cursor() while id != '0': id = input('Digite o índice [0 - Sair]: ') if id != '0': cursor.execute("SELECT * FROM agenda WHERE id=?",(id)) result = cursor.fetchall() achei = False for contato in result: print("id: %d\nNome: %s \nFone: %s" % (contato)) achei = True if not achei: print("Erro: Contato não Encontrado") cursor.close() conector.close() except sqlite3.Error as error: print("ERRO: BD não encontrado") print("Erro: ", error) os.remove(nomeBD) # remove arquivo criado Teste do Programa: === RESTART: /Users/pluzzardi/Desktop/Python/SQLiteConsultaBD.py ==== Nome do Banco de Dados: Agenda.bd Digite o índice [0 - Sair]: 1 id: 1 Nome: Paulo Roberto Fone: 99164-8037 Digite o índice [0 - Sair]: 2 id: 2 Nome: Adriane Maria Fone: 99156-4567 Digite o índice [0 - Sair]: 3 id: 3 49 Nome: Paola Maria Fone: 98434-1234 Digite o índice [0 - Sair]: 0 >>> O programa a seguir permite remover os campos do banco de dados (Agenda.bd) gerados pelo programa anterior através da leitura via teclado do identificador (id). # ------------------------ SQLiteRemoveBD.py import sqlite3, os nomeBD = input("Nome do Banco de Dados: ") try: conector = sqlite3.connect(nomeBD) cursor = conector.cursor() id = '1' while id != '0': id = input("Digite o índice [0 - Sair]: ") if id != '0': cursor.execute("DELETE FROM agenda WHERE id=?",(id)) conector.commit() print("Okay, Contato REMOVIDO") cursor.close() conector.close() except sqlite3.Error as error: print("Erro: BD não encontrado") print("Erro: ", error) os.remove(nomeBD) Teste do Programa: ===== RESTART: /Users/pluzzardi/Desktop/Python/SQLiteRemoveBD.py ==== Nome do Banco de Dados: Agenda.bd Digite o índice: 3 Digite o índice: 0 Okay, Contato REMOVIDO >>> ======= RESTART: /Users/pluzzardi/Desktop/Python/SQLiteLeBD.py ===== Nome do Banco de Dados: Agenda.bd id: 1 Nome: Paulo Roberto Fone: 99164-8037 id: 2 Nome: Adriane Maria Fone: 99156-4567 >>> # ------------------------ SQLiteAppendBD.py import sqlite3, os nomeBD = input("Nome do Banco de Dados: ") try: conector = sqlite3.connect(nomeBD) cursor = conector.cursor() id = 1 cursor.execute("SELECT * FROM agenda") result = cursor.fetchall() 50 for contato in result: id += 1 nome = "Pessoa" while nome != "": print("id: ", id) nome = input("Nome: ") if nome != "": fone = input("Fone: ") cursor.execute(''' INSERT INTO agenda (id, nome, fone) values(?, ?, ?) ''', (id, nome, fone)) conector.commit() id = id + 1 cursor.close() conector.close() except sqlite3.Error as error: print("Erro: BD não encontrado") print("Erro: ", error) os.remove(nomeBD) Teste do Programa: ==== RESTART: /Users/pluzzardi/Desktop/Python/SQLiteAppendBD.py ===== Nome do Banco de Dados: Agenda.bd id: 4 Nome: Renato Luis Fone: 99134-2345 id: 5 Nome: Cacaio Fone: 99891-3456 id: 6 Nome: >>> Execução do programa SQLiteLeBD.py ======= RESTART: /Users/pluzzardi/Desktop/Python/SQLiteLeBD.py ===== Nome do Banco de Dados: Agenda.bd id: 1 Nome: Paulo Roberto Fone: 99164-8037 id: 2 Nome: Adriane Maria Fone: 99156-4567 id: 3 Nome: Paola Maria Fone: 98434-1234 id: 4 Nome: Renato Luis Fone: 99134-2345 id: 5 Nome: Cacaio Fone: 99891-3456 5 registro(s) >>> 51 26. Sistema de Arquivos em Python (em construção e teste) Python permite operar com arquivos binários e texto através de algumas funções, tais como: open, write, read, etc. Um arquivo texto é formado de linhas de caracteres terminados com um “\n”. Conforme exemplo abaixo: Sintaxe do comando open: file = open(nomeArquivo, modo) Modo: ‘r’ ‘w’ ‘a’ ‘r+’ ‘b’ read (leitura) write (escrita) append (anexar no fim) read and write (leitura e escrita) binary (binário) Comandos para operar arquivos: read(): Permite ler o conteúdo do arquivo. readline(): Permite ler uma única linha do arquivo. seek(colunas, posição): Posiciona o arquivo no ponto do arquivo: Posição 0 é o início do arquivo, 1 é a posição do arquivo atual e 2 é o final do arquivo. write(string): Grava o conteúdo da string para o arquivo, retornando o número de caracteres escritos. close(): Fecha o arquivo aberto. Arquivo texto: Dados.txt 1;Paulo Roberto;99164-8037; 2;Adriane Maria;99156-2345; 3;Paola Freitas;98678-1234; # ------------------------------- FileLeTexto.py nomeFile = input("Nome do Arquivo: ") try: file = open(nomeFile, "r") for linha in file: campos = linha.split(';') print(campos) file.close() except IOError as error: print("ERRO: ", error) Teste do Programa: ======== RESTART: /Users/pluzzardi/Documents/FileLeTexto.py ====== Nome do Arquivo: Dados.txt ['1', 'Paulo Roberto', '99164-8037', '\n'] ['2', 'Adriane Maria', '99156-2345', '\n'] ['3', 'Paola Freitas', '98678-1234', '\n'] >>> # ------------------------------- FileLeDadosTexto.py 52 nomeFile = input("Nome do Arquivo: ") try: file = open(nomeFile, "r") for linha in file: campos = linha.split(';') print("id: ", campos[0]) print("Nome: ", campos[1]) print("Fone: ", campos[2]) file.close() except IOError as error: print("ERRO: ", error) Teste do Programa: ====== RESTART: /Users/pluzzardi/Documents/FileLeDadosTexto.py ===== Nome do Arquivo: Dados.txt id: 1 Nome: Paulo Roberto Fone: 99164-8037 id: 2 Nome: Adriane Maria Fone: 99156-2345 id: 3 Nome: Paola Freitas Fone: 98678-1234 >>> Teste do Programa: (Arquivo texto não existe) ====== RESTART: /Users/pluzzardi/Documents/FileLeDadosTexto.py ==== Nome do Arquivo: Dados.bd ERRO: [Errno 2] No such file or directory: 'Dados.bd' >>> # -------------------------------------- FileAnexaTexto.py nomeFile = input("Nome do Arquivo: ") try: file = open(nomeFile, 'r') id = 1 for linha in file: id = id + 1 file.close() file = open(nomeFile,'a') # anexando no fim do arquivo nome = "Pessoa" while nome != "": print("id: ", id) nome = input("Nome: ") if nome != "": fone = input("Fone: ") linha = str(id) + ";" + nome + ";" + fone + ";" + "\n" file.write(linha) id = id + 1 file.close() except IOError as error: print("ERRO: ", error) Teste do Programa: ======== RESTART: /Users/pluzzardi/Documents/FileAnexaTexto.py ====== 53 Nome do Arquivo: Dados.txt id: 3 Nome: Renato Luis Fone: 98778-3456 Gravou dados id: 4 Nome: Francisco Carlos Fone: 98178-5678 Gravou dados id: 5 Nome: >>> Listagem do Arquivo alterado: Dados.txt 1;Paulo Roberto;99164-8037; 2;Adriane Maria;99156-2345; 3;Paola Freitas;98678-1234; 4;Renato Luis;98778-3456; 5;Francisco Carlos;98178-5678; # ------------------------------- FileCriaTexto.py nomeFile = input("Nome do Arquivo: ") try: file = open(nomeFile, 'w') # cria arquivo texto id = 1 nome = "Pessoa" while nome != "": print("id: ", id) nome = input("Nome: ") if nome != "": fone = input("Fone: ") linha = str(id) + ";" + nome + ";" + fone + ";" + "\n" file.write(linha) id = id + 1 file.close() except IOError as error: print("ERRO: ", error) Teste do Programa: ======= RESTART: /Users/pluzzardi/Documents/FileCriaTexto.py ====== Nome do Arquivo: Luz.txt id: 1 Nome: Paulo Roberto Fone: 99164-8037 id: 2 Nome: Renato Luis Fone: 98778-3456 id: 3 Nome: Francisco Carlos Fone: 98178-5678 id: 4 Nome: >>> Listagem do Arquivo: Luz.txt 1;Paulo Roberto;99164-8037; 2;Renato Luis; 98778-3456; 54 3;Francisco Carlos; 98178-5678; # ------------------------------- FileProcuraDadosTexto.py nomeFile = input("Nome do Arquivo: ") try: file = open(nomeFile, "r") posicao = 1 while posicao != 0: posicao = int(input("Posição [0 - Sair]: ")) file.seek(0, 0) # reinicializa o cursor do arquivo no início imprimi = False for linha in file: campos = linha.split(';') if campos[0] == str(posicao): imprimi = True print("id: ", campos[0]) print("Nome: ", campos[1]) print("Fone: ", campos[2]) if not imprimi: print("Erro: Registro não encontrado") file.close() except IOError as error: print("ERRO: ", error) Teste do Programa: RESTART: /Users/pluzzardi/Desktop/Python/Python/File/FileProcuraDadosTexto.py Nome do Arquivo: Dados.txt Posição [0 - Sair]: 1 id: 1 Nome: Paulo Roberto Fone: 99164-8037 Posição [0 - Sair]: 2 id: 2 Nome: Adriane Maria Fone: 99156-2345 Posição [0 - Sair]: 3 id: 3 Nome: Paola Freitas Fone: 98678-1234 Posição [0 - Sair]: 4 id: 4 Nome: Renato Luis Fone: 98778-3456 Posição [0 - Sair]: 5 id: 5 Nome: Francisco Carlos Fone: 98178-5678 Posição [0 - Sair]: 6 Erro: Registro não encontrado Posição [0 - Sair]: 7 Erro: Registro não encontrado Posição [0 - Sair]: 8 Erro: Registro não encontrado Posição [0 - Sair]: 9 Erro: Registro não encontrado Posição [0 - Sair]: 0 Erro: Registro não encontrado >>> 55 # ------------------------------- FileBuscaDadosTexto.py nomeFile = input("Nome do Arquivo: ") try: file = open(nomeFile, "r") nome = "Pessoa" while nome != "": nome = input("Nome: ") file.seek(0, 0) imprimiu = False for linha in file: campos = linha.split(';') if nome == campos[1]: imprimiu = True print("id: ", campos[0]) print("Nome: ", campos[1]) print("Fone: ", campos[2]) if not imprimiu: print("Erro: Nome não encontrado") file.close() except IOError as error: print("ERRO: ", error) Teste do Programa: RESTART: /Users/pluzzardi/Desktop/Python/Python/File/FileBuscaDadosTexto.py Nome do Arquivo: Dados.txt Nome: Paulo Erro: Nome não encontrado Nome: Paulo Roberto id: 1 Nome: Paulo Roberto Fone: 99164-8037 Nome: Renato Luis id: 4 Nome: Renato Luis Fone: 98778-3456 Nome: Erro: Nome não encontrado >>> 56