Buscar

PROVA MATCOMP

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PROVA MATCOMP 
 
2° Tópico: Python e Spyder 
1-O console é usado para: R: Executar imediatamente uma instrução 
2-O IDE Spyder está disponível para ser instalado de graça em: R:Windows, Linux e Mac OS X 
3-Os programas escritos na linguagem Python precisam ser compilados antes de serem executados pelo processador? R:Falso 
4-Um aquivo fonte contém: R:Uma seqüência de instruções 
5-È possível rodar programas escritos em Python no Windows? R:Verdadeiro 
6-Selecione as linguagens compiladas da lista a seguir: R:Fortran, Pascal 
7-Para usar a linguagem Python é preciso ter instalado um IDE? R:Falso 
8-Só é posíivel usar Python se tivermos Spyder instalado? R:Não. Podemos usar Python sem ter instalado Spyder 
3° Tópico: Variáveis e Operações básicas 
Avaliação sobre variáveis 
1-Para permitir o gerenciamento da memória principal: R:Todos os compartimentos têm o mesmo tamanho, Ela está dividida em compartimentos, 
Cada compartimento possui um endereço único. 
2-O seguinte nome de variável é válido: (nome_completo) R: Falso 
3-O seguinte nome de variável é válido: 12_sobrenome R: Falso 
4-O seguinte nome de variável é válido: contador 6 R: Falso 
5-O seguinte nome de variável é válido: PrimeiroTempo R: Verdadeiro 
6- O seguinte nome de variável é válido: primeiroTempo R: Verdadeiro 
7- O seguinte nome de variável é válido: Está_Correto R: Falso 
8- O seguinte nome de variável é válido: nome.completo R: Falso 
9- O seguinte nome de variável é válido: Nome_____Comprido R: Verdadeiro 
10- O seguinte nome de variável é válido: nome_completo R: Verdadeiro 
Avaliação sobre console 
1- Qual é o resultado que Python retorna ao avaliar a seguinte expressão: 3.0 * "bingo" R: Python gera uma mensagem de erro. 
2- Qual será o resultado que Python responde ao executar o último comando da seguinte figura? 
 
R: e. Python gera uma mensagem de erro. 
3- Qual é o resultado que Python retorna ao avaliar a seguinte expressão: 12 + ( 3 < 5 ) + 10 R: 23 
4- Qual será o resultado que Python responde ao executar o último comando da seguinte figura? 
 
R: ola ola ola ola 
5- Qual será o resultado que Python responde ao executar o último comando da seguinte figura? 
 
R: True 
6- Qual é o resultado de avaliar a seguinte expressão em Python? 1.0 + True R: 2.0 
7- Qual é o resultado que Python retorna ao avaliar a seguinte expressão? 12 + 3 < 5 + 10 R: False 
8- Qual será o resultado que Python responde ao executar o último comando da seguinte figura? 
 
R: Nenhuma das opções. 
9- Qual é o resultado que Python retorna ao avaliar a seguinte expressão: - 3.0 * 2 < 21 / 30 R: True 
10- Qual é o resultado que Python retorna ao avaliar a seguinte expressão? "bla" * 3 R: 'blablabla' 
4° Tópico: Strings, trabalhando com texto 
1- O método isdigit( ) das strings permite saber se todos os caracteres de uma string dada são dígitos: o método responde Truese for verdade 
ou False no caso contrário. Qual será o resultado dos seguintes dois comandos? 
s = "123.45" 
print s.isdigit( ) 
R: False 
2- O método capitalize() das strings permite transformar a primeira letra de uma string em maiúscula. Qual será o resultado dos seguintes dois 
comandos? 
s = "palavra magica: abracadabra" 
print s.capitalize() 
R: Palavra magica: abracadabra 
3- Qual é o resultado de dar o seguinte comando no console? 
print 'Bom' + ' ' + 'dia!' 
R: Bom dia! 
4- O método startswith( 'substring' ) das strings permite saber se uma string dada começa com 'substring': o método respondeTrue se for 
verdade que 'substring' aparece no final ou False no caso contrário. Qual será o resultado dos seguintes dois comandos? 
s = "palavra magica: abracadabra" 
print s.startswith( "ala" ) 
R: False 
5- O método count( 'substring' ) das strings permite contar quantas vezes 'substrings' aparece numa string dada. Qual será o resultado dos 
seguintes dois comandos? 
s = "palavra magica: abracadabra" 
print s.count( "ra" ) 
R: 3 
6- Qual é o resultado de dar o seguinte comando no console? 'bra ' in 'abracadabra' R: False 
7- Qual é o resultado de dar o seguinte comando no console? 'BRA' in 'abracadabra' R: False 
8- Qual é o resultado de dar o seguinte comando no console? print 4 / 2 * 'eco ' R: eco eco 
9- Qual é o resultado de dar o seguintes comandos no console? nome = 'Pedro' 
print 'Ola' + ' ' + nome R: Ola Pedro 
10- O método isupper( ) das strings permite saber se todas as letras de uma string dada são maiúsculas: o método responde Truese for verdade 
ou False no caso contrário. Qual será o resultado dos seguintes dois comandos? 
 s = "Password = Segredo" 
