Estruturas de Informação I - Aula 1 Python! e rápido! João Araujo Ribeiro [email protected] Universidade do Estado do Rio de Janeiro Departamento de Engenharia de Sistemas e Computação João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 1 / 60 Resumo 1 EI01 - Python João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 2 / 60 EI01 - Python Aula - Python Nesta aula vamos ver as principais características de um programa Python, sem nos aprofundarmos. O aluno deve pegar outras referências para ter um melhor entendimento da linguagem Os programas que implementam podem ser escritos em qualquer linguagem, mas vamos priorizar soluções em Python. Essa aula foi baseada no curso online de Zed Shaw: http://learnpythonthehardway.org/book/ João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 3 / 60 EI01 - Python Conselhos Use um editor simples (gedit, geany, notepad) Digite tudo, não copie/cole Vamos usar python 2 (versão 2.7). Não use python 3! João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 4 / 60 EI01 - Python Primeiro Programa Digite o seguinte programa e salve como hello.py : # coding=UTF-8 print "Hello World!" 3 print "Hello de novo" 4 print "Eu gosto de digitar aqui." 5 print "Isto é divertido." 6 print Uau! Imprimindo. 7 print "Posso usar aspas simples ." 8 print Mas se quiser usar "aspas duplas" também posso. Para executar, vá até o diretório onde salvou o programa e digite: python hello.py 1 2 João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 5 / 60 EI01 - Python Saída de hello.py python hello.py Hello World! Hello de novo Eu gosto de digitar aqui. Isto é divertido. Uau! Imprimindo. Posso usar 'aspas simples' . Mas se quiser usar "aspas duplas" também posso. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 6 / 60 EI01 - Python Comentários Digite o seguinte programa e salve como ex02.py: 1 2 3 # coding=UTF-8 # Um comentário serve para você ler seu programa depois. # Qualquer coisa após # é ignorado por python. 4 5 6 print "Eu poderia codificar assim." # e o comentário # após é ignorado 7 8 9 10 # Você também pode usar um comentário para "desabilitar" # ou comentar um pedaço do código: # print "Isto não vai executar." 11 12 print "Isto vai executar." Para executar, vá até o diretório onde salvou o programa e digite: python ex02.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 7 / 60 EI01 - Python Números e matemática (ex03.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # coding=UTF-8 print "Eu vou contar minhas galinhas:" print "Pintadas", 25 + 30 / 6 print "Assadas", 100 - 25 * 3 % 4 print "Agora vou contar os ovos:" print 3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 print "É verdade que 3 + 2 < 5 - 7?" print 3 + 2 < 5 - 7 print "Qual o valor de 3 + 2?", 3 + 2 print "Qual o valor de 5 - 7?", 5 - 7 print "Oh, por isso é False." print print print print "Que tal mais" "É maior?", 5 > -2 "É maior ou igual?", 5 >= -2 "É menor ou igual?", 5 <= -2 João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 8 / 60 EI01 - Python Saída de ex03.py $python ex03.py Eu vou contar minhas galinhas: Pintadas 30 Assadas 97 Agora vou contar os ovos: 7 É verdade que 3 + 2 < 5 - 7? False Qual o valor de 3 + 2? 5 Qual o valor de 5 - 7? -2 Oh, por isso é False. Que tal mais É maior? True É maior ou igual? True É menor ou igual? False João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 9 / 60 EI01 - Python Como funciona o '%' ? O caractere '%' não é porcentagem. É o resto da divisão inteira, ou seja, outra forma de dizer. Pegue X, divida por Y e que com o resto da divisão inteira. Por exemplo, 20 % 3, tem como resultado 2, pois 20 dividido por 3 dá 6 e resta 2. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 10 / 60 EI01 - Python Qual a ordem das operações? Podemos usar o acrônimo PEMDAS que dá a ordem: Parentêsis, Exponenciação, Multiplicação, Divisão, Adição e Subtração, que é a ordem que Python segue. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 11 / 60 EI01 - Python E a divisão, arredonda? A divisão não faz arredondamento, ela simplesmente trunca o resultado. Para obter um resultado em ponto utuante, escreva pelo menos um dos números com ponto decimal: 20.0/3 ou 20/3.0 ou 20.0/3.0 João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 12 / 60 EI01 - Python Variáveis e nomes (ex04.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # coding=UTF-8 carros = 100 espaco_em_um_carro = 4.0 pilotos = 30 passageiros = 90 carros_sem_piloto = carros - pilotos carros_pilotados = pilotos capacidade_dos_carros = carros_pilotados * espaco_em_um_carro media_de_passageiros_por_carro = passageiros / carros_pilotados print print print print print print "Existem", carros, "carros disponíveis." "Existem somente", pilotos, "pilotos disponíveis." "vamos ter", carros_sem_piloto, "carros vazios hoje." "Podemos transportar", capacidade_dos_carros, "pessoas hoje." "Temos", passageiros, "Para transportar hoje" "Temos que colocar", media_de_passageiros_por_carro, "em cada carro." João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 13 / 60 EI01 - Python Saída de ex04.py $python ex04.py Existem 100 carros disponíveis. Existem somente 30 pilotos disponíveis. vamos ter 70 carros vazios hoje. Podemos transportar 120.0 pessoas hoje. Temos 90 Para transportar hoje Temos que colocar 3 em cada carro. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 14 / 60 EI01 - Python Qual a diferença entre = e ==? O = atribui o valor da direita a uma variável à esquerda. O == testa se duas coisas têm o mesmo valor João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 15 / 60 EI01 - Python Variáveis e nomes (ex05.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # coding=UTF-8 meu_nome = Zed A. Shaw minha_idade = 35 # não minto minha_altura = 174 # cm meu_peso = 80 # kg meus_olhos = Azuis meus_dentes = Brancos meu_cabelo = Castanho print print print print print "Vamos falar sobre %s." % meu_nome "Ele tem %d cm de altura." % minha_altura "Ele pesa %d quilos." % meu_peso "Ele possui olhos %s e cabelos %s." % (meus_olhos, meu_cabelo) "Seus dentes são normalmente %s, dependendo do café." % meus_dentes # Esta linha é problemática, tente escrevê-la como está print "Se eu somo %d, %d, e %d obtenho %d." % ( minha_idade, minha_altura, meu_peso, minha_idade + minha_altura + meu_peso) João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 16 / 60 EI01 - Python Saída de ex05.py $python ex05.py Vamos falar sobre Zed A. Shaw. Ele tem 174 cm de altura. Ele pesa 80 quilos. Ele possui olhos Azuis e cabelos Castanho. Seus dentes são normalmente Brancos, dependendo do café. Se eu somo 35, 174, e 80 obtenho 289. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 17 / 60 EI01 - Python Strings e textos (ex06.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # coding=UTF-8 x = "Existem %d tipos de pessoas." % 10 binario= "binário" nao = "não" y = "Aquelas que sabem %s e aquelas que %s sabem." % (binario, nao) print x print y print "Eu digo: %r." % x print "Eu também digo: %s." % y hilario = False avaliacao_da_piada = "Essa piada não é engraçada?! %r" print avaliacao_da_piada % hilario w = "Este é o lado esquerdo de..." e = "uma string com um lado direito." print w + e João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 18 / 60 EI01 - Python Saída de ex06.py $python ex06.py Existem 10 tipos de pessoas. Aquelas que sabem binário e aquelas que não sabem. Eu digo: 'Existem 10 tipos de pessoas.'. Eu também digo: 'Aquelas que sabem binário e aquelas que não sabem.'. Essa piada não é engraçada?! False Este é o lado esquerdo de...uma string com um lado direito. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 19 / 60 EI01 - Python Strings e textos (ex07.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # coding=UTF-8 print "Batatinha quando nasce" print "se esparrama pelo %s." % chão print "." * 10 # o que isso faz? end1 = "C" end2 = "h" end3 = "e" end4 = "e" end5 = "s" end6 = "e" end7 = "B" end8 = "u" end9 = "r" end10 = "g" end11 = "e" end12 = "r" # repare a vírgula no final. Tente removê-la e veja o que acontece print end1 + end2 + end3 + end4 + end5 + end6, print end7 + end8 + end9 + end10 + end11 + end12 João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 20 / 60 EI01 - Python Saída de ex07.py $python ex07.py Batatinha quando nasce se esparrama pelo chão. .......... Cheese Burger João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 21 / 60 EI01 - Python Imprimindo mais (ex08.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 # coding=UTF-8 formatador = "%r %r %r %r" print formatador % (1, 2, 3, 4) print formatador % ("um", "dois", "três", "quatro") print formatador % (True, False, False, True) print formatador % (formatador, formatador, formatador, formatador) print formatador % ( "O todo sem a parte, não é todo.", "É parte.", "A parte sem o todo, não é parte.", "É todo." ) João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 22 / 60 EI01 - Python Saída de ex08.py $python ex07.py 1 2 3 4 'um' 'dois' 'tr\xc3\xaas' 'quatro' True False False True '%r %r %r %r' '%r %r %r %r' '%r %r %r %r' '%r %r %r %r' 'O todo sem a parte, n\xc3\xa3o \xc3\xa9 todo. ' '\xc3\x89 parte.' 'A parte sem o todo, n\xc3\xa3o \xc3\xa9 parte.' '\xc3\x89 todo.' substituindo %r por %s, obtemos 1 2 3 4 um dois três quatro True False False True %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s O todo sem a parte, não é todo. É parte. A parte sem o todo, não é parte. É todo. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 23 / 60 EI01 - Python Imprimindo mais (ex09.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # coding=UTF-8 # Aqui temos algo estranho, lembre de digitar exatamente. dias = "Seg Ter Qua Qui Sex Sab Dom" meses = "Jan\nFev\nMar\nAbr\nMai\nJun\nJul\nAgo" print "Eis os dias: ", dias print "Eis os meses: ", meses print """ Algo está acontecendo aqui. Com as três aspas. Somos capazes de digitar tanto quanto quisermos. Mesmo 4 ou 5, 6 linhas.... """ João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 24 / 60 EI01 - Python Saída de ex09.py Eis os dias: Seg Ter Qua Qui Sex Sab Dom Eis os meses: Jan Fev Mar Abr Mai Jun Jul Ago Algo está acontecendo aqui. Com as três aspas. Somo capazes de digitar tanto quanto quisermos. Mesmo 4 ou 5, 6 linhas.... João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 25 / 60 EI01 - Python Imprimindo mais (ex10.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # coding=UTF-8 gato_tabulado = "\tTenho tabulação." gato_persa = "Sou uma divisão\nem uma linha." gato_backslash = "Eu sou \\ um \\ gato." gato_gordo = """ Vou fazer uma lista: \t* Comida de gato \t* Peixes \t* Brinquedo\n\t* Grama """ print print print print gato_tabulado gato_persa gato_backslash gato_gordo João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 26 / 60 EI01 - Python Saída de ex10.py Tenho tabulação. Sou uma divisão em uma linha. Eu sou \ um \ gato. Vou fazer uma lista: * Comida de gato * Peixes * Brinquedo * Grama João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 27 / 60 EI01 - Python Sequências de escape \begin{verbatim} \\ Backslash () \' aspas simpes (') \" aspas duplas (") \a ASCII bell (BEL) \b ASCII backspace (BS) \f ASCII formfeed (FF) \n ASCII linefeed (LF) \N{name} caractere com nome no Unicode \r ASCII Carriage Return (CR) \t ASCII Horizontal Tab (TAB) \uxxxx Caractere com 16-bits no valor hexa unicode \Uxxxxxxxx Caractere com 32-bits no valor hexa unicode \v ASCII vertical tab (VT) \ooo caractere com valor octal ooo \xhh caractere com valor hexa hh João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 28 / 60 EI01 - Python Tente isso (ex10a.py) 1 2 3 while True: for i in ["/","-","|","\\","|"]: print "%s\r" % i, João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 29 / 60 EI01 - Python Perguntando coisas (ex11.py) 1 2 3 4 5 6 7 8 9 10 # coding=UTF-8 print "Qual a sua idade?", idade = raw_input() print "Qual a sua altura?", altura = raw_input() print "Qual seu peso?", peso = raw_input() print "Então, você tem %r anos, possui %r cm e %r quilos." % ( idade, altura, peso) João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 30 / 60 EI01 - Python Saída de ex11.py Qual a sua idade? 50 Qual a sua altura? 186 Qual seu peso? 86 João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 31 / 60 EI01 - Python Outra forma (ex12.py) 1 2 3 4 5 6 7 # coding=UTF-8 idade = raw_input("Qual a sua idade? ") altura = raw_input("Qual a sua altura? ") peso = raw_input("Quanto você pesa? ") print "Então, você tem %r anos, possui %r cm e %r quilos." % ( idade, altura, peso) João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 32 / 60 EI01 - Python Parâmetros, desempacotar, variáveis (ex13.py) 1 2 3 4 5 6 7 8 9 # coding=UTF-8 from sys import argv script, primeiro, segundo, terceiro = argv print print print print "O script se chama:", script "Sua primeira variável é:", primeiro "Sua segunda variável é:", segundo "Sua terceira variável é:", terceiro Chame com python ex13.py um dois três João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 33 / 60 EI01 - Python Saída de ex13.py um dois três python ex13.py um dois três O script se chama: ex13.py Sua primeira variável é: um Sua segunda variável é: dois Sua terceira variável é: três João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 34 / 60 EI01 - Python Prompt e argumento (ex14.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # coding=UTF-8 from sys import argv script, user_name = argv prompt = > print print print likes "Olá %s, eu sou o script %s." % (user_name, script) "Gostaria de te fazer algumas perguntas." "Você gosta de mim, %s?" % user_name = raw_input(prompt) print "Onde você mora %s?" % user_name moradia = raw_input(prompt) print "Qual é o tipo do seu computador?" computador = raw_input(prompt) print """ Bom, então você respondeu %r sobre gostar de mim. Você mora em %r. E você tem um computador %r. """ % (likes, moradia, computador) Chame com python ex14.py seu_nome João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 35 / 60 EI01 - Python Saída de ex14.py python ex14.py João Olá João, eu sou o script ex14.py. Gostaria de te fazer algumas perguntas. Você gosta de mim, João? > Sim Onde você mora João? > Rio Qual é o tipo do seu computador? > PC Bom, então você respondeu 'Sim' sobre gostar de mim. Você mora em 'Rio'. E você tem um computador 'PC'. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 36 / 60 EI01 - Python Lendo arquivos (ex15.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # coding=UTF-8 from sys import argv script, filename = argv txt = open(filename) print "Aqui está seu arquivo %r:" % filename print txt.read() print "Digite o nome do arquivo novamente:" arquivo_novamente = raw_input("> ") txt_novamente = open(arquivo_novamente) print txt_novamente.read() Antes de executar ex15.py, crie um arquivo ex15.txt João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 37 / 60 EI01 - Python Lendo arquivos (ex15.txt) Crie um arquivo ex15.txt com o seguinte conteúdo: Rua torta Lua morta Tua porta Chame com python ex15.py ex15.txt João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 38 / 60 EI01 - Python Saída de ex15.py python ex15.py ex15.txt Aqui está seu arquivo 'ex15.txt': Rua torta Lua morta Tua porta Digite o nome do arquivo novamente: > ex15.txt Rua torta Lua morta Tua porta João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 39 / 60 EI01 - Python Lendo e escrevendo (ex16.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # coding=UTF-8 from sys import argv script, filename = argv print "Vamos zerar %r." % filename print "Se você não quiser isso, digite CTRL-C (^C)." print "Se você quiser mesmo, digite RETURN." raw_input("?") print "Abrindo um arquivo..." alvo = open(filename, w) print "Truncando o arquivo. Goodbye!" alvo.truncate() print "Agora, vou questionar." linha1 = raw_input("linha 1: ") linha2 = raw_input("linha 2: ") linha3 = raw_input("linha 3: ") print "Vou escrever isso no arquivo." alvo.write(linha1) alvo.write("\n") alvo.write(linha2) alvo.write("\n") alvo.write(linha3) alvo.write("\n") print "E finalmente, fechamos." alvo.close() Chame com python ex16.py ex16.txt João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 40 / 60 EI01 - Python Saída de ex16.py python ex16.py ex16.txt Vamos zerar 'ex16.txt'. Se você não quiser isso, digite CTRL-C (^C). Se você quiser mesmo, digite RETURN. ? Abrindo um arquivo... Truncando o arquivo. Goodbye! Agora, vou questionar. linha 1: Lua Morta linha 2: Rua torta linha 3: tua porta Vou escrever isso no arquivo. E finalmente, fechamos. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 41 / 60 EI01 - Python Comandos close Fecha um arquivo. Como Arquivo->Salvar.. no seu editor. read Lê o conteúdo de um arquivo. Você pode atribuir o resultado a uma variável. readline Lê apenas uma linha do texto. truncate Esvazia um arquivo. Cuidado! write('algo') Escreve "algo"num arquivo. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 42 / 60 EI01 - Python Mais arquivos (ex17.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # coding=UTF-8 from sys import argv from os.path import exists script, from_file, to_file = argv print "Copiando de %s para %s" % (from_file, to_file) # podemos fundir as próximas linhas em 1, como? in_file = open(from_file) indata = in_file.read() print "O arquivo de entrada tem %d bytes" % len(indata) print "O arquivo de saída existe? %r" % exists(to_file) print "Pronto, pressione RETURN para continuar, CTRL-C para abortar." raw_input() out_file = open(to_file, w) out_file.write(indata) print "Finalmente, tudo feito." out_file.close() in_file.close() Chame com python ex17.py ex17.txt ex17a.txt João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 43 / 60 EI01 - Python Saída de ex17.py python ex17.py ex17.txt ex17b.txt Copiando de ex17.txt para ex17b.txt O arquivo de entrada tem 30 bytes O arquivo de saída existe? False Pronto, pressione RETURN para continuar, CTRL-C para abortar. Finalmente, tudo feito. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 44 / 60 EI01 - Python Nomes, variáveis, código e funções (ex18.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # coding=UTF-8 # este é como seus exercícios com argv def print_two(*args): arg1, arg2 = args print "arg1: %r, arg2: %r" % (arg1, arg2) # ok, este *args realmente não é um ponteiroi def print_two_again(arg1, arg2): print "arg1: %r, arg2: %r" % (arg1, arg2) # este pede apenas um argumento def print_one(arg1): print "arg1: %r" % arg1 # este não pede nenhum argumento def print_none(): print "Eu sou nada." print_two("Zed","Shaw") print_two_again("Zed","Shaw") print_one("Primeiro!") print_none() Chame com python ex18.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 45 / 60 EI01 - Python Saída de ex18.py python ex18.py arg1: 'Zed', arg2: 'Shaw' arg1: 'Zed', arg2: 'Shaw' arg1: 'Primeiro!' Eu sou nada. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 46 / 60 EI01 - Python Funções e variáveis(ex19.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # coding=UTF-8 def queijos_e_biscoitos(contador_queijo, caixa_de_biscoitos): print "Você tem %d queijos!" % contador_queijo print "Você tem %d caixas de biscoito" % caixa_de_biscoitos print "Isso é bastante!" print "Pegue um pouco.\n" print "Podemos dar os números diretamente:" queijos_e_biscoitos(20, 30) print "OU, podemos usar variáveis do nosso script:" quantidade_de_queijos= 10 quantidade_de_biscoitos = 50 queijos_e_biscoitos(quantidade_de_queijos, quantidade_de_biscoitos) print "Podemos inclusive fazer alguma matemática:" queijos_e_biscoitos(10 + 20, 5 + 6) print "E podemos também combinar tudo:" queijos_e_biscoitos(quantidade_de_queijos + 100, quantidade_de_biscoitos + 1000) Chame com python ex19.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 47 / 60 EI01 - Python Saída de ex19.py python ex19.py Podemos dar os números diretamente: Você tem 20 queijos! Você tem 30 caixas de biscoito Isso é bastante! Pegue um pouco. OU, podemos usar variáveis do nosso script: Você tem 10 queijos! Você tem 50 caixas de biscoito Isso é bastante! Pegue um pouco. Podemos inclusive fazer alguma matemática: Você tem 30 queijos! Você tem 11 caixas de biscoito Isso é bastante! Pegue um pouco. E podemos também combinar tudo: Você tem 110 queijos! Você tem 1050 caixas de biscoito Isso é bastante! Pegue um pouco. João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 48 / 60 EI01 - Python Funções e arquivos(ex20.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # coding=UTF-8 from sys import argv script, input_file = argv def print_all(f): print f.read() def rewind(f): f.seek(0) def print_a_line(line_count, f): print line_count, f.readline() current_file = open(input_file) print "Primeiro imprimimos o arquivo completo:\n" print_all(current_file) print "vamos rebobinar, como uma fita." rewind(current_file) print "vamos imprimir 3 linhas:" current_line = 1 print_a_line(current_line, current_file) current_line = current_line + 1 print_a_line(current_line, current_file) current_line += 1 print_a_line(current_line, current_file) Chame com python ex20.py ex20.txt João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 49 / 60 EI01 - Python Saída de ex20.py ex20.txt python ex20.py ex20.txt Primeiro imprimimos o arquivo completo: Lua Morta Rua torta tua porta vamos rebobinar, como uma fita. vamos imprimir 3 linhas: 1 Lua Morta 2 Rua torta 3 tua porta João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 50 / 60 EI01 - Python Funções que retornam resultados(ex21.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # coding=UTF-8 def soma(a, b): print "SOMANDO %d + %d" % (a, b) return a + b def subtrai(a, b): print "SUBTRAINDO %d - %d" % (a, b) return a - b def multiplica(a, b): print "MULTIPLICANDO %d * %d" % (a, b) return a * b def divide(a, b): print "DIVIDINDO %d / %d" % (a, b) return a / b print "Vamos fazer alguns cálculos !" idade = soma(30, 5) altura = subtrai(78, 4) peso = multiplica(90, 2) qi = divide(100, 2) print "Idade: %d, Altura: %d, Peso: %d, QI: %d" % (idade, altura, peso, qi) # Um quebra-cabeça com algum crédito. print "Aqui está o quebra-cabeças." oque = soma(idade, subtrai(altura, multiplica(peso, divide(qi, 2)))) print "Isso resulta: ", oque, "Você pode refazer na mão" Chame com python ex21.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 51 / 60 EI01 - Python Saída de ex21.py python ex21.py Vamos fazer alguns cálculos ! SOMANDO 30 + 5 SUBTRAINDO 78 - 4 MULTIPLICANDO 90 * 2 DIVIDINDO 100 / 2 Idade: 35, Altura: 74, Peso: 180, QI: 50 Aqui está o quebra-cabeças. DIVIDINDO 50 / 2 MULTIPLICANDO 180 * 25 SUBTRAINDO 74 - 4500 SOMANDO 35 + -4426 Isso resulta: -4391 Você pode refazer na mão João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 52 / 60 EI01 - Python If(ex29.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # coding=UTF-8 pessoas = 20 gatos = 30 cachorros = 15 if pessoas < gatos: print "Gatos demais! O mundo está condenado" if pessoas > gatos: print "Não muitos gatos! O mundo está salvo" if pessoas < cachorros: print "O mundo está inundado!" if pessoas > cachorros: print "O mundo está seco!" cachorros += 5 if pessoas >= cachorros: print "Pessoas são mais numerosas que ou iguais a cachorros." if pessoas <= cachorros: print "Pessoas são menos numerosas que ou iguais a cachorros." if pessoas == cachorros: print "Pessoas são cachorros." Chame com python ex29.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 53 / 60 EI01 - Python If e else(ex30.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # coding=UTF-8 pessoas = 30 carros = 40 caminhao = 15 if carros > pessoas: print "Deveríamos pegar carros." elif carros < pessoas: print "Não deveríamos pegar carros." else: print "Não podemos decidir" if caminhao > carros: print "Tem muito caminhão." elif caminhao < carros: print "talvez devessemos pegar o caminhão." else: print "Ainda não podemos decidir." if pessoas > caminhao: print "Ok, vamos pegar o caminhão." else: print "Legal, vamos ficar em casa." Chame com python ex30.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 54 / 60 EI01 - Python Tomando decisões(ex31.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # coding=UTF-8 print "Você entra numa sala escura com duas portas. Você vai pela porta #1 ou porta #2?" porta = raw_input("> ") if porta == "1": print "Tem um urso gigante aqui comendo uma torta. O que você faz?" print "1. Pega a torta." print "2. Grita para o urso." urso = raw_input("> ") if urso == "1": print "O urso come sua cabeça. Bom trabalho!" elif urso == "2": print "O urso come suas pernas. Bom trabalho!" else: print "Bem, fazer %s provavelmente é a melhor opção. O urso foge." % bear elif porta == "2": print "Você fita o abismo infinito da retina de Cthulhu." print "1. Morangos." print "2. Prendedores de roupas amarelos." print "3. Escuta música." insanidade = raw_input("> ") if insanidade == "1" or insanidade == "2": print "Seu corpo sobrevive. Bom trabalho!" else: print "A insanidade leva seus olhos a um poço de lama. Bom trabalho!" else: print "Você cambaleia e cai numa faca e morre. Bom trabalho!" Chame com python ex31.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 55 / 60 EI01 - Python Loops e listas(ex32.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # coding=UTF-8 o_contador = [1, 2, 3, 4, 5] frutas = [maça, laranja, pera, damasco] cambio = [1, pennies, 2, dimes, 3, quarters] # o primeiro tipo de loop percorre uma lista for numero in o_contador: print "Este é o contador %d" % numero # como acima for fruta in frutas: print "Uma fruta do tipo: %s" % fruta # também podemos percorrer listas mistas # note que temos que usar %r pois não sabemos o que vem for i in cambio: print "Obtive %r" % i # também podemos construir listas, primeiro começando com uma vazia elementos = [] # depois usamos a função range para contar de 0 até 5 for i in range(0, 6): print "Adiconando %d na lista." % i # append é uma função que a lista entende elementos.append(i) # nagora podemos imprimir for i in elementos: print "Elemento era: %d" % i Chame com python ex32.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 56 / 60 EI01 - Python Loops While(ex33.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # coding=UTF-8 i = 0 numeros = [] while i < 6: print "No topo i é %d" % i numeros.append(i) i = i + 1 print "Números agora: ", numeros print "Em baixo i é %d" % i print "Os números: " for num in numeros: print num Chame com python ex33.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 57 / 60 EI01 - Python Fazendo coisas com listas(ex38.py) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # coding=UTF-8 dez_coisas = "Peras Laranjas Corvos Telefone Luz Sal" print "Espere! Não tem dez coisas nesta lista. Vamos consertar." coisa = dez_coisas.split( ) mais_coisas = ["Dia", "Noite", "Cantor", "Disco", "Milho", "Banana", "Garota", "Menino"] while len(coisa) != 10: prox_coisa = mais_coisas.pop() print "Acrescentando: ", prox_coisa coisa.append(prox_coisa) print "Temos %d itens agora." % len(coisa) print "Vamos lá: ", coisa print "Vamos fazer algo com isso." print print print print print coisa[1] coisa[-1] # legal! coisa.pop() .join(coisa) # O quê? #.join(coisa[3:5]) # ótimo! Chame com python ex38.py João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 58 / 60 EI01 - Python Saída de ex38.py python ex38.py Espere! Não tem dez coisas nesta lista. Vamos consertar. Acrescentando: Menino Temos 7 itens agora. Acrescentando: Garota Temos 8 itens agora. Acrescentando: Banana Temos 9 itens agora. Acrescentando: Milho Temos 10 itens agora. Vamos lá: ['Peras', 'Laranjas', 'Corvos', 'Telefone', 'Luz', 'Sal', 'Menino', 'Garota', 'Banana', 'Milho'] Vamos fazer algo com isso. Laranjas Milho Milho Peras Laranjas Corvos Telefone Luz Sal Menino Garota Banana Telefone#Luz João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 59 / 60 EI01 - Python FIM João Araujo Ribeiro (UERJ) Estruturas de Informação I EstrInf 60 / 60