Funções¶
Em Python, uma função é uma sequência de comandos que executaalguma tarefa e que tem um nome.A sua principal finalidade é nos ajudar a organizar programas empedaços que correspondam a como imaginamos uma solução do problema.
A sintaxe de uma definição de função é:
def NOME( PARÂMETROS ): COMANDOS
Você pode inventar qualquer nome para as funções que você cria, excetoque você não pode usar um nome que é uma palavra reservada em Python,e que os nomes devem seguir a regra de identificadores permitidos.Os parâmetros especificam qual informação, se alguma, você deveprovidenciar para que a função possa ser usada.Outra forma de dizer isto é que os parâmetros especificam o que afunção necessita para executar a sua tarefa.
Pode existir qualquer número de comandos em uma função, mas eles temque ter a mesma tabulação a partir do def
. Nos exemplos neste livro,usaremos a tabulação padrão de quatro espaços. Definição de funçãoé a segunda de vários comandos compostos que veremos, todos elestendo o mesmo padrão:
Uma linha de cabeçalho começando com uma palavra reservada e terminando com dois pontos.
Um corpo consistindo de um ou mais comandos, cada um delescom a mesma tabulação – 4 espaços é o padrão em Python – emrelação à linha de cabeçalho.
Já vimos o comando for que segue o mesmo padrão.
Na definição de uma função, a palavra reservada no cabeçalho édef
, que é seguida pelo nome da função e alguns parâmetros entreparênteses. A lista de parâmetros pode ser vazia ou conter qualquernúmero de parâmetros separados pos vírgulas. Em qualquer caso, osparênteses são obrigatórios.
Precisamos falar um pouco mais sobre parâmetros.Na definição, a listade parâmetros é conhecida mais especificamente como os parâmetrosformais. Esta lista de nomes descrevem o que a função precisaráreceber do usuário da função. Quando você usa uma função, você fornecevalores aos parâmetros formais.
A figura abaixo mostra essa relação. A função precisa de certasinformações para poder executar a sua tarefa. Esses valores, frequentementechamados de argumentos ou parâmetros reais, são passados àfunção pelo usuário.
Este tipo de diagrama é frequentemente chamado de diagrama de caixa-preta porque ele somente mostra os requisitos do ponto de vista do usuário. O usuário precisa saber o nome da função e quais argumentos precisam ser passados. Os detalhes de como a função funciona estão escondidos dentro da “caixa-preta”.
Suponha que estamos trabalhando com tartarugas e uma operação comum que precisamos é desenhar quadrados. Faria sentido se nós não precisássemos duplicar todos os passos cada vez que precisarmos fazer um quadrado. “Desenhe um quadrado” pode ser pensado como uma abstração de um número de passos menores. Precisaremos passar duas informações para a função executar a sua tarefa: a tartaruga para fazer o desenho e o tamanho do lado do quadrado. Poderíamos representar isto usando o seguinte diagrama de caixa-preta.
Abaixo segue a função que captura essa ideia. Teste-a.
O nome desta função é desenhaQuadrado
. Ela tem doisparâmetros — um para dizer à função qual tartaruga mover e o outropara dizer o tamanho do quadrado que desejamos desenhar. Na definiçãoda função eles são chamados t
e tam
respectivamente. Secertifique que você sabe onde o corpo da função termina — depende databulação e as linhas em branco não valem para esta finalidade.
docstrings
Se a primeira coisa depois do cabeçalho da função é um string(algumas ferramentas insistem em que isto precisa ser um stringdentro de três aspas), ele é chamado de docstring e temtratamento especial em Python e em algumas ferramentas deprogramação.
Outra forma de recuperar esta informação é usar o interpretadorinterativo e digitar <nome_da_função>.__doc__
, que recuperará odocstring da função. Portanto, o string que você escreve comodocumentação no início da função é recuperável online pelasferramentas do Python. Isto é diferente dos comentários no seucódigo, que são completamente eliminados quando o programa éanalisado pelo interpretador.
Por convenção, programadores em Python usam docstrings paradocumentar propriedades importantes de suas funções.
Definindo uma nova função não a faz rodar. Para tanto, precisamosfazer uma chamada de função. Isto é também conhecido como umainvocação de função. Já vimos como chamar algumas funçõesnativas como print, range e int. Chamadas defunção contém o nome da função a ser executada seguida por uma listade valores, chamados argumentos, os quais são atribuídos aosparâmetros da definição da função. Logo, na penúltima linha doprograma, chamamos a função e passamos alex
como a tartaruga a sermanipulada, e 50 como o tamanho do quadrado que queremos.
Uma vez definida uma função, podemos chamá-la quantas vezes quisermose seus comandos serão executados cada vez que a chamamos. Neste caso,poderíamos usá-la para que uma de nossas tartarugas desenhe umquadrado e então podemos mover a tartaruga e fazê-la desenhar umquadrado diferente num local diferente. Note que levantamos a cauda deforma que quando alex
se move não há rastro. Abaixamos a caudaantes de desenhar o próximo quadrado.
No próximo exemplo, mudamos um pouco a função desenhaQuadrado
e fazemos que tess
desenhe 15 quadrados com algumas variações. Umavez que a função esteja definida, a chamamos quantas vezes quisermos comquais parâmetros quisermos.
Rascunho
Teste seu entendimento
- Uma sequência de comando com um nome.
- Sim, uma função é uma sequência de comando com um nome.
- Qualquer sequência de comandos.
- Enquanto funções contém sequências de comandos, nem toda sequência de comandos é considerada uma função.
- Uma expressão matemática que calcula um valor.
- Enquanto algumas funções calculam valores, a ideia de uma função em Python é levemente diferente da ideia matemática de uma função na qual todas as funções calculam valores. Considere por exemplo as funções da tartaruga desta seção. Elas fazem a tartaruga desenhar uma forma específica, em vez de calcular um valor.
- Um comando da forma x = 5 + 4.
- Este comando é chamado de comando de atribuição. Ele atribui o valor à direita (9) para o nome à esquerda (x).
Q-6: O que é uma função em Python?
- Melhorar a velocidade de execução.
- Funções tem muito pouco efeito em quão rápido o programa roda.
- Ajudar programadores a organizar programas em pedaços que correspondam a como eles pensam a solução do problema.
- Enquanto funções não são obrigatórias, elas ajudam o programador a pensar melhor a solução pela organização dos pedaços em partes lógicas que podem ser reusados.
- Todos os programas em Python devem ser escritos usando funções.
- Nos primeiros capítulos, você viu muitos exemplos de programas em Python escritos sem o uso de funções. Enquanto escrever e usar funções é desejado e essencial para um bom estilo de programação na medida em que os programas ficam maiores, elas não são obrigatórias.
- Para calcular valores.
- Nem toda função calcula valores.
Q-7: Qual é uma das finalidades principais de uma função?
- def desenhaCirculo(t):
- Uma função pode receber zero ou mais parâmetros. Não é necessário ter dois. No caso, o tamanho do círculo pode ser especificado no corpo da função.
- def desenhaCirculo:
- Uma função precisa especificar seus parâmetros no cabeçalho.
- desenhaCirculo(t, tam):
- Uma definição de função precisa incluir a palavra def.
- def desenhaCirculo(t, tam)
- Uma definição de função precisa terminar com dois pontos (:).
Q-8: Qual dos seguintes é um cabeçalho válido de uma função (a primeira linha da definição da função)?
def desenhaQuadrado(t, tam)
Esta linha é o cabeçalho completo da função (exceto pelos dois pontos) o que inclui o nome bem como vários outros componentes.
desenhaQuadrado
Sim, o nome da função é dado após a palavra reservada def e antes da lista de parâmetros.
desenhaQuadrado(t, tam)
Isto inclui o nome da função e seus parâmetros.
Faça a tartaruga t desenhar um quadrado com lado tam.
Isto é um comentário declarando o que a função faz.
Q-9: Qual é o nome da seguinte função?
def desenhaQuadrado(t, tam): """Faca a tartaruga t desenhar um quadrado com lado tam.""" for i in range(4): t.forward(tam) t.left(90)
i
i é uma variável usada internamente pela função, mas não é um parâmetro passado para a função.
t
t é somente um dos parâmetros para esta função.
t, tam
Sim, a função especifica dois parâmetros: t e tam.
t, tam, i
Os parâmetros incluem somente aquelas variáveis cujos valores a função espera receber como entrada. Eles são especificados no cabeçalho da função.
Q-10: Quais são os parâmetros da seguinte função?
def desenhaQuadrado(t, tam): """Faca a tartaruga t desenhar um quadrado com lado tam.""" for i in range(4): t.forward(tam) t.left(90)
def desenhaQuadrado(t, tam)
Não, t e tam são os nomes dos parâmetros formais desta função. Quando a função é chamada, ela requer que valores reais seja passados à ela.
desenhaQuadrado
Uma chamada de função sempre requer parênteses depois do nome da função.
desenhaQuadrado(10)
Esta função tem dois parâmetros (recebe dois argumentos).
desenhaQuadrado(alex, 10):
Os dois pontos são somente requeridos na definição da função. Eles causarão um erro com a chamada da função.
desenhaQuadrado(alex, 10)
Uma vez que alex já foi definido previamente e 10 é um valor, passamos dois valores válidos para esta função.
Q-11: Considerando a função abaixo, quais dos comandos seguintes chama a função corretamente (i.e., causa a execução da função)? Assuma que já definimos uma tartaruga de nome alex.
def desenhaQuadrado(t, tam): """Faca a tartaruga t desenhar um quadrado com lado tam.""" for i in range(4): t.forward(tam) t.left(90)
Verdadeiro
Sim, você pode chamar uma função várias vezes colocando uma chamada em um laço.
Falso
Uma das finalidades de uma função é permitir que você a chame mais do que uma vez. Colocando a chamada em um laço permite que ela seja executada várias vezes quando o corpo da função for executado várias vezes.
Q-12: Verdadeiro ou Falso: Uma função pode ser chamada várias vezes colocando-se uma chamada para a função no corpo de um laço.
Funções que retornam valores¶
A maioria das funções requerem argumentos, valores que controlam comoa função faz seu serviço. Por exemplo, se você quer encontrar o valorabsoluto de um número, você tem que indicar qual é o valor donúmero. Python tem um função nativa para computar o valor absoluto:
Neste exemplo, os argumentos da função abs
são 5 e -5.
Algumas funções são definidas com mais do que um argumento. Porexemplo, o módulo matemático contém uma função chamadapow
que usa dois argumentos, a base e o expoente.
Note
Note que já vimos que elevar uma base a um expoente pode ser feito com o operador ** .
Outra função nativa que requer mais do que um argumento é a função max
.
max
pode receber qualquer número de argumentos, separados porvírgulas e retornará o maior valor recebido. Os argumentos podem ser ouvalores simples ou expressões. No último exemplo, 503 é retornado, umavez que ele é maior do que 33, 125 e 1. Note que max
tambémfunciona com listas de valores.
Ademais, todas as funções como range
, int
, abs
retornamvalores que podem ser usados para construir expressões mais complexas.
Logo, uma diferença importante entre estas funções e uma comodesenhaQuadrado
é que desenhaQuadrado
não foi executada porquequeríamos que ela computasse um valor — ao contrário, escrevemosdesenhaQuadrado
porque queríamos que ela executasse uma sequênciade passos que causassem à tartaruga desenhar um forma específica.
Funções que retornam valores são chamadas algumas vezes de funçõesfrutíferas. Em muitas outras linguagens, uma função que não retornaum valor é chamado de procedimento. Mas ficaremos aqui com o jeitodo Python e também chamaremos isso de função, ou quando quisermosenfatizar essa propriedade de não retornar valores, chamaremos afunção de não-frutífera.
Funções frutíferas ainda permitem ao usuário fornecer informação(argumentos). Entretanto, existe agora um dado adicional que éretornado da função.
Como escrever funções frutíferas? Vamos começar com uma funçãomatemática bem simples, a função quadrado
. A função quadrado teráum número como parâmetro e retornará o resultado desse número aoquadrado. Segue abaixo um diagrama do código Python seguinte.
O comando return é seguido de uma expressão que é calculada. Seuvalor é retornado a quem chama a função como o fruto da chamada dafunção. Como o comando return pode conter qualquer expressão,podemos evitar de criar a variável temporária y
esimplesmente usar return x*x
.Tente modificar a função quadrado acima para ver se funcionada mesma forma. Por outro lado, usando variáveis temporárias como y
, oprograma acima permite que se encontrem erros mais facilmente. Estasvariáveis temporárias são chamadas de variáveis locais.
Observe algo importante aqui. O nome da variável que passamos como umargumento — aQuadrar
— não tem nada a ver com o nome doparâmetro formal — x
. É como se x = aQuadrar
fosse executadoquando quadrado
é chamado.Não interessa qual o nome da variável que armazenou o valor com o qual a função é chamada. Emquadrado
, o nome da viarável é x
. Você pode ver istoclaramente no codelens, onde as variáveis globais e variáveis locaispara a função quadrado aparecem em lugares separados.
Na medida em que você simula passo-a-passo o exemplo no codelens, noteque o comando return não apenas causa a função retornar o valor,mas também retorna o fluxo de execução de volta ao local do programaonde a função foi chamada.
CodeLens: (ch04_clquadrado)
Outra coisa importante para observar quando você simula os passos nocodelens, é o destaque dos números das linhas. O codelens coloca umaflecha apontando para o número da linha que está sendoexecutada. Quando você começa o codelens você pode notar a flecha queaponta para a linha 1. A próxima linha a ser apontada é a linha 5. Porque isto?Porque a definição de uma função não é o mesmo que a execução dafunção. Linhas 2 e 3 não serão apontadas até que a função sejachamada na linha 6.
Nomes curtos de variáveis são mais econômicos e às vezes facilita aleitura do código:E = mc2 não seria tão memorável se Einstein tivesse usadonomes de variáveis mais compridos! Se você prefere nomes curtos, secertifique de colocar alguns comentários para esclarecer o leitorsobre o papel de cada variável.
Todas as funções em Python retornam None
, a menos queexplicitamente exista um comando return com um valor diferente de None
.Considere o seguinte erro comum feito por programadores iniciantes.Na medida que você faz o passo-a-passo, preste bem atenção no que éimpresso quando a função retorna.
CodeLens: (ch04_clquadrado_ruim)
Rascunho
Teste seu entendimento
Você nunca deve usar o comando print em uma definição de função.
Embora você não deva confundir print com return, você pode incluir comandos print dentro de suas funções.
Você não deveria ter nenhum comando na função depois do comando return. Uma vez que o comando return é atingido, a execução da função para imediatamente.
Este é um erro muito comum. Portanto, preste atenção sobre isso quando você escreve o seu programa.
Você precisa calcular o valor de x+y+z antes de retorná-lo.
O Python calculará automaticamente o valor de x+y+z e então retornará esse valor como está escrito.
Uma função não pode retornar um número.
Funções podem retornar qualquer dado válido, incluindo (mas não limitado a) números, strings, tartarugas, etc.
Q-20: O que está errado com a seguinte definição de função:
def somaEm(x, y, z): return x+y+z print('a resposta é', x+y+z)
Nada (nenhum valor)
Acidentalmente usamos print onde deveríamos ter usado return. Este erro é MUITO COMUM, portanto cuidado! Ele também é particularmente difícil de achar porque quando você roda a função a saída parece a mesma. Somente quando você tenta atribuir seu valor a uma variável é que você nota a diferença.
O valor de x+y+z
Cuidado! Este é um erro muito comum. A função imprime o valor de x+y+z mas não o retorna. Para retornar o valor você PRECISA usar o comando return.
O string ‘x+y+z’
x+y+z calcula o número (assumindo que x, y e z são números) que representa a soma dos valores x, y e z.
Q-21: O que a seguinte função retorna?
def somaEm(x, y, z): print(x+y+z)
Variáveis e parâmetros são locais¶
Um comando de atribuição em uma função cria uma variável localpara a variável à esquerda do =. Esta variável existe somente dentroda função e não pode ser usada fora dela. Por exemplo, considerenovamente a função quadrado
:
CodeLens: (local_ruim)
Quando você pressionar o botão ‘last >>’, você verá uma mensagem deerro. Quando tentamos usar y
na linha 6 (fora da função), Pythonprocura uma variável global chamada y
mas não a encontra. Istoresulta no erro: NameError: name 'y' is not defined.
A variável y
existe somente enquanto a função está sendo executada— chamamos isso de sua duração.Quando a execução da função termina (retorna), as variáveis locais sãodestruídas. Codelens ajuda você a visualizar isto porque as variáveislocais desaparecem depois que a função retorna.
Parâmetros formais são também locais e funcionam como variáveislocais. Por exemplo, a duração de x
se inicia quando quadrado
échamado e termina quando a função completa sua execução.
Logo, não é possível para uma função atribuir para alguma variávellocal algum valor, completar sua execução, e então quando ela échamada outra vez, recuperar o valor da variável local. Cada chamadada função cria novas variáveis locais e sua duração termina quando afunção retorna para quem a chamou.
Reciprocamente, a função pode acessar uma variável global. Mas isto éconsiderado péssima programação por quase todos osprogramadores. Veja a seguinte variação sem sentido da função quadrado.
Embora a função quadradoruim
funcione, ela está escrita de formaestúpida e pobre. Mas ela ilustra uma regra importante sobre comovariáveis são procuradas em Python.Primeiro, Python procura para variáveis que são definidas localmentena função. Chamamos isso de escopo local. Se o nome da variávelnão é encontrado no escopo local, então Python procura nas variáveisglobais, ou escopo global. Isto é exatamente o caso ilustrado nocódigo acima. expoente
não é encontrada localmente emquadradoruim
mas ela existe globalmente.A forma apropriada de escrever esta função seria passar expoente comoparâmetro.Para praticar, você deveria reescrever quadradoruim para ter umsegundo parâmetro chamado expoente.
Atribuições locais nas funções não podem mudar variáveis definidasfora da função. Considere o seguinte exemplo em codelens:
CodeLens: (cl_expoentede_ruim)
Agora percorra o código passo-a-passo. O que você nota dos valores deexpoente
no escopo local comparado ao escopo global?
O valor de expoente
no escopo local ficou diferente do valor doescopo global.Isto é porque no exemplo expoente
foi usado do lado esquerdo daatribuição expoente = p
. Quando o nome de uma variável aparece dolado esquerdo de um atribuição, Python cria uma variável local.Quando uma variável local tem o mesmo nome de uma variável global,dizemos que a variável local esconde a global. Isso quer dizer que avariável global não pode ser acessada porque a variável local éencontrada primeiro. Esta é outra boa razão para não usar variáveisglobais. Como você pode ver, torna o seu código confuso e difícil deentender.
Para consolidar todas estas ideias, vamos olhar em um exemplofinal. Dentro da função quadrado
vamos fazer uma atribuição para oparâmetro x
. Não há nenhum bom motivo para fazer isto se não paraenfatizar o fato de que o parâmetro x
é uma variável local. Sevocê simular passo-a-passo no codelens o exemplo, você verá que emborax
é 0 como variável local em quadrado
, x permanece 2 no escopoglobal.Isto é confuso para muitos iniciantes que pensam que uma atribuiçãopara um parâmetro formal causará uma mudança ao valor da variável quefoi usada como parâmetro real; especialmente quando as duascompartilham o mesmo nome.Mas este exemplo demonstra claramente que não é assim que Pythonfunciona.
CodeLens: (cl_muda_parm)
Rascunho
Teste seu entendimento
- Seu valor.
- Valor é o conteúdo da variável. Escopo diz respeito a onde a variável é "conhecida".
- O trecho de código onde a variável tem um certo valor.
- Seu nome.
- O nome de uma variável é apenas um identificador ou apelido. Escopo diz respeito a onde a variável é "conhecida".
Q-27: Qual é o escopo de uma variável?
- Uma variável temporária que é usada apenas dentro de uma função.
- Sim, uma variável local é uma variável temporária que é somente conhecida na função e definida nela.
- O mesmo que parâmetro.
- Enquanto parâmetros podem ser considerados variáveis locais, funções podem também definir e usar variáveis locais adicionais.
- Outro nome para qualquer variável.
- Variáveis que são usadas fora de uma função não são locais, mas variáveis globais.
Q-28: O que é uma variável local?
- Sim, e não há motivo para não o fazer.
- Enquanto não há problema nenhum em Python, é geralmente considerado um mau estilo pelo potencial do programa ficar confuso.
- Sim, mas é considerado ruim.
- Isto é geralmente considerado mau estilo pelo potencial do programa ficar confuso. Se você precisa usar variáveis globais (também considerado ruim), se certifique de que elas têm nomes únicos.
- Não, isso causará um erro.
- Python gerencia escopo de variáveis globais e locais separadamente e tem regras claras para como tratar variáveis com o mesmo nome em escopos diferentes, de forma que isso não causará erro em Python.
Q-29: Você pode usar o mesmo nome para uma variável local e para uma variável global?
O Padrão de Acumulação¶
No exemplo anterior, escrevemos uma função que calcula o quadrado de um número.O algoritmo que usamos na função era simples: multiplique o número por ele mesmo.Nesta seção iremos reescrever a função quadrado e usar um algoritmo diferente,um que se baseia na adição em vez da multiplicação.
Se você quer multiplicar dois números, o enfoque mais básico é pensar dissocomo um processo de somar um número a ele mesmo. O número de repetições é ondeo segundo número aparece. Por exemplo, se queremos multiplicar três por cinco, podemospensar nisso como somando três a ele mesmo cinco vezes. Três mais três é seis,mais três é nove, mais três é doze e, finalmente, mais três é quinze.Generalizando, se queremos implementar a ideia do quadrado de um número, chamando-o de n,nós somaríamos n a ele mesmo n vezes.
Faça isto na mão e tente isolar exatamente os passos que você faz.Você descobrirá que você precisa manter alguma “soma parcial” da somaaté o momento, ou em algum pedaço de papel, ou em suacabeça. Lembrando coisas de um passo ao passo seguinte é precisamente o motivopelo qual temos variáveis no programa. Isto quer dizer que precisaremos dealguma variável para lembrar da “soma parcial”. Ela deve serinicializada com o valor zero. Então, precisamos atualizar a“soma parcial” um número correto de vezes. Para cada repetição,queremos atualizar o total somando o número à soma.
Em palavras, poderíamos dizer o seguinte. Para quadrar o valor de n,repetimos o processo de atualizar a soma parcial n vezes. Paraatualizar o total, tomamos o valor antigo de “soma parcial” e somamosn. A soma se torna o novo valor de “soma parcial”.
Aqui está o programa em activecode. Note que a definição da função é amesma que era antes. Tudo que mudou são os detalhes de como o quadradoé feito.Este é um grande exemplo de projeto “caixa preta”.Podemos mudar os detalhes dentro da caixa e ainda assim usar a funçãoexatamente como a usávamos antes.
Note
O que acontece se colocarmos a atribuição somaparcial = 0
dentro do comando for? Tem dúvidas? Teste e descubra.
No programa acima, note que o variável somaparcial
começa com ovalor 0. Em seguida, a iteração é feita x
vezes. Dentro do laço dofor, a atualização ocorre. somaparcial
é atualizada com um novovalor que é o valor antigo mais o valor de x
.
Este padrão de iteração da atualização da variável é chamada comumentecomo padrão de acumulação. Nos referimos à variável como oacumulador. Este padrão aparece repetidas vezes. Lembre que achave para fazer isto funcionar com sucesso é se certificar que avariável é inicializada antes de você começar as iterações.Uma vez dentro da iteração, é requerido que você atualize o acumulador.
Aqui vai um exemplo do mesmo problema em codelens.Faça o passo-a-passo do programa e veja como a “somaparcial” acumula o resultado.
CodeLens: (sq_accum3)
Rascunho
Teste seu entendimento
A função quadrado irá retornar x em vez de x*x.
A variável somaparcial será reinicializada com 0 cada vez que houver um iteração do laço. Entretanto, como esta atribuição é o primeiro comando, o próximo comando no laço colocará seu valor de volta para x. Quando o laço termina ele terá o valor de x, que é retornado.
A função quadrado causará um erro.
Atribuições são perfeitamente válidas dentro de laços e não causará um erro.
A função quadrado funcionará como esperado devolvendo x*x.
Colocando a atribuição que atribui zero à somaparcial dentro do laço, a atribuição é executada cada vez que o laço é iterado, em vez de uma vez antes que o laço comece. O resultado é que a somaparcial é zerada (reinicializada com 0) cada vez que o laço é iterado.
A função quadrado retornará 0 em vez de x*x.
A linha somaparcial = 0 é a primeira linha do laço for, mas imediatamente depois dessa linha, a linha somaparcial = somaparcial + x é executada, dando à somaparcial um valor diferente de zero (assumindo que x é diferente de zero).
Q-34: Considere o seguinte código:
def quadrado(x): somaparcial = 0 for cont in range(x): somaparcial = somaparcial + x return somaparcial
O que acontece se você coloca a inicialização de somaparcial (a linha somaparcial = 0) dentro do laço for como o primeiro comando do laço?
Funções podem chamar outras funções¶
É importante entender que cada uma das funções que a gente escrevepode ser usada e chamada pelas outras funções que a genteescreve. Esta é uma das mais importantes formas que permitem quecientistas da computação peguem um problema grande e o quebrem em umgrupo de problemas menores. Este processo de quebrar um problema emsubproblemas menores é chamado de decomposição funcional.
Aqui vai um exemplo simples de decomposição funcional usando duasfunções. A primeira, chamada quadrado
simplesmente computa oquadrado de um dado número. A segunda, chamada desoma_de_quadrados
usa a função quadrado para determinar a soma doquadrado de três números.
CodeLens: (somadequadrados)
Embora esta seja uma ideia muito simples, na prática este exemploilustra muitos conceitos importantes em Python, incluindo variáveislocais e globais junto com passagem de parâmetros. Note que quandovocê faz o passo-a-passo no exemplo, codelens aponta para alinha 1 e depois linha 5, onde as funções foram definidas.O corpo da função quadrado não é executado até que ela seja chamada dafunção soma_de_quadrados
pela primeira vez na linha 6. Tambémobserve que quando quadrado
é chamada existem dois grupo devariáveis locais, uma para quadrado
e outra parasoma_de_quadrados
. Quando você avança no passo-a-passo, vocênotará que x
e y
são variáveis locais em ambas as funções epodem mesmo ter valores diferentes. Isso ilustra que mesmo tendo omesmo nome, elas são completamente diferentes.
Vamos olhar em um outro exemplo que usa duas funções e ilustra outratécnica importante de resolução de problemas chamadageneralização. Vamos assumir que queremos escrever uma função paradesenhar um quadrado. O passo de generalização é perceber que oquadrado é apenas um tipo especial de retângulo.
Para desenhar um retângulo precisamos ser capazes de chamar a funçãocom argumentos diferentes para largura e altura. Diferente do caso doquadrado, não podemos repetir a mesma coisa 4 vezes, porque os quatrolados não são iguais.Entretanto, é o caso que desenhar os lados de baixo e direito é amesma sequência para desenhar os lados de cima e esquerdo. Logo,podemos chegar no seguinte código bacana para desenhar um retângulo.
def desenhaRetangulo(t, w, h): """Faca a tartaruga t desenhar um retangulo de largura w e altura h.""" for i in range(2): t.forward(w) t.left(90) t.forward(h) t.left(90)
Os nomes dos parâmetros foram escolhidos deliberadamente com uma únicaletra para assegurar que eles não são confundidos. Em programasreais, uma vez que você tenha mais experiência, insistiremos em nomesde variáveis melhores do que este.O ponto é que o programa não “entende” que você está desenhando umretângulo ou que os parâmetros representam a largura e aaltura. Conceitos como retângulo, largura e altura são significadosque os humanos têm, não conceitos que o programa ou o computadorentendem.
Como pensar como um cientista da computação envolve procurar porpadrões e relações. No código acima, fizemos isso até certo ponto. Nãoapenas desenhamos quatro lados. Em vez disso, percebemos quepodíamos desenhar um retângulo como duas metades e usamos um laçopara repetir duas vezes o padrão.
Mas agora podemos perceber que um quadrado é um caso especial de umretângulo. Um quadrado simplesmente usa o mesmo valor para a largura ealtura. Já temos uma função para desenhar um retângulo, logo a podemosusar para desenhar nosso quadrado.
def desenhaQuadrado(tx, tam): # uma nova versao de desenhaQuadrado desenhaRetangulo(tx, tam, tam)
Here is the entire example with the necessary set up code.
Alguns pontos que valem a pena ser notados:
Funções podem chamar outras funções.
Reescrever desenhaQuadrado como fizemos captura a relação que foi percebida.
A função pode ser chamada como desenhaQuadrado(tess, 50). Aosparâmetros da função,
tx
etam
, são atribuídos os valores doobjeto tess e o int 50 respectivamente.No corpo da função os parâmetros são apenas como qualquer outra variável.
Quando a chamada para desenhaRecangulo é feita, os valores nasvariáveis tx e tam são atribuídos primeiro, e depois a chamadaocorre. Logo, quando entramos no início da funçãodesenhaRetangulo, sua variável t recebe o objeto tess, w eh naquela função recebem ambos o valor 50.
Até agora, pode não estar claro porque vale a pena se dar ao trabalhode criar todas essas funções novas. Na verdade, existe um monte demotivos, mas este exemplo mostra dois:
Criar uma função dá a você uma oportunidade de dar nome a um grupode comandos. Funções podem simplificar um programa escondendo umacomputação complexa atrás de um único comando. A função, incluindoseu nome, pode capturar a decomposição, ou abstração, do problemaque você tem em mente.
Criar uma nova função pode tornar o programa menor porque códigorepetitivo é eliminado.
Algumas vezes você pode escrever funções que permitem resolver umproblema específico usando uma solução mais geral.
Lab
Como Desenhar uma Circunferência Neste exercíciode laboratório trabalhamos no problema de desenhar umacircunferência com a tartaruga.
Rascunho
Sumário do fluxo de execução¶
Quando você está trabalhando com funções é realmente importante sabera ordem em que os comandos são executados. Isto é chamado de o fluxo deexecução e já falamos disso um certo número de vezes neste capítulo.
Execução sempre começa no primeiro comando do programa. Comandos sãoexecutados um de cada vez, em ordem, de cima para baixo.Definições de funções não alteram o fluxo de execução do programa, maslembre-se de que os comandos dentro da função não são executados amenos que a função seja chamada.
Chamadas de funções são como desvios do fluxo de execução. Em vez deir para o próximo comando, o fluxo pula para a primeira linha dafunção chamada, executa todos os comandos de lá, e então volta paracontinuar de onde tinha parado.
Isso soa bastante simples, até você lembrar que uma função pode chamaroutra função. Enquanto no meio de uma função, o programa pode ter queexecutar os comandos de uma segunda função. Mas enquanto executando asegunda função, o programa pode ter que executar ainda uma terceirafunção!
Felizmente, Python mantem controle de onde ele está em cada função, ecada vez uma função termina, o programa volta para onde tinha paradoquando a função foi chamada. Quando o fim do programa é atingido, eletermina.
Qual a moral deste conto sórdido? Quando você lê um programa, não oleia de cima a baixo. Em vez disso, siga o fluxo de execução. Sobrisco de soar repetitivo, isto quer dizer que você lerá asdeclarações def enquanto percorre o código de cima para baixo, masvocê deve pular o corpo da função até encontrar o ponto onde a funçãoé chamada.
Rascunho
Teste seu entendimento
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Embora o Python tipicamente processe as linhas de cima para baixo, as definições de funções e chamadas são exceções à essa regra.
1, 2, 3, 5, 6, 7, 9, 10, 11
Embora o Python tipicamente processe as linhas de cima para baixo, as definições de funções e chamadas são exceções à essa regra. Embora essa ordem pule linhas em branco, continua uma lista ordenada das linhas.
9, 10, 11, 1, 2, 3, 5, 6, 7
Esta está quase certa, no sentido de que o Python não executará as funções até elas serem chamadas, mas existem dois problemas aqui. Primeiro, o Python não sabe em quais linhas estão as definições de funções até que elas sejam processadas, de forma que ele precisa pelo menos processar o cabeçalho da função antes de pular as funções. Segundo, observe que a linha 10 contém uma chamada de função. O Python precisa executar a função quadrado antes de ir para a linha 11.
9, 10, 5, 6, 7, 1, 2, 3, 11
Esta está quase certa, no sentido de que o Python não executará as funções até elas serem chamadas, mas existe um problema aqui. O Python não sabe em quais linhas estão as definições de funções até que elas sejam processadas, de forma que ele precisa pelo menos processar o cabeçalho da função antes de pular as funções.
1, 5, 9, 10, 6, 2, 3, 7, 11
Python começa na linha 1, percebe que é uma definição de função e pula todas as linhas da definição da função até ele encontrar uma linha que não está incluída na função (linha 5). Ele então percebe que a linha 5 também é uma definição de função e pula novamente o corpo da função até a linha 9. Na linha 10 ele percebe que tem que executar uma função, logo ele volta e executa o corpo da função. Observe que aquela função inclui outra chamada de função. Finalmente, ele voltará para a linha 11 depois da função quadrado terminar.
Q-39: Considere o seguinte código em Python. Observe que os números das linhas estão incluídos à esquerda.
1 def pot(b, p):2 y = b ** p3 return y45 def quadrado(x):6 a = pot(x, 2)7 return a89 n = 510 resultado = quadrado(n)11 print(resultado)
Quais dos seguintes melhor reflete a ordem em que as linhas de código são processadas em Python?
- 25
- A função quadrado retorna o quadrado de sua entrada (através de uma chamada à pot).
- 5
- O que é impresso é a saída da função quadrado. 5 é a entrada da função quadrado.
- 125
- Observe que pot é chamada dentro da função quadrado com a base (b) de 5 e a potência (p) de dois.
- 32
- Observe que pot é chamada dentro da função quadrado com a base (b) de 5 e a potência (p) de dois.
Q-40: Considere o seguinte código em Python. Observe que os números das linhas estão incluídos à esquerda.<pre>1 def pot(b, p):2 y = b ** p3 return y45 def quadrado(x):6 a = pot(x, 2)7 return a89 n = 510 resultado = quadrado(n)11 print(resultado)</pre>O que esse programa imprime?
Um Diagrama de Barras de uma Tartaruga¶
Lembre-se da nossa discussão de módulos que eles eram um certo númerode coisas que tartarugas podem fazer.Aqui vão mais uns dois truques (lembre-se que eles estão todosdescritos na documentação do módulo).
Podemos fazer uma tartaruga mostrar texto no canvas na posiçãoatual da tartaruga. O método é chamado write.Por exemplo,
alex.write("Alo")
escreveria o string Alo naposição atual.Podemos preencher um perfil (circunferência, semi-circunferência, triângulo, etc)com uma cor. É um processo de dois passos. Primeiro você chama ométodo begin_fill, por exemplo
alex.begin_fill()
. Então vocêdesenha o perfil. Finalmente, você chama end_fill (alex.end_fill()
).Previamente nós atribuímos a cor da nossa tartaruga - podemos tambémagora atribuir sua cor de preenchimento, que não precisa ser a mesmada tartaruga nem da caneta. Para fazer isso, usamos o método chamado fillcolor,por exemplo,
alex.fillcolor("red")
.
Bom, então podemos fazer tess desenhar um diagrama de barras? Vamoscomeçar com alguns dados,
xs = [48, 117, 200, 240, 160, 260, 220]
Correspondendo a cada medida, vamos desenhar um retângulo simplesdaquela altura, com uma largura fixa.Aqui é o que queremos criar.
Podemos rapidamente ver que desenhando uma barra será similar adesenhar um retângulo ou um quadrado. Uma vez que precisamos fazerisso um certo número de vezes, faz sentido criar uma função,desenhaBarra
, que necessitará da tartaruga e altura dabarra. Assumiremos que a largura da barra será de 40 unidades. Uma vezescrita a função, podemos usá-la em um laço simples para processar a listados valores dados.
def desenhaBarra(t, altura): """Faca a tartaruga t desenhar uma barra, de altura `altura`.""" t.left(90) # Apontar t.forward(altura) # Desenha o lado esquerdo t.right(90) t.forward(40) # largura da barra no topo t.right(90) t.forward(altura) # e abaixo novamente! t.left(90) # coloca a tartaruga na posição que a encontramos...for v in xs: # assuma que xs e tess estão prontas desenhaBarra(tess, v)
É um bom começo! O que é importante aqui é a decomposição que temos emmente. Para resolver o problema, primeiro o quebramos em pedaçosmenores. Em particular, nosso pedaço é desenhar um barra. Nós, então,implementamos esse pedaço com uma função. Depois, para todo odiagrama, chamamos repetidamente nossa função.
Em seguida, acima de cada barra, imprimimos o valor do dado.Faremos isso no corpo do desenhaBarra
, adicionando t.write(' ' + str(altura))
como a terceira linha do corpo.Colocamos um pequeno espaço em frente do número, e transformamos onúmero em string. Sem esse espaço extra o texto poderia ficar grudado com abarra à esquerda.Finalmente, adicionamos os dois método necessários para preencher cadabarra.
Um problema restante está relacionado com o fato de que nossatartaruga vive em um mundo onde o centro é a posição (0,0). Nesteproblema, ajudaria se (0,0) fosse no canto inferior esquerdo. Pararesolver isso, podemos usar nosso método setworldcoordinates
pararedimensionar a janela. Enquanto isso, devemos fazer os dados caberemna janela. A barra mais alta corresponde ao maior valor dos dados. alargura da janela necessitará ser proporcional ao número de barras (onúmero dos valores dados) onde cada um tem a largura de 40. Usandoessa informação, podemos computar o sistema de coordenadas que fazemsentido para o conjunto de dados. Para melhorar a aparência do diagrama,adicionamos um pouco de espaço embaixo e à esquerda como uma moldura.
Aqui vai o programa completo. Teste-o e então mude os dados para verque ele se adapta aos novos valores.
Rascunho
Glossário¶
- argumento
Um valor fornecido para uma função quando a função échamada. Este valor é atribuído ao parâmetro correspondente nafunção. O argumento pode ser o resultado de uma expressão quepode envolver operadores, operandos e chamadas a outras funçõesfrutíferas.
- chamada de função
Um comando que executa uma função. Ele consiste do nome dafunção seguido por uma lista de argumentos entre parênteses.
- comando composto
Um comando que consiste de duas partes:
cabeçalho - que começa com uma plavra reservadadeterminando o tipo do comando e que termina com doispontos (:).
corpo - contendo um ou mais comando tabulados igualmente apartir do cabeçalho.
A sintaxe de um comando composto se assemelha com:
palavra-reservada expressão: comando comando ...
- composição de funções
Usando a saída de uma função como entrada de outra função.
- corpo
A segunda parte de um comando composto. O corpo consiste deuma sequência de comandos todos igualmente tabulados a partirdo começo do cabeçalho. A quantidade padrão de tabulação usadapela comunidade do Python é 4 espaços.
- declaração import
uma declaração que permite funções e variáveis definidas emoutro módulo de Python serem trazidas ao ambiente de outroscript. Para usar as construções da tartaruga, precisamosprimeiro importar o módulo turtle.
- definição de função
Uma declaração que cria uma nova função, especificando o seunome, parâmetros e os comandos que ela executa.
- duração
Variáveis e objetos tem duração — eles são criado em algumponto durante a execução do programa e são destruídos em algumoutro ponto.
- docstring
Se a primeira coisa no corpo da função (ou, comoveremos mais tarde, em outros lugares também) é um string, ele é anexadoà função como seu atributo
__doc__
.- fluxo de execução
A ordem em que comandos são executados durante a execução deum programa.
- função
Uma sequência de comandos com um nome que executa operaçõesúteis. Funções podem ou não ter parâmetros e podem ou nãoproduzir um resultado.
- função frutífera
Uma função que retorna um valor quando ela é chamada.
- linha de cabeçalho
A primeira parte de um comando composto. O cabeçalho começacom uma palavra reservada a termina com dois pontos (:).
- parâmetro
Um nome usado dentro de uma função para se referir ao valorque foi passado a ela como um argumento.
- refatorar
Processo de reorganizar o código de seu programa,usualmente para torná-lo mais fácil de entender. Tipicamente,temos um programa que já está funcionando, então voltamos parafazer uma “arrumação”. Em geral envolve escolher nomesmelhores para as variáveis ou perceber um padrão repetido emover esse código para uma função.
- variável local
Uma variável definida dentro de uma função. Uma variável localpode somente ser usada em sua função. Parâmetros de umafunção são também um tipo especial de variável local.
Exercícios¶
Use a função desenhaquadrado que escrevemos neste capítulo em umprograma para desenhar a imagem abaixo. Assuma que cada lado mede20 unidade. (Dica: note que a tartaruga já se moveu do ponto finaldo último quadrado quando o programa termina.)
Escreva um programa para fazer o desenho abaixo. Assuma que o ladodo quadrado mais interno tem 20 unidade e cada quadrado tem lado20 unidades maior do que o anterior.
Escreva uma função não-frutífera desenhaPoli(t, numeroLados, tamanho)que faz a tartaruga t desenhar um polígono regular com numeroLadoslados, cada um de comprimento tamanho.Quando chamada com desenhaPoli(tess, 8, 50), ela desenhará algo como:
Desenhe o seguinte padrão.
As duas espirais abaixo diferem apenas pelo ângulo devirada. Desenha as duas.
Escreva uma função não-frutífera desenhaTrianguloEqui(t, tamanho)que chama desenhaPoli de um exercício anterior parafazer a tartaruga t desenhar um triângulo equilátero com lados decomprimento tamanho.
Escreva uma função frutífera somaAte(n) que retorna a soma detodos os naturais até e incluindo n. Por exemplo, somaAte(10)deve ser 1+2+3…+10 que retornaria o valor 55. Use a equação n*(n + 1)//2.
Escreva uma função areaDeCirculo(r) que retorna a área de umcírculo de raio r. Use o módulo math na sua solução.
Escreva uma função não-frutífera para desenhar uma estrela decinco pontas, onde o comprimento de cada lado é 100 unidades.
Estenda seu programa acima. Desenha cinco estrelas, mas entre umae outra, levante a caneta, a mova para a frente por 350 unidades,vire à direita por 144 graus, abaixe a caneta e desenhe a próximaestrela. Você obterá algo como:
Como ficaria se você não levantasse a caneta?
Estenda a função estrela para desenhar uma estrela de n pontas. (Dica: nprecisa ser um inteiro ímpar maior ou igual a 3.)
Escreva uma função chamada desenheSprite que desenha um sprite.A função necessitará de parâmetros para a tartaruga, o número depernas e o comprimento das pernas. Chame a função para criar umsprite de 15 pernas de comprimento 120.
Reescreva a função somaAte(n) que retorna a soma a soma de todosos naturais até e incluindo n. Desta vez use o padrão de acumulação.
Escreva uma função chamada raizQ que aproxima a raiz quadrada deum número, digamos n, usando o algoritmo de Newton.O método de Newton é um algoritmo iterativo que começa chutandoinicialmente o valor n/2 para a raiz e cada chute subsequente écomputado usando a fórmula: proximoChute = (velhoChute+n/velhoChute)/2.
Escreva uma função chamada meuPi que retorna uma aproximaçãopara PI (3.14159…). Use a aproximação de Liebniz descrita em aula.
Escreva uma função chamada meuPi que retorna uma aproximaçãopara PI (3.14159…). Use a aproximação de Madhava descrita em aula.
Escreva uma função chamada quadradoBonito que desenha umquadrado com os cantos bonitos (sprites nos cantos). Você deveimplementar e usar a função desenhaSprite acima. Para umaaparência ainda mais interessante, que tal adicionar pequenostriângulos no fim das pernas do sprite?
Rascunho
FAQs
O que um cientista da computação pode fazer? ›
O cientista da computação além de desenvolver estruturas e soluções computacionais, também trabalha na infraestrutura dos sistemas, implantação de redes, controle da internet, desenvolvimento de aplicativos, gerenciamento de equipes, instalação de programas e muito mais.
Como pensar como um cientista? ›...
Tente aplicar conscientemente os seguintes hábitos mentais ao mundo natural à sua volta:
- Questione o que observa. ...
- Investigue mais. ...
- Seja cético. ...
- Tente refutar as suas próprias ideias.
O que é ciência da computação? É a ciência exata que estuda dispositivos, ferramentas tecnológicas e metodologias computacionais, que informatizam ou automatizam processos, de modo que se criem soluções tecnológicas por meio de processamento de dados.
Qual o valor do salário de um cientista? ›No cargo de Cientista se inicia ganhando R$ 4.722,00 de salário e pode vir a ganhar até R$ 7.924,00. A média salarial para Cientista no Brasil é de R$ 7.022,00. A formação mais comum é de Graduação em Farmácia e Bioquímica.
Qual o salário de um cientista de dados? ›Qual é o salário de Cientista De Dados? O salário médio nacional de Cientista De Dados é de R$8.735 em Brasil. Filtre por localização para ver os salários de Cientista De Dados na sua região.
Como deve ser o perfil de um cientista? ›O perfil do profissional cientista
Acima de tudo, é importante mencionar que a carreira científica exige muito pensamento crítico. Além do mais, é necessário que o profissional seja curioso, estudioso, criativo e inovador.
- Análise e Desenvolvimento de Sistemas.
- Banco de Dados.
- Ciências da Computação.
- Engenharia da Computação.
- Engenharia de Telecomunicações.
- Gestão da Tecnologia da Informação.
- Informática.
- Redes de Computadores.
A resposta é: várias. De Engenharia de Software, Ciência da Computação, Sistemas de Informação, Tecnologia da Informação até mesmo nenhuma – o aprendizado autodidata acompanha a carreira de todo bom programador.
Qual é o salário de um cientista nos Estados Unidos? ›O salário médio nacional de Data Scientist é de $120.000 em Estados Unidos. Filtre por localização para ver os salários de Data Scientist na sua região. As estimativas de salários têm como base os 27.998 salários enviados de forma sigilosa ao Glassdoor por funcionários com o cargo de Data Scientist.
Qual o cientista mais bem pago do mundo? ›Elon Musk é o homem mais rico do mundo. Empreendedor conhecido por ser o CEO da Tesla Motors e fundar diversas companhias como a SpaceX (empresa de foguetes espaciais) e a SolarCity (empresa de baterias e painéis de energia solar). Segundo a revista Forbes, a fortuna do Elon Musk é avaliada em US$ 219 bilhões.
Qual é o salário de um cientista da NASA? ›
Qual o salário de um astronauta? De acordo com a página oficial de perguntas e respostas da National Aeronautics and Space Administration (NASA), a agência espacial dos Estados Unidos, um astronauta novato, que acabou de ser recrutado, recebe em média US$ 63.600 anuais, o que dá em torno de R$ 244 mil.
Quanto ganha um Data Scientist Nubank? ›Qual é a comparação do salário de Data Scientist na empresa Nubank com a faixa salarial base do cargo? A média salarial de Data Scientist é de R$ 8.735 por mês em Brasil, que é 37% menor do que a média salarial mensal da empresa Nubank para essa vaga, que é de R$ 14.054.
Quanto ganha um Cientista De Dados da Amazon? ›Qual é o salário de Data Scientist na empresa Amazon? Os salários de Data Scientist na Amazon estão entre R$18.389 e R$23.108.
Qual o salário de um desenvolvedor de software? ›Desenvolvedor de Software é uma das profissões mais valorizadas na área de tecnologia com remuneração de R$7.492,00. Segundo o Glassdoor, a mediana salarial de Desenvolvedor de Software junior é de R$5.067,50, e para profissionais seniores, a mediana salarial é de R$12.069,00.
Qual é a rotina de trabalho de um cientista? ›O trabalho de um cientista pesquisador é quase inteiramente baseado em laboratório, com responsabilidades que incluem: Planejamento e realização de experimentos. Gravação e análise de dados. Realização de trabalho de campo, por exemplo, coleta de amostras.
Quem quer ser cientista sai do Brasil? ›“Quem quer ser cientista, sai do Brasil; quem não quer sair do Brasil, sai da ciência”, diz Ribeiro. “É uma perda muito grande, porque cada pessoa dessas tem décadas de formação financiadas pelo Estado. E isso é complicado, pois não existe uma posição soberana para o país sem ciência e tecnologia.
O que motiva um cientista a fazer o seu trabalho? ›Além da curiosidade e do bem-estar dos pacientes, existem outros fatores que ajudam os cientistas e empresas a superar desafios em pesquisa e desenvolvimento. Um aspecto importante é o foco em áreas centrais, o que nos permite realizar pesquisas com experiência e recursos comprovados.
Que tipo de formação é preciso para ser cientista? ›Mas existem alguns cursos que podem facilitar o andamento da sua carreira como pesquisador científico. As áreas de Exatas e Biológicas, por exemplo, têm um campo bem amplo para pesquisas. Algumas opções de graduações são: Farmácia, Biologia, Física e Química.
Qual é a responsabilidade de um cientista? ›Os cientistas são responsáveis por conduzir e comunicar o trabalho científico com integridade, respeito, justiça, confiabilidade e transparência, e por considerar as consequências de novos conhecimentos e sua aplicação.
Quem é o maior cientista do mundo? ›1. Albert Einstein (1879 - 1955) Todo mundo já ouviu falar do físico e matemático alemão Albert Einstein. Seu nome é sinônimo de genialidade e até hoje ele é considerado um dos maiores cientistas do mundo.
Quais são os 5 principais cientistas? ›
Pergunte a qualquer pessoa quais são os cientistas mais importantes da humanidade e nomes como Albert Einstein, Isaac Newton, Galileu Galilei, Stephen Hawking e Charles Darwin provavelmente estarão na lista.
Quais são os 4 tipos de ciências? ›- Ciências Exatas e da Terra.
- Ciências Biológicas.
- Engenharias.
- Ciências da Saúde.
- Ciências Humanas.
- Ciências Agrárias.
- Ciências Sociais Aplicadas.
- Linguística, Letras e Artes.
1 – Segurança da Informação. Essa é uma das áreas de TI mais bem pagas para os iniciantes, afinal, a segurança da informação é essencial em qualquer empresa. O profissional que começa trabalhando nesse setor recebe, em média, cerca de R$ 2100, podendo chegar a até R$ 9000.
Qual a melhor área de informática para ganhar dinheiro? ›- Desenvolvimento de sistemas.
- Administração de banco de dados.
- Business Intelligence.
- Usabilidade (UX)
- Segurança da informação.
- Gestão de projetos.
- Engenharia de software.
Sim, porém é importante destacar que isso demanda esforço e dedicação, pois você irá ter que aprender coisas novas e adquirir novas habilidades. Mas antes de tudo você deve saber que essa é uma decisão que deve ser bem pensada, que não pode ser tomada por impulso.
Quais áreas de programação estão em alta? ›- Python. Python é uma linguagem de programação de alto nível e para propósitos diversos. ...
- C# C# é uma linguagem de programação orientada a objetos – um modelo que organiza o design de software ao redor de objetos. ...
- C++ ...
- JavaScript. ...
- PHP. ...
- Swift. ...
- Java. ...
- Go.
Acho que o curso que menos irá ter matemática, será o Gestão de TI, que cuida mais da parte burocrática da área, ciência da computação, eng. da computação e ads tem cálculo na grade curricular.
Qual a linguagem de programação que dá mais dinheiro? ›- Full Cycle.
- DevOps.
- Mobile.
- Back-End.
- Full Stack.
- Front-End.
Em geral, leva cerca de dois a seis meses para aprender os fundamentos básicos, considerando que este seja o seu primeiro contato com a linguagem de programação. Nesse período de tempo, você consegue aprender o suficiente para escrever seu primeiro programa curto em questão de minutos.
Qual a idade ideal para aprender a programar? ›Nesse sentido, a idade ideal para aprender a programar é a partir dos 7 anos de idade, e é importante que as crianças tenham acesso a um ensino de programação que consiga estimular a participação ativa no próprio processo de aprendizado.
Qual é a profissão que dá mais dinheiro? ›
1 – Engenharia de Software. 2 – Desenvolvedor Web. 3 – Analista de Dados. 4 – Profissional de Marketing Digital.
Quanto ganha um Data Scientist no Brasil? ›O salário médio nacional de Data Scientist é de R$8.735 em Brasil. Filtre por localização para ver os salários de Data Scientist na sua região. As estimativas de salários têm como base os 1.806 salários enviados de forma sigilosa ao Glassdoor por funcionários com o cargo de Data Scientist.