print s.isupper( ) 
R: False 
 
5° Tópico: Interfaces gráficas básicas 
Avaliação sobre console e interfaces gráficas 
1- No Spyder podemos escolher qualquer pasta como diretório de trabalho. R: Verdadeiro. 
2- Escolha todos os comandos que geram a seguinte janela: 
R:easygui.msgbox("Qual será a resposta certa?", "Avaliação fácil") 
easygui.msgbox("Qual será a resposta certa?", "avaliação fácil".capitalize()) 
easygui.msgbox("Qual será" + " a resposta certa?", "Avaliação fácil") 
3- As janelas que podemos usar contidas no módulo easygui só servem para mostrar mensagens padrão fixas. R: Falso 
4- Escolha todos os comandos que geram a seguinte janela:
 
R: easygui.enterbox("Digite a sua data de nascimento" + " (dd/mm/yy)", "ficha de cadastro".capitalize()) 
data_nascimento = easygui.enterbox("Digite a sua data de nascimento (dd/mm/yy)", "Ficha de cadastro") 
 easygui.enterbox("Digite a sua data de nascimento (dd/mm/yy)", "Ficha de cadastro") 
5- Precisamos copiar no diretório de trabalho aqueles módulos que preciisamos mas que não foram instalados no mesmo diretório onde se 
encontra o interpretador de Python. R: Verdadeiro 
6- Para usar os recursos oferecidos pelo módulo easygui precisamos copiar o arquivo easygui.py para a pasta apontada como nosso diretório de 
trabalho. R: Verdadeiro 
7- No diretório de trabalho encontram-se intalados todos os módulos usados por Python. R: Falso 
8- As janelas que podemos usar contidas no módulo easygui são adaptadas às nossas necessidades mudando os argumentos das funções 
correspondentes. R:Verdadeiro 
9- Escolha todos os comandos que geram a seguinte janela: 
 
R: nome = easygui.enterbox("qual e o seu nome?".capitalize(), "Cadastro de Usuario") 
 easygui.enterbox("Qual e o seu nome?", "Cadastro de Usuario") 
nome = easygui.enterbox("Qual e o seu nome?", "Cadastro de Usuario") 
10- Para usar os recursos oferecidos pelo módulo easygui precisamos usar um programa instalador no sistema operacional. R:Falso 
Avaliação para escrever programas 
1- funções contidas no módulo easygui usam etiquetas para os seus argumentos para permitir que o programador possa chamar a função com os 
argumentos em qualquer ordem. R: Verdadeiro 
2- Se o programa que estamos escrevendo usa as janelas disponíveis no módulo easygui então precisamos guardar o arquivo do programa na 
mesma pasta que se encontra o arquivo easygui.py. R: Verdadeiro 
3- As strings delimitadas por três aspas duplas (ou simples) informam ao Python o tipo de codificação usada no arquivo. R: Falso 
4- O símbolo # indica ao Python que tudo o que aparecer a seguir até o final da linha não contém nenhum comando a ser executado. R: 
Verdadeiro 
5- O comentário # -*- coding: utf-8 -*- pode ser inserido na primeira, segunda, terceira, quarta ou quinta linha do arquivo. R: Falso 
 6° Tópico- Estruturas de Dados I: Listas e Tuplas 
 
1- Considere a seguinte string: exemplo = "Mais uma frase" Se eu quero saber qual é a letra na penúltima posição da string exemplo qual é uma 
forma correta de obtê-la? R: exemplo[-2] 
2- Considere a seguinte string: exemplo = "Mais uma frase" Se eu quero saber qual é a letrana quarta posição da string exemplo qual é uma 
forma correta de obtê-la? R: exemplo[3] 
3- Considere a seguinte lista: exemplo = [2.3, 4.5, 1.9, 6.3, 9.2] Qual ou quais comandos representam a fatia com os três primeiros elementos da 
lista exemplo? R: exemplo[-5:-2] e exemplo[0:3] 
4- Qual será o resultado do último comando? 
 
Escolher uma resposta: R: [10, 70, 50, 30, 40] 
5- Considere a seguinte lista: exemplo = [3.7, "Pedro", [3,4], 'b', 7]Se eu quero mudar o valor 3 da lista contida na lista exemplo por 5 eu preciso 
dar qual comando? R: exemplo[2][0] = 5 
6- Qual será o resultado do último comando? 
 
R: 50 
7- Qual será o resultado do último comando? 
 
