Esses subproblemas têm o nome de funções.
Funções possibilitam abstrair, ou seja permite capturar a computação realiza e tratá-la como primitiva.
Um programa simples seria:
if x > y:
z = x
else:
z = y
A ideia é encapsular essa computação dentro de um escopo que pode ser tratado como primitiva.
Uma função tem 3 partes importantes:
def <nome> ( <parametros> ):
<corpo da função>
def
é uma palavra chave
<nome>
é qualquer nome aceito pelo Python<parametros>
é a quantidade de parâmetros que será passado para a função (pode ser nenhum).<corpo da função>
contém o código da função.Voltando ao exemplo:
In [1]:
def maximo(x, y):
if x > y:
z = x
else:
z = y
Ótimo temos uma função e podemos reaproveita-la. Porém, para de fato reaproveita-la temos que utilizar o comando return
.
In [2]:
def maximo(x, y):
if x > y:
return x
else:
return y
Pronto agora sim! Já podemos reaproveitar nossa função!
E como fazer isso?
In [3]:
z = maximo(3, 4)
Quando chamamos a função maximo(3, 4)
estamos definindo que x = 3
e y = 4
. Após, as expressões são avaliadas até que não se tenha mais expressões, e nesse caso é retornado None
. Ou até que encontre a palavra especial return
, retornando como valor da chamada da função.
In [4]:
print(z)
Já entendemos o que é e como criar funções.
Para testar vamos criar uma função que irá realizar uma conta.
In [5]:
def economias (dinheiro, conta, gastos):
total = (dinheiro + conta) - gastos
return (total)
In [6]:
eco = economias(10, 20, 10)
print(eco)
Também podemos definir um valor padrão para um ou mais argumentos
Vamos reescrever a função economias para que os gastos sejam fixados em 150, caso não seja passado nenhum valor por padrão.
In [7]:
def economias(dinheiro, conta, gastos=150):
total = (dinheiro + conta) - gastos
return(total)
In [8]:
print(economias(100, 60))
In [9]:
print(economias(100, 60, 10))
É importante notar que uma variável que está dentro de uma função, não pode ser utilizada novamente enquanto a função não terminar de ser executada.
No mundo da programação, isso é chamado de escopo. Vamos tentar imprimir o valor da variável dinheiro.
In [10]:
print(dinheiro)
Por que isso aconteceu?
Esse erro acontece pois a variável dinheiro somente existe dentro da função economias, ou seja, ela existe apenas no contexto local dessa função.
Vamos modificar novamente a função economias:
In [11]:
def economias(dinheiro, conta, gastos=150):
total = (dinheiro + conta) - gastos
total = total + eco
return(total)
In [12]:
print(economias(100,60))
Por que não deu problema?
Quando utilizamos uma variável que está fora da função dentro de uma função estamos utilizando a ideia de variáveis globais, onde dentro do contexto geral essa variável existe e pode ser utilizada dentro da função.
Isso não é recomendado! O correto seria ter um novo argumento!
Crie uma função que receba dois argumentos.
In [ ]:
def conta(valor, multa=7):
# Seu código aqui
Python tem um número de funções embutidas que sempre estão presentes. Uma lista completa pode ser encontrada em https://docs.python.org/3/library/functions.html.
Já utilizamos algumas delas! Quais?
Uma outra função que é bem interessante, é a input
. Essa função permite que o usuário digite uma entrada, por exemplo:
In [ ]:
idade = input('Digite sua idade:')
print(idade)
In [ ]:
nome = input('Digite seu nome:')
print(nome)
In [ ]:
print(type(idade))
In [ ]:
print(type(nome))
Note que ambas as variáveis são strings. Portanto precisamos converter para inteiro a idade.
In [ ]:
idade = int(input("Digite sua idade:"))
In [ ]:
print(type(idade))
A função open
, permite abrir um arquivo para leitura e escrita.
open(nome_do_arquivo, modo)
Modos:
* r - abre o arquivo para leitura.
* w - abre o arquivo para escrita.
* a - abre o arquivo para escrita acrescentando os dados no final do arquivo.
* + - pode ser lido e escrito simultaneamente.
In [13]:
import os
os.remove("arquivo.txt")
In [ ]:
arq = open("arquivo.txt", "w")
In [ ]:
for i in range(1, 5):
arq.write('{}. Escrevendo em arquivo\n'.format(i))
In [ ]:
arq.close()
In [ ]:
f = open("arquivo.txt", "r")
print(f, '\n')
texto = f.read()
print(texto)
f.close()
In [ ]:
f = open("arquivo.txt", "r")
texto = f.readlines()
print(texto)
f.close()
In [ ]:
#help(f.readlines)
Para remover o \n
podemos utilizar o método read
que irá gerar uma única string e depois aplicamos o método splitlines
.
In [ ]:
f = open("arquivo.txt", "r")
texto = f.read().splitlines()
print(texto)
f.close()