Prévia do material em texto
Python 3.x Variáveis e Expressões Introdução à Ciência da Computação Prof. Edison Ishikawa D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Sumário • Variáveis, expressões e comandos • Valores e tipos • Variáveis • Nomes de variáveis e palavras reservadas • Comandos • Avaliando expressões • Operadores e operandos • Funções de conversão de tipos • Ordem das operações • Operações com strings • Entrada de dados • Composição • O operador módulo D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Valores e Tipos • O valor (por exemplo, letras e números) é uma das coisas fundamentais que um programa manipula. • 2 que é resultado de 1 + 1 é um valor • “Alô, Mundo!” é um valor • Esses valores pertencem a tipos diferentes: • 2 é um inteiro • "Alô, Mundo!" é uma string D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o função type >>> type (“Alô, Mundo!”) <class ‘str’)> >>> type(2) <class ‘int’> Valor Tipo Variáveis • Na matemática variável pode ser entendido como um símbolo que representa uma característica (quantidade, qualidade, magnitude...) que pode possuir vários valores numéricos • Na função f(x) = x +1, a variável x exerce o papel de parâmetro de entrada da função f • Na equação x2 – x + 1 = 0, a variável x exerce o papel de incógnita • Em programação, variável é um objeto (uma posição, frequentemente localizada na memória) capaz de reter e representar um valor ou expressão • Mais a frente, veremos alguns dos papéis que uma variável pode exercer em um programa! D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Variáveis Em Python o comando de atribuição cria novas variáveis e dá a elas valores >>> mensagem = "Sou da UnB?" >>> idade = 18 >>> pi = 3.1415 >>> D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o O símbolo = em Python significa atribuição, ou seja, neste exemplo idade não é igual a 18, mas idade recebe o valor 18 Em Python o símbolo de igualdade é == Variáveis • Uma maneira comum de representar variáveis no papel é escrever o nome delas com uma seta apontando para o valor da variável. Esse tipo de figura é chamado de diagrama de estado porque mostra em que estado cada variável está D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o mensagem idade pi “Sou da UnB” 18 3,1415 Variáveis • A função print também mostra o valor contido nas variáveis D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo >>> print (mensagem) Sou da UnB. >>> print (idade) 21 >>> print (pi) 3.1415 >>> Variáveis • Variáveis também têm tipo. Novamente, podemos perguntar ao interpretador quais são: • O tipo de uma variável é o tipo do valor ao qual ela se refere. D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo: >>> type(mensagem) <class ’str’> >>> type(idade) <class ’int’> >>> type(pi) <class ’float’> Variáveis • Uma variável pode exercer diversos papéis em um programa: D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Papel Descrição Valor fixo Variável que recebe um valor apenas uma vez e este valor não muda depois disto Stepper ou Contador Variável que recebe valores sucessivos e previsíveis, de forma sistemática. Um exemplo de uso é contar quantas vezes o programa já passou por ali Somador Variável que guarda s soma do seu valor atual mais alguma quantidade Guardador do valor mais recente Variável que guarda o último valor encontrado dentre uma sucessão de valores imprevisíveis, ou simplesmente o último valor lido Guardador do valor mais aguardado Variável que guarda o melhor ou mais apropriado valor encontrado (por exemplo o maior valor) Sinalizador de mão única Variável booleana que é inicializada com um valor e pode ser mudada para outro valor, mas nunca retorna ao seu valor inicial uma vez mudado Papel das variáveis • No Tabela do slide anterior, mostramos os papéis mais exercidos por uma variável • Existem muitos outros papéis • Temporária • Variável que guarda um valor por um curto espaço de tempo • Por exemplo, quando valores são rearranjados entre outras variáveis • Organizador • Estrutura de dados para armazenar elementos de tal forma que eles possam ser rearranjados • Container • Estrutura de dados que armazena elementos que podem ser adicionados e removidos • Atravessador • Variável usada para percorrer uma estrutura de dados • Ao longo do curso veremos vários exemplo de como utilizar as variáveis exercendo diferentes papéis D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Se lembram do aluno de ICC com insônia? D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o início ovelhas = 0 acordado=verdadeiro enquanto acordado faça ovelhas = ovelhas + 1 se dormir então acordado = falso fim se fim enquanto fim Contador Sinalizador de mão única Nomes de variáveis e palavras reservadas • Os programadores geralmente escolhem nomes significativos para suas variáveis, pois os nomes documentam para o que a variável é usada. • Nomes de variáveis podem ser arbitrariamente longos. • Eles podem conter tanto letras quanto números, mas têm de começar com uma letra. Embora seja válida a utilização de letras maiúsculas, por convenção, não usamos. Se você o fizer, lembre-se de que maiúsculas e minúsculas são diferentes. • Bruno e bruno são variáveis diferentes. • O caractere para sublinhado ( _ ) pode aparecer em um nome. Ele é muito utilizado em nomes com múltiplas palavras • meu_nome • preco_do_cha_na_china D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Nomes de variáveis e palavras reservadas • Se você der a uma variável um nome inválido, causará um erro de sintaxe • Quais são os erros? D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo: >>> 76trombones = "grande parada" SyntaxError: invalid syntax >>> muito$ = 1000000 SyntaxError: invalid syntax >>> class = "Ciências da Computacao 101" SyntaxError: invalid syntax Nomes de variáveis e palavras reservadas D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o • Python tem 33 palavras reservadas: • Essa lista pode ser obtida através do próprio interpretador Python, com apenas dois comandos: Exemplo >>>import keyword >>>print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif','else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] >>> Nomes de variáveis • “Um programa de computador não é apenas uma lista de comandos e variáveis em uma linguagem de programação para que algum computador o execute! • Ele é mais do que isso, é um novo meio para expressar ideias sobre metodologias! • Portanto, programas tem que ser escritos para as pessoas lerem, e apenas, por acaso, para serem executados por máquinas!” • Abelson et all, 1996 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Nomes de variáveis Adivinhe o que este programa faz! e = 3,1415 n =10 z = e * n ** 2 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Nomes de variáveis Adivinhe o que este programa faz! pi = 3,1415 raio =10 area = pi * raio ** 2 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Não ficou mais fácil! Siga o conselho, escreva programas para seres humanos e, que, por acaso, possam ser executados por máquinas! Comandos • Um comando é uma instrução que o interpretador Python pode executar • Vimos até agora dois tipos de comandos: • de exibição (a chamada da função print) e • de atribuição • Quando você digita um comando na linha de comando, o Python o executa e mostra o resultado, se houver um • O resultado de um comando como a chamada da função print é a exibição de um valor • Comandos de atribuição não produzem um resultado visível D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Comandos • Um script normalmente contém uma sequência de comandos. • Se houver mais de um comando, os resultados aparecerão um de cada vez, conforme cada comando seja executado. • Lembrando que o comando de atribuição não produz saída. D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo: print (1) x = 2 print (2) produz a saída: 1 2 Avaliando expressões • Uma expressão é uma combinação de valores, variáveis e operadores. • Se você digitar uma expressão na linha de comando, o interpretador avalia e exibe o resultado D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo >>> 1 + 1 2 Avaliando Expressões • Embora expressões contenham valores, variáveis e operadores, nem toda expressão contém todos estes elementos. • Um valor por si só é considerado uma expressão, do mesmo modo que uma variável D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo >>> 17 17 >>> x 2 Avaliando expressões • Avaliar uma expressão não é exatamente a mesma coisa que imprimir um valor • Quando Python exibe o valor de uma expressão, usa o mesmo formato que você usaria para entrar com o valor. No caso de strings, isso significa que as aspas são incluídas . Mas o comando print imprime o valor da expressão, que, neste caso, é o conteúdo da string (sem aspas). D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo >>> mensagem = "E aí, aluno?" >>> mensagem ’E aí, aluno?’ >>> print (mensagem) E aí, aluno? Avaliando expressões • Num script, uma expressão sozinha é um comando válido, porém sem efeito • O script do exemplo não produz qualquer saída. • Como você mudaria o “script” para exibir os valores destas quatro expressões? D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo 17 3.2 "Alô, Mundo!" 1 + 1 Operadores e operandos • Operadores são símbolos especiais que representam computações como adição e multiplicação. • Os valores que o operador usa são chamados operandos. • Todas as expressões seguintes são válidas em Python e seus significados são mais ou menos claros D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Operadores e operandos • Em Python, os símbolos +, -, / e o uso de parênteses para agrupamento têm o mesmo significado que em matemática. • O asterisco ( * ) é o símbolo para multiplicação, ** é o símbolo para potenciação e // é o símbolo para divisão inteira. • Quando um nome de variável aparece no lugar de um operando, ele é substituído pelo valor da variável, antes da operação ser executada. D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o 20+32 hora-1 hora*60+minuto minuto/60 minuto//60 5**2 (5+9)*(15-7) Operadores e operandos • Adição, subtração, multiplicação e potenciação fazem o que se espera: quando todos os operandos são inteiros, o resultado da operação é um valor inteiro. Já na divisão... • O valor de minuto é 59 e, em aritmética convencional (/), 59 dividido por 60 é 0,98333. Já a divisão inteira (//) de 59 por 60 é 0. D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo >>> minuto = 59 >>> minuto/60 0.98333333333333328 >>> minuto = 59 >>> minuto//60 0 Funções de conversão de tipos • As funções int, float e str convertem seus argumentos nos tipos int, float e str respectivamente D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplos com int >>>int(3.14) 3 >>>int(3.9999) 3 >>>int(3.0) 3 >>>int(-3.9999) -3 >>>int(“2345”) 2345 >>>int(19) 19 >>>int(“23 ovos”) Exemplos com float >>>float(17) 17.0 >>>float(“17.25”) 17.25 Exemplos com str >>>str(17) ‘17’ >>>str(123.45) ‘123.45’ Não arredonda para o inteiro mais próximo! Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> int("23 garrafas") ValueError: invalid literal for int() with base 10: '23 ovos' Note que o resultado é perto de zero! Erro! Ordem das operações • Quando mais de uma operação aparece em uma expressão, a ordem de avaliação depende das regras de precedência. • Python segue as mesmas regras de precedência para suas operações matemáticas que a matemática. • O acrônimo PEMDAS é uma maneira prática de lembrar a ordem das operações: D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o PEMDAS • P: Parênteses têm a mais alta precedência e podem ser usados para forçar uma expressão a ser avaliada na ordem que você quiser. Já que expressões entre parênteses são avaliadas primeiro, 2 * (3-1) é 4, e (1+1)**(5-2) é 8. Você também pode usar parênteses para tornar uma expressão mais fácil de ler, como em (minuto * 100) / 60, ainda que issonão altere o resultado. • E: Exponenciação ou potenciação tem a próxima precedência mais alta, assim 2**1+1 é 3 e não 4, e 3*1**3 é 3 e não 27. • MDAS: Multiplicação e Divisão têm a mesma precedência, que é mais alta do que a da Adição e da Subtração, que também têm a mesma precedência. Assim 2*3-1 dá 5 em vez de 4, e 2/3-1 é -1, não 1 (lembre-se de que na divisão inteira, 2/3=0). D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o PEMDAS • Operadores com a mesma precedência são avaliados pela regra esquerda para a direita. Assim, na expressão minuto*100/60, a multiplicação acontece primeiro, resultando em 5900/60, o que se transforma produzindo 98. Se as operações tivessem sido avaliadas da direita para a esquerda, o resultado poderia ter sido 59*1, que é 59, que está errado. • Devido a alguma incoerência histórica, uma exceção à regra de associatividade-à-esquerda da-esquerda-para- direita é o da operação de exponenciação **. • Dica: sempre use parênteses para forçar a ordem exata que você quer que a exponenciação seja executada D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo: >>> 2 ** 3 ** 2 # A operação ** mais à direita foi feita primeiro 512 >>> (2 ** 3) ** 2 # Use parêntese para forçar a ordem que você quer! 64 Operações com strings • De maneira geral, você não pode executar operações matemáticas em strings, ainda que as strings se pareçam com números. O que segue é inválido (assumindo que mensagem é do tipo string) D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplos inválidos – supondo mensagem do tipo str mensagem-1 "Alô"/123 mensagem*"Alô" "15"+2 Operações com strings • Interessante é o operador +, que funciona com strings, embora ele não faça exatamente o que você poderia esperar. • Para strings, o operador + representa concatenação, que significa juntar os dois operandos ligando-os pelos extremos. D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo >>>fruta = "banana" >>>assada = " com canela" >>>print (fruta + assada) banana com canela Operações com strings • O operador * também funciona com strings; ele realiza repetição. • Um dos operadores tem que ser uma string; o outro tem que ser um inteiro. D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo >>> "Legal"*3 'LegalLegalLegal' Operações com strings • Por um lado, esta interpretação de + e * faz sentido pela analogia entre adição e multiplicação. • Assim como 4*3 equivale a 4+4+4, não é de estranhar que "Legal"*3 seja o mesmo que “Legal"+"Legal"+"Legal". D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Entrada de dados • Existe uma função no Python para receber dados do usuário • O usuário do programa digita seu nome e tecla <enter> • O texto digitado (str) é retornado pela função input( ) e é atribuído à variável nome • Se você digitar sua idade, a variável nome terá o valor “17”. Se o seu objetivo é receber valores inteiros ou reais use as funções de conversão de tipo D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o nome = input(“Por favor digite seu nome: “) Entrada de dados • Lendo dois números inteiros em uma linha D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo x, y = input().split() x = int(x) y = int(y) Composição • Uma das características mais práticas das linguagens de programação é a possibilidade de pegar pequenos blocos e combiná-los numa composição. Por exemplo, nós sabemos como somar números e sabemos como exibi-los; acontece que podemos fazer as duas coisas ao mesmo tempo D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo: >>> print (17 + 3) 20 Composição • Na realidade, a soma tem que acontecer antes da impressão, assim, as ações não estão na realidade acontecendo ao mesmo tempo. • O ponto é que qualquer expressão envolvendo números, strings, e variáveis pode ser usada dentro de uma chamada da função print. • Esta possibilidade pode não parecer muito impressionante agora, mas você verá outros exemplos em que a composição torna possível expressar cálculos e tarefas complexas de modo limpo e conciso D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo print ("Número de minutos desde a meia-noite: ", hora*60+minuto) Composição • Mas não exagere no seu uso. Seu programa pode ficar difícil de ser entendido por um ser humano D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o resposta = input(“Qual é o raio?”) r = float (resposta) area = 3.14159 * r**2 print(“A área é: “, area) r = float (input(“Qual é o raio?”) ) area = 3.14159 * r**2 print(“A área é: “, area) print(“A área é: “, 3.14159 * float (input(“Qual é o raio?”) ) **2) Composição • Atenção: • Existem limites quanto ao lugar onde você pode usar certos tipos de expressão. • Por exemplo, o lado esquerdo de um comando de atribuição tem que ser um nome de variável, e não uma expressão. D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo não válido! minuto+1 = hora. A operação módulo • A operação módulo opera sobre inteiros ( e expressões inteiras) e retorna o resto da divisão do primeiro número pelo segundo • Em Python o operador módulo é o símbolo de percentagem (%) D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo >>> q = 7 // 3 # este é o operador da divisão inteira >>>print(q) 2 >>> r = 7 % 3 >>> print(r) 1 A operação módulo • O operador módulo é muito útil !!! • Serve para verificar se um número é divisível por outro • Se x % y é zero, então x é divisível por y • Pergunta: • Como descobrir se um número é par? • E ímpar? D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o A operação módulo • Serve também para extrair o dígito mais a direita ou dígitos de um número • Por exemplo, x % 10 retorna o dígito mais a direita de x (na base 10) • Da mesma forma x % 100 retorna os dois dígitos mais à direita D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o A operação % e // • Também são muito úteis para fazer conversões • Por exemplo de segundos para dias, horas, minutos e segundo • Exemplo: • Quando o noticiário fala em superfaturamento de milhões de reais ou bilhões de reais muitas pessoas só acham que é muito dinheiro, mas não tem o sentimento da diferença entre milhão e bilhão • Para mostrar isso é fácil. Ao invés de usar reaisvamos usar segundos e fazer um programa que transforma segundos em dias ou anos D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o A operação % e // Exemplo: 1 milhão de segundos >>>milhao_de_segundos = 1000000 >>>horas = milhao_de_segundos // 3600 >>>segundos_ainda_restantes = milhao_de_segundos % 3600 >>>minutos = segundos_ainda_restantes // 60 >>>segundo_restantes_finais = segundos_ainda_restantes % 60 >>>dias = horas // 24 >>> horas_restantes = horas % 24 >>>print(“Dias=“, dias, “ horas=”, horas_restantes, “ minutos=”, minutos, “ segundos=”, segundo_restantes_finais) Dias= 11 horas= 13 minutos= 46 segundos= 40 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o A operação % e // Exemplo: 1 bilhão de segundos >>>bilhao_de_segundos = 1000000000 >>>horas = bilhao_de_segundos // 3600 >>>segundos_ainda_restantes = bilhao_de_segundos % 3600 >>>minutos = segundos_ainda_restantes // 60 >>>segundo_restantes_finais = segundos_ainda_restantes % 60 >>>dias = horas // 24 >>> horas_restantes = horas % 24 >>>anos = dias // 365 >>>dias_ainda_restantes = dias % 365 >>>meses = dias_ainda_restantes // 30 >>>dias_restantes_finais = dias_ainda_restantes % 30 >>>print(“Anos=“ , anos, “ meses=“, meses, “ dias=“, dias_restantes_finais, “ horas=”, horas_restantes, “ minutos=”, minutos, “ segundos=”, segundo_restantes_finais) Anos= 31 meses= 8 dias= 19 horas= 1 minutos= 46 segundos= 40 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo: Média Aritmética • Enunciado • Leia dois números inteiros, calcule a média aritmética e imprima o resultado. • Entrada • 2 números inteiros por linha • Saída • A média aritmética D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Exemplo de entrada Exemplo de saída 1 1 1.0 1 2 1.5 Exemplo Exemplo a, b = input().split() a, b = int(a), int(b) media = (a+b)/2 print(media) 1 2 1.5 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Bibliografia • How to Think Like a Computer Scientist: Learning with Python 3 – Documentation - Release 3rd Edition • Peter Wentworth, Jeffrey Elkner,Allen B. Downey and Chris Meyers • Apr 26, 2017 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o