R: Python gera uma mensagem de erro 
8- Considere a seguinte tupla: exemplo = (2, 3, 4, 5, 6, 7, 8, 9, 10) Qual ou quais comandos selecionam a fatia contendo somente os números 
múltiplos de 3 da tupla exemplo? R: exemplo[1::3] , exemplo[-8::3] , exemplo[1:29:3] e exemplo[-8:-1:3]. 
9- Considere a seguinte lista: exemplo = [3.7, "Pedro", [3, 4], 'b', 7] Qual ou quais comandos trocam o 4 por um 8? R: exemplo[-3][1] = 8 , 
 exemplo[2][-1] = 8, exemplo[2][1] = 8 e exemplo[-3][-1] = 8. 
10- Para ler o conteúdo da última posição de uma tupla, lista ou string eu preciso saber o comprimento dessa tupla, lista ou string. R: Falso 
11- Considere a seguinte lista:exemplo = [2.3, 4.5, 1.9, 6.3, 9.2]Qual ou quais comandos representam a fatia com os três últimos elementos da 
lista exemplo? R: exemplo[-3:] e exemplo[2:] 
12- Qual será o resultado do último comando? 
 
R: nenhuma das opções 
13- Qual será o resultado do último comando? 
 
R: nenhuma das opções 
14- A principal diferença entre tuplas e strings é que não é possível mudar o conteúdo de uma tupla mas sim é possivel numa string. R: Falso 
15- Se no programa que estou escrevendo preciso organizar dados relacionados que não irão mudar nunca então é conveniente pensar em usar 
tuplas. R: Verdadeiro 
8° Tópico - Estruturas de Dados II: Dicionários 
1- Qual será a resposta do Python após o último comando da lista a seguir? 
 
R: Python gera uma mensagem de erro 
2- Qual será a resposta do Python após o último comando da lista a seguir? 
 
R: 9.3 
3- Assim como as tuplas e os strings são inmutáveis, os dicionários não permitem mudar o valor da chave de um item. R: Verdadeiro 
4- Assim como as listas permitem mudar o valor guardado num índice válido, os dicionários permitem mudar o valor associado a uma chave 
existente no mapa. R: Verdadeiro 
5- Dicionários são compostos por uma chave e um valor relacionado sempre com valores consecutivos. R:Falso 
6- Os dicionários permitem que dois ítens tenham a mesma chave desde que os valores correspondentes sejam diferentes. R: Falso 
7- Assim como uma lista tem os seus índices ordenados em forma crescente, os dicionários mantém as suas chaves ordenadas também em 
ordem crescente. R: Falso 
8- O que aparecerá na tela após o último comando abaixo? 
 
R: 1 
9- Enquanto que uma lista permite conter uma outra lista como elemento os dicionários não permitem ter um outro dicionário como valor de um 
item. R: Falso 
10- Dicionários diferenciam-se de strings, tuplas e listas por não serem indexados de forma sequencial. R: Verdadeiro 
11- O que aparecerá na tela após o comando abaixo? 
 
R: 0 
12: Enquanto que nas sequências os índices devem ser números inteiros, os dicionários permitem que as chaves sejam números decimais. R: 
Verdadeiro 
11° Tópico - Sobrevivendo ao apagão: o uso de arquivos. 
1- O que acontece se num programa aparecem consecutivos os seguites dois comandos? 
arquivo = open("naosei.txt", 'w') 
frase = arquivo.read() 
R: Python gerará uma mensagem de erro quando o programa seja executado 
2- Os programas que manipulam planilhas eletrônicas (Excel, OpenOffice Calc) podem ler ou escrever em arquivos com formatoCSV , mesmo se 
esses arquivos foram criados por um programa escrito em Python.R: Verdadeiro 
3- Todo programa precisa abrir pelo menos um arquivo para guardar informações nele.R: Falso 
4- A função filesavebox() do módulo easygui fecha o arquivo escolhido pelo usuário.. R: Falso 
5- O módulo csv disponibiliza um conjunto de funções que facilitam ao programador as tarefas de ler e de escrever em arquivos com formato CSV. 
R: Verdadeiro 
6- Os programas usam arquivos para recuperar as informações relevantes guardadas em sessões anteriores de trabalho. R: Verdadeiro 
7- O que acontece se num programa aparecem consecutivos os seguites dois comandos? 
arquivo = open("naosei.txt", 'r') 
arquivo.write("Outra vez a mesma frase!") 
R: Python gerará uma mensagem de erro quando o programa seja executado 
8- Os programas usam arquivos para guardar as informações relevantes de uma sessão de trabalho. R: Verdadeiro 
9- A função fileopenbox() do módulo easygui ajuda ao usuário na escolha do nome do arquivo que será aberto pela funçãoopen(). R:Verddeiro 
10- O comando 
import easygui as ei 
tem por objetivo renomear o arquivo easygui.py. 
R: Falso 
11- A informação que um programa quer preservar num arquivo está segura a partir do momento que esse programa fecha o arquivo onde ele 
escreveu. R: Verdadeiro 
12- Todo programa que lê ou que escreve num arquivo precisa usar o formato CSV. R: Falso 
 
1° Tópico - Linguagens de programação em geral, e Python em particular. 
Perguntas: 
 Para que servem as linguagens de programação? 
 Por que há tantas linguagens diferentes? 
 Por que Python merece a nossa atenção? 
O porquê das linguagens de programação 
Os computadores somente são capazes de "compreender" e executar operações elementares muito simples. Qualquer tarefa, por exemplo 
mostrar uma mensagem na tela, requer de muitas (vários miles) de operações elementares para ser completada. Por este motivo é de praxe 
organizar conjuntos de operações elementares emprogramas. 
Toda pessoa que pretenda criar um programa para que o computador faça uma tarefa encontra a dificuldade de ter que listar o conjunto de ações 
de maneira que o computador possa "compreender". Os processadores dos computadores foram projetados para trabalhar com representação 
binária dos dados e das instruções. Os motivos dessa escolha são puramente tecnológicos mas a decisão permanece a pesar de ter sido 
tomada na década de 1940. 
Por outro lado, nós humanos temos dificuldade em compreender informações representadas em binário. Por este motivo, para faciliar a 
comunicação homen - máquina foram criadas as linguagens de programação. De modo geral, nós humanos escrevemos uma lista de tarefas 
que desejamos que o processador do computador faça, e guardamos essa lista num arquivo chamado arquivo fonte. Um programa especial 
tradutor (mais adiante descrevemos ele) toma esse arquivo fonte e gera a partir dele um arquivo binário cujo conteúdo é comprendido pelo 
processador do computador. Desta maneira a comunicação homen-máquina é facilitada pelo uso dessetradutor. Cada linguagem de programação 
possui o seu tradutor, e existem várias estratégias que as linguagens podem seguir para fazer a tradução. 
Sem querer entrar em detalhes técnicos, as linguagens de computação podem ser organizadas em dois grandes grupos: 
 aquelas linguagens que traduzem num único passo a lista inteira de tarefas do arquivo fonte; são as chamadas linguagens 
compiladas. Entre elas encontramos linguagens tais como C / C++, FORTRAN, etc. 
 aquelas linguagens que traduzem as tarefas contidas no arquivo fonte uma de cada vez; são as chamadaslinguagens interpretadas. 
Exemplo de tais linguagens são Python, Javascript, Perl etc. A linguagem Java encontra-se nas duas categorias (consulte o professor 
se quiser ter mais detalhes) 
Existem motivos históricos e tecnológicos que explicam a pletora de linguagens de programação. Por exemplo, a linguagem FORTRANteve a sua 
expansão na década de 1960, sendo a sua aplicação principal a criação de programas para cálculo numérico (o seu nome é um acônimo: 
FORmula TRANslator, tradutor de fórmulas). Atualmente ele continua sendo usado por pesquisadores e engenheiros que o aprenderam como 
primeira linguagem. O seu uso está históricamente justificado devido à grande quantidade de programas maduros (sem erros) que continuam 
sendo usados em áreas da física e engenharia. Por outro lado, a linguagem C foi criada no início da década de 1970 com o intuito de escrever o 
conjunto de programas que compõem o sistema operacional UNIX. Tanto o FORTRAN quanto o C tem a eficiência como principal caraterística. 
Entretanto, a medida que as aplicações do uso do computador iam se diversificando e ficando mais complexas, ficou em evidência a necessidade 
de contar com ferramentas que facilitassem a tarefa de escrever programas. A complexidade dos programas e o tempo (ou seja, dinheiro) 
necessários para criar as novas gerações de programas foram os principais fatores que impulsaram a invenção de novas linguagens de 
programação. Um terceiro fator importante entrou em cena com a diversificação dos computadores domésticos: nasceu a necessidade que o 
programa associado a uma aplicação dada possa ser executado numa ampla diversidade de plataformas (entende-se por plataforma ao conjunto 
formado pela máquina e o sistema operacional usado nela). Este último fator foi o promotor da expansão das linguagens interpretadas. 
Python: uma linguagem interpretada 
Python é uma linguagem de última geração que se desenvolveu muito rápidamente na primeira década deste século. A diferença de outras 
linguagens interpretadas que possuem uma área preferencial de aplicação, Python é empregada em quase todos os domínios, desde computação 
distribuida em clusters ou clouds, até aplicativos em celulares (por exemplo os celulares de Nokia e smartphones que usam Symbian). 
Duas caraterísticas de Python explicam o seu sucesso entre os programadores: 
1. a sua chamada "curva de aprendizado" é quase exponencial. Ou seja, nenhuma outra linguagem de programação de propósito geral é 
aprendida mais facilmente que Python. (você mesmo irá comprovar isto neste curso) 
2. a sua facilidade para combinar programas escritos em Python com aqueles escritos numa linguagens compilada. Destaca-se em 
particular, a facilidade de integração entre Python e C / C++. 
As linguagens interpretadas possuem a grande vantagem de facilitar o desenvolvimento de programas devido à possibilidade de avançar 
gradativamente na escrita do código fonte. Isto permite detectar e eliminar os erros no código fonte um depois do outro a medida que a execução 
do programa avança. Porém, a execução de um programa escrito numa linguagem interpretada não é tão eficiente quanto a execução de um 
programa escrito (e traduzido) numa linguagem como C. 
No caso de Python é possivel ter o melhor dos dois mundos: as partes de um programa cuja eficiência seja crítica podem ser escritas em 
linguagem C, e todo o resto pode ser escrito usando a facilidade e elegancia fornecidas pela linguagem Python. 
Um excelente exemplo de esta estratégia de combinar Python e C é a plataforma de Google. Todos as funções críticas (por exemplo, a busca e 
classificação de documentos) dos aplicativos de Google foram escritas em C: tudo o resto foi escrito em Python. 
Finalmente, duas vantagens importantísimas da linguagem Python: 
1. o interpretador está disponível para quase todas as plataformas existentes (Linux, Mac OS X, Windows, etc) 
2. ele é de graça. 
Resumo 
Aprender a criar programas na linguagem Python tem as seguintes vantagens: 
1. ela é a linguagem de mais fácil aprendizado, 
2. ela é uma linguagem de última geração, 
3. ela permite ser combinada com linguagens de alta eficiência como C / C++, 
4. o seu interpretador pode ser baixado e instalado de graça para todas as plataformas, não sendo necessário pagar por licenças pelo o 
seu uso 
5. um programa escrito em Python roda sem mudanças tanto em Windows, Linux ou Mac OS X. 
6. ela possui uma das maiores comunidades de desenvolvedores e usuários sendo assim muito fácil achar informação e ajuda para um 
problema particular de programação. 
 
 
10° Tópico - Organizando um programa: definição de Funções 
 O que é uma função? 
 Como criar uma função? 
 Escopo de variáveis 
 Argumentos nomeados e valores padrão. 
 
Couvert 
Um programa pode ser visto como uma coleção de tarefas que devem ser feitas. A ordem em que essas tarefas são executadas depende das 
estruturas de controle de fluxo (if-elif-else, while, for) usadas no código, e das circunstâncias concretas de cada rodada (ações do usuário, 
valores concretos armazenados nas variáveis, etc). Quando nos preocupamos com a ordem de execução das tarefas estamos considerando 
alógica do programa. Por outro lado, também é muito importante considerar a forma como essas tarefas estão organizadas no código do 
programa. O foco, neste último caso, está na maneira em que o programa foi escrito e não na sua lógica de execução. Por este motivo, dois 
programadores podem escrever dois programas totalmente diferentes do ponto de vista do seu conteúdo, entretanto, do ponto de vista do usuário, 
os dois programas se comportam de igual forma. 
Uma pergunta válida é: por que é importante se preocupar com a organização do código? Existem muitos motivos pelos quais a organização do 
código é importante, que justificam a existência de uma grande área de pesquisa chamada Engenharia de Software. Entretanto, neste curso 
básico de programação vamos nos preocupar em organizar o código de maneira que fique mais fácil de escrever e de ler. 
No caso de programas muito simples não há nada com que se preocupar a respeito da organização do código. Mas, se o programa for um pouco 
mais ambicioso, o material deste capítulo fará toda uma diferença. Consideremos um exemplo já visto: escreva um programa para preparar 
caipirinha. Suponhamos que dispomos dos ingredientes: limões, açúcar, cachaça e gelo. A lista de tarefas que é preciso executar é a seguinte: 
1. descascar limões; 
2. amassar os limões descascados junto com o açúcar; 
3. acrescentar a cachaça e misturar; 
4. acrescentar o gelo. 
Cada uma dessas 4 tarefas possui detalhes que devem ser respeitados. Por exemplo, não foi explicado como descascar um limão, nem foi 
especificado que a parte branca do centro deve ser descartada. Esses detalhes de cada tarefa estão agrupados dentro da execução da tarefa. Se 
alguém quer conhecer os detalhes de como executar uma tarefa em particular terá que olhar no "código" correspondente a essa tarefa. A receita 
descrita acima descreve as grandes tarefas e deixa os detalhes de cada uma delas para uma explicação separada. Esse é exatamente o espírito 
de organizar o código de um programa usando funções: cada função é uma tarefa que o programa deve executar, e o código de cada função é 
uma sequência de tarefas menores que devem ser executadas para completar a tarefa. 
O que é uma função? 
Uma função é um conjunto de comandos que devem ser executados para completar uma tarefa específica. A definição é ampla pois ela não diz 
quantos comandos são necessários para escrever uma função, nem diz o quão específica deve ser a tarefa. Em última instância, fica a critério do 
programador decidir quais tarefas estarão no escopo de uma função. Também é possível que o programador escreva um programa inteiro sem 
criar qualquer função, mas isso não falaria muito bem dele como profissional, pois o programa se torna extenso e complexa a leitura e 
entendimento. 
Consideremos algumas das funções já prontas que usamos até agora no curso. Vimos dois grandes tipos de funções: aquelas de propósito geral, 
como é o caso da função len(), e aquelas associadas a uma classe específicade objeto, como no caso da função upper() dos strings. Este último 
tipo de função é conhecido como método. 
A pessoa que criou a função len() atacou o problema geral de saber quantos elementos há numa sequência. Sabemos que há três tipos de 
sequências em Python: strings, listas e tuplas. Mas nos três casos os elementos estão organizados de maneira consecutiva, e portanto a mesma 
solução pode ser aplicadas às três. 
Uma outra função que usamos com frequência é msgbox() do módulo easygui. De novo, o programador que escreveu essa função quis atacar a 
tarefa de criar uma janela com uma mensagem para o usuário. 
Neste curso não criaremos funções de propósito tão geral como é o caso de len() ou de msgbox(), mas com certeza elas resolverão uma tarefa 
específica. 
Em geral uma função precisa que lhe seja fornecida alguma informação para executar a tarefa para a qual ela foi desenhada. No exemplo da 
caipirinha, precisamos dos limões para executar a primeira tarefa. A função len() necessita de uma sequência para contar os seus elementos. Em 
programação chama-se argumentos (ou também parâmetros) às informações que uma função precisa ter para executar a sua tarefa. Assim, se 
pedimos ao Python para executar len("uma frase"), o string "uma frase" é o argumento que é fornecido à função len(). Para simplificar podemos 
dizer que os argumentos são todos os dados que colocamos dentro dos parênteses de uma função. 
Finalmente, depois que uma função completa a tarefa para a qual ela foi criada, ela retorna (ou devolve) o fruto do seu trabalho a quem a 
chamou. No caso da caipirinha o fruto da primeira tarefa são os limões descascados e desprovidos do miolo. No caso de len("uma frase") ela 
retornará o valor 9, resultado de contar quantos carateres há no string "uma frase". 
Resumindo tudo o visto nesta seção podemos afirmar que: 
 uma função é um conjunto de comandos que servem para executar uma tarefa específica, escolhida a critério do programador; 
 uma função geralmente precisa de informações para executar a sua tarefa; essas informações lhe são comunicadas usando 
os argumentosque a função espera. Esses argumentos aparecem dentro dos parênteses da função; 
 uma função, depois de completar a sua tarefa, retorna o seu resultado para que este seja armazenado numa variável, seja usado numa 
fórmula ou simplesmente seja apresentado ao usuário. O resultado pode ser um simples inteiro como no caso de len(), ou pode ser uma 
estrutura mais complexa como no caso do multenterbox() que retorna uma lista de strings. 
Como criar uma função? 
Para definir uma função em Python precisamos primeiro escolher um nome e decidir quais são os argumentos que ela irá precisar. Os nomes de 
funções seguem as mesmas regras que os nomes de variáveis. Uma recomendação geral e óbvia é escolher nomes que sejam sugestivos da 
tarefa que a função vai executar; por exemplo: cadastrar_produto(), consultar_produto(), etc. 
Vejamos um exemplo simples de como definir uma função que conta a quantidade de vogais numa string. 
(copie o código no editor do Spyder e experimente rodar!!!) 
 
 
Comentários sobre a figura acima: 
 Na linha 12 aparecem todos os ingredientes para definir uma função: 
 começamos com a palavra reservada def, 
 seguida do nome da função, 
 os parênteses contendo os nomes dos argumentos, 
 finalmente, os dois pontos. 
 As linhas 13 até a 22 estão indentadas pois elas fazem parte do bloco contendo o código da função. 
 Na linha 22 aparece a palavra reservada return. Quando Python encontra essa palavra dentro do bloco de uma função ele para de 
executar as instruções dentro da função e devolve o(s) dado(s) que seguem ao return para o código que chamou a função. No caso 
particular deste nosso exemplo, o Python devolve o conteúdo da variável contador para o código na linha 31 desde onde a função foi 
chamada. Para simplificar, podemos imaginar que o Python substitui na linha 31 conta_vogais(entrada) pelo valor que ficou 
armazenado em contador. Assim, na variável vogais fica armazenado o resultado do trabalho da função que criamos. Uma 
função pode usar o comando return mais de uma vez dentro do seu bloco, por exemplo se ela precisa retornar valores diferentes em 
diferentes condições. 
 Repare que na definição da função na linha 12 chamamos o argumento de frase, mas quando usamos a função na linha 31 usamos a 
variável entrada. O que Python faz por baixo dos panos é copiar o conteúdo da variável entrada para uma nova variável frase que ele 
cria na hora de executar o código da função. Deste modo o conteúdo da variável entrada não é afetado pelas operações a serem 
efetuadas no bloco da função. Há uma exceção para este comportamento que veremos mais adiante neste capítulo. 
 É muito importante lembrar que uma função precisa ser definida antes de ser usada. Se pensamos um pouco isso é óbvio: eu não posso 
cobrar do Python que ele faça uma tarefa se antes eu não disse pra ele como fazê-la. Por este motivo, toda vez que decidamos usar 
nossas próprias funções no código de um programa é preciso que as definamos antes. 
Vejamos um exemplo onde usamos funções para melhor organizar o código do programa. Vamos supor que queremos criar um sistema para 
gerenciar uma biblioteca pessoal. O sistema deve permitir: 
1. cadastrar um novo livro; 
2. remover um livro do cadastro; 
3. emprestar um livro; 
4. devolver um livro. 
Para organizar o cadastro de livros usaremos um dicionário cujas chaves correspondem ao ISBN de cada livro. Além do ISBN do livro, 
armazenaremos o título e o nome completo do primeiro autor. Estes dois atributos ficarão armazenados numa lista associada ao ISBN 
correspondente a cada livro. 
Para organizar os empréstimos usaremos um dicionário cujas chaves correspondem ao ISBN de cada livro. Além do ISBN do livro, 
armazenaremos o nome completo da pessoa que retirou o livro e a data em que ocorreu o empréstimo. Estes dois atributos ficarão armazenados 
numa lista associada ao ISBN correspondente a cada livro. 
Para organizar o código vamos usar 4 funções auxiliares que implementarão cada uma das 4 tarefas. Vejamos uma primeira versão do código: 
(copie o código no editor do Spyder e experimente rodar!!!) 
 
 
Comentários sobre a figura acima: 
 as 4 funções definidas na figura acima por enquanto não executam as tarefas para as quais elas foram planejadas. Nesta fase do 
desenho do sistema só nos preocupamos pela organização geral do sistema. Por esse motivo, para poder conferir se as tarefas rodam 
segundo o esperado, em cada função criamos uma janela para conferirmos que a função correspondente à tarefa escolhida é chamada. 
 Repare que as 4 funções recebem, cada uma, um parâmetro mas este não é usado no bloco da função. Esses parâmetros estão ali 
como lembretes do que a função irá precisar para implementar a sua tarefa. 
 Note que nenhuma das funções usa a palavra reservada return. O motivo é simples: como as funções não precisam devolver nenhuma 
informação pro lugar onde elas foram chamadas não há necessidade de usar return. A execução da função acaba quando chegamos no 
final do bloco correspondente. 
 Confira como ficou simples o loop principal do sistema onde é apresentado o menu de ações para o usuário. Nos programas que 
escrevemos no capítulo anterior, o código para criar a janela com o menu de opções ficava misturado com o código correspondente as 
tarefas a serem executadas. Isto deixava o código sobrecarregado e de difícil leitura. Usando funções podemos ir escrevendo o código 
gradativamente reduzindo assim o risco de espalhar erros. 
Exercício: 
Complete o código que falta dentro das funções para deixar o sistema funcionando. Nota: o seu aprendizado depende da sua disposição para 
fazer os exercícios sugeridos. 
Escopo de variáveisConsideremos o seguinte exemplo: 
(copie o código no editor do Spyder e experimente rodar!!!) 
 
 
Comentários sobre a figura acima: 
 Na linha 12, dentro do bloco da função, criamos uma variável nome e guardamos nela o string "Bob". 
 Na linha 15 criamos uma janela onde usamos o conteúdo da variável nome. 
 Na linha 17, fora do bloco da função, criamos uma variável nome e guardamos nela o string "Ando". 
 Na linha 19 chamamos a função teste() e ela cria uma mensagem usando o conteúdo da variável nome criada dentro da função, 
apesar de existir fora do bloco da função uma outra variável nome. Python sempre usa as variáveis simples definidas dentro do 
bloco que está em execução. Portanto, para usar uma variável simples dentro de uma função é preciso criá-la dentro do bloco da 
função. As variáveis criadas fora do bloco da função não existem dentro da função. 
 Na linha 23 criamos uma janela que usa o conteúdo da variável nome definida na linha 17. O código da linha 12 não afeta o conteúdo da 
variável criada na linha 17 porque esta está fora do bloco da função. 
 O mesmo raciocíno feito para as variáveis nome se aplica às variáveis msg e title criadas dentro e fora da função. 
No exemplo anterior vimos que dentro do bloco de uma função só podemos mudar o conteúdo de variáveis que foram criadas dentro da 
função. Em termos de programação esta limitação chama-se escopo. Resumindo podemos dizer que o escopo de uma variável é o bloco onde 
uma variável foi criada e ela existe. 
Vejamos uma situação diferente: 
(copie o código no editor do Spyder e experimente rodar!!!) 
 
 
Comentários sobre a figura acima: 
 Neste exemplo, a função teste() possui o argumento lista. Na linha 12 mudamos o conteúdo da variável lista, acrescentando um 
elemento. 
 Na linha 18 criamos uma variável convidados e guardamos nela uma lista com apenas um elemento. Na linha 23 criamos uma janela 
onde mostramos para o usuário o conteúdo da lista. 
 Em 26 chamamos a função teste() fornecendo-lhe como parâmetro a variável convidado (criada fora de teste()). Em 15 usamos uma 
janela para mostrar como fica lista depois de acrescentar um elemento. A pergunta do milhão é: quando na linha 12 acrescentamos um 
elemento ao argumento estamos mudando também a composição da lista armazenada na variável convidados? 
 Para tirar a dúvida anterior, na linha 31 usamos uma janela para mostrar mais uma vez o conteúdo da variável convidados. Copie e 
rode o programa para responder a pergunta acima. 
No primeiro exemplo deste capítulo, a função contadora de vogais, dissemos que Python copia o conteúdo do argumento da função para uma 
variável que ele cria na hora de executar a função. Este comportamento é adequado para o caso de variáveis simples, onde a informação a ser 
copiada é pouca. Entretanto, se na lista armazenada em convidados houvessem 1000 ou mais elementos, toda vez que chamamos 
a teste()Python precisaria criar uma cópia desses 1000 elementos antes de começar a rodar a função. Para evitar essa sobrecarga de estar 
copiando todo o conteúdo de uma lista, Python permite que somente no caso de listas e dicionários os seus conteúdos possam ser mudados 
desde que dentro de uma função, mesmo que essas listas ou dicionários tenham sido criados fora do bloco da função. 
Argumentos nomeados e valores padrão 
No console do Spyder experimente chamar a função len() sem fornecer nenhum argumento. O que acontece? 
Consideremos agora uma função que temos usado muito: a função msgbox() do módulo easygui. No console do Spyder experimente importar o 
módulo easygui e chamar a função msgbox() sem fornecer nenhum argumento. O que acontece? 
Por que as funções len() e a msgbox() se comportam de maneira tão diferente quando as chamamos sem nenhum argumento? A diferença entre 
ambas as funções está no que em programação chamam-se argumentos nomeados e valores padrão. A função len() foi concebida pelo 
programador que a criou sem nenhum valor padrão para o seu argumento: por este motivo, se chamamos a função len() sem argumentos ela 
não vai saber o que fazer e por isso Python gera uma mensagem de erro. Já no caso da função msgbox(), o seu criador achou conveniente ter 
um comportamento definido mesmo no caso em que ela seja chamada sem nenhum argumento. Por este motivo, o criador 
de msgbox() definiuvalores padrão para os argumentos de maneira que se ela for usada sem fornecer valores para os seus argumentos estes 
adotem os valores padrão. 
Para criar uma função que tenha valores padrão para os seus argumentos precisamos usar argumentos nomeados, que são os argumentos de 
uma função inicializados com um valor padrão, como nas linhas 11 e 12 do exemplo 5 abaixo. Vejamos um exemplo prático criando uma função 
que calcula valores de desconto. 
(copie o código no editor do Spyder e experimente rodar!!!) 
 
 
Comentários sobre a figura acima: 
 Nas linhas 11 e 12 definimos a função desconto() que possui dois argumentos nomeados: valor_bruto e percentagem. Se ao 
chamarmos a função não especificamos o valor de algum desses dois parâmetros, a definição da função prevê valores padrão para eles 
(0.0 e 10.0 respectivamente). 
 Na linha 17 usamos desconto() com valores para os dois argumentos e na 21 criamos uma janela comunicando ao usuário os preços, 
com e sem o desconto de 5%. 
 Entre as linhas 22 e 27 refazemos o cálculo anterior mas usando o valor padrão para a percentagem de desconto. 
Conclusões 
O visto neste capítulo deve deixar duas conclusões importantes: 
1. Toda vez que criamos a solução para um problema geral, tal como contar a quantidade de elementos numa sequência ou criar uma 
janela, a forma de disponibilizar essa solução para que outro programador a aproveite é implementando essa solução usando uma 
função. O móduloeasygui é um exemplo de como muitas funções gerais são "empacotadas" juntas para fornecer ao programador uma 
caixa de ferramentas para criar interfaces gráficas padronizadas. 
2. O código de um programa de complexidade média para cima fica muito mais fácil de escrever e de entender se associamos uma função 
a cada uma das tarefas que o programa deve implementar. Com esta estratégia podemos implementar o programa aos poucos, 
escrevendo o código de uma função de cada vez.

Continue navegando