Escolar Documentos
Profissional Documentos
Cultura Documentos
Um loop while repete um bloco de código enquanto uma determinada Uma classe define o comportamento de um objeto e o tipo de Seus programas podem ler de arquivos e gravar em arquivos. Os arquivos
condição for verdadeira. informação que um objeto pode armazenar. As informações em são abertos no modo de leitura ('r') por padrão, mas também podem ser
uma classe são armazenadas em atributos e as funções que abertos no modo de gravação ('w') e no modo de acréscimo ('a').
Um loop while simples pertencem a uma classe são chamadas de métodos. Uma classe
filha herda os atributos e métodos de sua classe pai. Lendo um arquivo e armazenando suas linhas
valor_atual = 1
enquanto valor_atual <= 5: nome do arquivo = 'siddhartha.txt'
Criando uma classe de cachorro
imprimir(valor_atual) com open(filename) como file_object:
valor_atual += 1 classe Cachorro(): linhas = file_object.readlines()
"""Representa um cachorro."""
Permitir que o usuário escolha quando sair para linha em linhas:
'' def __init__(auto, nome): imprimir(linha)
msg =
while msg != 'sair': """Inicializar objeto cachorro."""
self.name = nome Escrevendo em um arquivo
msg = input("Qual é a sua mensagem?")
imprimir(mensagem) nome do arquivo = 'journal.txt'
def sentar(auto): com open(filename, 'w') como file_object:
"""Simular sentado.""" file_object.write("Eu amo programar.")
print(self.name + " está sentado.")
As funções são blocos de código nomeados, projetados para realizar Anexando a um arquivo
um trabalho específico. A informação passada para uma função é meu_cachorro = Cachorro('Peso')
nome do arquivo = 'journal.txt'
chamada de argumento, e a informação recebida por uma função é
com open(filename, 'a') como file_object:
chamada de parâmetro. print(meu_cachorro.nome + "é um ótimo cachorro!")
file_object.write("\nEu adoro fazer jogos.")
meu_cachorro.sentado()
Uma função simples
Herança
def cumprimentar_usuário():
"""Mostrar uma saudação simples.""" class SARDog(Cachorro): As exceções ajudam você a responder adequadamente a erros
print("Olá!") """Representa um cão de busca.""" que provavelmente ocorrerão. Você coloca um código que pode
causar um erro no bloco try. O código que deve ser executado em
cumprimentar_usuário() def __init__(auto, nome): resposta a um erro vai no bloco except. O código que deve ser
"""Inicializar o sardog.""" executado somente se o bloco try for bem-sucedido vai para o bloco else.
Passando um argumento
super().__init__(nome)
def greet_user(nome de usuário): Capturando uma exceção
"""Exibir uma saudação personalizada.""" busca def (auto): prompt = "De quantos ingressos você precisa?"
print("Olá, " + usuario + "!") """Simular pesquisa.""" num_tickets = input(prompt)
print(self.name + " está procurando.")
cumprimentar_user('jesse') tentar:
meu_cachorro = SARDog('Willie') num_tickets = int(num_tickets)
Valores padrão para parâmetros
exceto ValueError:
def make_pizza(topping='bacon'): print(my_dog.name + " é um cão de busca.") print("Tente novamente.")
"""Faça uma pizza de cobertura única.""" meu_cachorro.sentado() senão:
"
print("Coma + cobertura + " pizza!") my_dog.search() print("Seus tickets estão sendo impressos.")
make_pizza()
make_pizza('calabresa')
Se você tivesse infinitas habilidades de programação, o que você Simples é melhor que complexo
Retornando um valor construiria?
Se você puder escolher entre uma solução simples e uma complexa, e
def add_numbers(x, y): À medida que você aprende a programar, é útil pensar nos projetos
"""Somar dois números e retornar a soma.""" ambas funcionarem, use a solução simples. Seu código será mais fácil
do mundo real que gostaria de criar. É um bom hábito manter um de manter e será mais fácil para você e outras pessoas desenvolverem
retornar x + y caderno de "idéias" que você pode consultar sempre que quiser iniciar
esse código posteriormente.
um novo projeto.
soma = add_numbers (3, 5)
Se ainda não o fez, reserve alguns minutos e descreva três projetos
imprimir(soma) Mais folhas de dicas disponíveis em
que gostaria de criar.
Machine Translated by Google
Você pode adicionar elementos ao final de uma lista ou inseri-los onde O método sort() altera a ordem de uma lista permanentemente.
quiser em uma lista. A função sorted() retorna uma cópia da lista, deixando a lista original
inalterada. Você pode classificar os itens em uma lista em ordem
Adicionando um elemento ao final da lista
alfabética ou ordem alfabética inversa. Você também pode inverter a
users.append('amy') ordem original da lista. Lembre-se de que letras minúsculas e
maiúsculas podem afetar a ordem de classificação.
Começando com uma lista vazia
Classificando uma lista permanentemente
usuários = []
Uma lista armazena uma série de itens em uma ordem específica. users.append('val') users.sort()
As listas permitem que você armazene conjuntos de informações em users.append('bob') Classificando uma lista permanentemente em ordem alfabética reversa
um só lugar, quer você tenha apenas alguns itens ou milhões de itens. As users.append('mia')
listas são um dos recursos mais poderosos do Python, facilmente acessíveis
Inserindo elementos em uma posição específica
a novos programadores e unem muitos conceitos importantes da programação. users.sort(reverse=True)
users.insert(0, 'joe')
Classificando uma lista temporariamente
users.insert(3, 'bea')
print(ordenado(usuários))
print(classificado(usuários, reverse=True))
Você pode remover elementos por sua posição em uma lista ou pelo Invertendo a ordem de uma lista
Use colchetes para definir uma lista e use vírgulas para separar
valor do item. Se você remover um item por seu valor, o Python
itens individuais na lista. Use nomes plurais para listas, para tornar usuários.reverso()
removerá apenas o primeiro item que tiver esse valor.
seu código mais fácil de ler.
Excluindo um elemento por sua posição
Fazendo uma lista
dos usuários[-1] As listas podem conter milhões de itens, portanto, o Python fornece
usuários = ['val', 'bob', 'mia', 'ron', 'ned']
uma maneira eficiente de percorrer todos os itens de uma lista.
Removendo um item por seu valor
Quando você configura um loop, o Python extrai cada item da lista, um
users.remove('mia') por vez, e os armazena em uma variável temporária, para a qual você
Elementos individuais em uma lista são acessados de acordo com sua fornece um nome. Esse nome deve ser a versão singular do nome da
lista.
posição, chamada de índice. O índice do primeiro elemento é 0, o índice
do segundo elemento é 1 e assim por diante. O bloco de código recuado compõe o corpo do loop, onde você
Índices negativos referem-se a itens no final da lista. Para obter um Se você quiser trabalhar com um elemento que está removendo da pode trabalhar com cada item individual. Todas as linhas que não
determinado elemento, escreva o nome da lista e, em seguida, o índice lista, você pode "abrir" o elemento. Se você pensar na lista como uma são recuadas são executadas após a conclusão do loop.
do elemento entre colchetes. pilha de itens, pop() retira um item do topo da pilha. Por padrão, pop()
Imprimindo todos os itens em uma lista
retorna o último elemento da lista, mas você também pode remover
Obtendo o primeiro elemento para usuário em usuários:
elementos de qualquer posição na lista.
primeiro_usuário = usuários[0] imprimir(usuário)
Aparecer o último item de uma lista
Obtendo o segundo elemento Imprimindo uma mensagem para cada item e uma mensagem separada
most_recent_user = users.pop()
depois
segundo_usuário = usuários[1] print(most_recent_user)
para usuário em usuários:
Mostrar o primeiro item em uma lista
Obtendo o último elemento
print("Bem-vindo, " + usuario + "!")
mais novo_usuário = usuários[-1] first_user = users.pop(0)
print(first_user) print("Bem-vindos, estamos felizes em ver todos vocês!")
Você pode usar a função range() para trabalhar com um Para copiar uma lista, faça uma fatia que comece no primeiro item Uma tupla é como uma lista, exceto que você não pode alterar os
conjunto de números de forma eficiente. A função range() e termine no último item. Se você tentar copiar uma lista sem usar valores em uma tupla depois de definida. As tuplas são boas para
começa em 0 por padrão e para um número abaixo do número essa abordagem, tudo o que você fizer na lista copiada também armazenar informações que não devem ser alteradas ao longo da
passado para ela. Você pode usar a função list() para gerar com afetará a lista original. vida de um programa. As tuplas são designadas por parênteses em
eficiência uma grande lista de números. vez de colchetes. (Você pode substituir uma tupla inteira, mas não
Fazendo uma cópia de uma lista pode alterar os elementos individuais em uma tupla.)
Imprimindo os números de 0 a 1000
finalizadores = ['kai', 'abe', 'ada', 'gus', 'zoe'] Definindo uma tupla
para o número no intervalo (1001): copy_of_finisers = finalizadores[:]
imprimir(número) dimensões = (800, 600)
Você pode usar um loop para gerar uma lista com base em um intervalo de para dimensão em dimensões:
para o número no intervalo (1, 1001):
números ou em outra lista. Essa é uma operação comum, então o Python imprimir(dimensão)
imprimir(número)
oferece uma maneira mais eficiente de fazer isso. As compreensões de lista
Fazendo uma lista de números de 1 a um milhão podem parecer complicadas no início; em caso afirmativo, use a abordagem Sobrescrevendo uma tupla
do loop for até que esteja pronto para começar a usar as compreensões.
numeros = lista(intervalo(1, 1000001)) dimensões = (800, 600)
imprimir(dimensões)
Para escrever uma compreensão, defina uma expressão para os
valores que deseja armazenar na lista. Em seguida, escreva um loop for
dimensões = (1200, 900)
para gerar os valores de entrada necessários para fazer a lista.
Há várias estatísticas simples que você pode executar em uma lista
contendo dados numéricos. Usando um loop para gerar uma lista de números quadrados
Encontrando o valor mínimo em uma lista quadrados = [] Quando você está aprendendo sobre estruturas de dados, como
para x no intervalo (1, 11): listas, ajuda a visualizar como o Python está trabalhando com as
idades = [93, 99, 66, 17, 85, 1, 35, 82, 2, 77]
quadrado = x**2 informações em seu programa. pythontutor.com é uma ótima
mais novo = min(idade)
squares.append(square) ferramenta para ver como o Python controla as informações em uma
Encontrando o valor máximo lista. Tente executar o código a seguir em pythontutor.com e execute
Usando uma compreensão para gerar uma lista de números quadrados
seu próprio código.
idades = [93, 99, 66, 17, 85, 1, 35, 82, 2, 77]
mais velho = max(idade) Crie uma lista e imprima os itens na lista
quadrados = [x**2 para x no intervalo(1, 11)]
Encontrando a soma de todos os valores cães = []
Usando um loop para converter uma lista de nomes em letras maiúsculas
cães.append('willie')
idades = [93, 99, 66, 17, 85, 1, 35, 82, 2, 77]
nomes = ['kai', 'abe', 'ada', 'gus', 'zoe'] cães.append('hootz')
total_anos = soma(idades)
cães.append('peso')
nomes_superiores = [] cães.append('goblin')
para nome em nomes:
Você pode trabalhar com qualquer conjunto de elementos de uma lista. upper_names.append(name.upper()) para cão em cães:
Uma parte de uma lista é chamada de fatia. Para dividir uma lista, print("Olá " + cachorro + "!")
Usando uma compreensão para converter uma lista de nomes em letras print("Eu amo esses cachorros!")
comece com o índice do primeiro item desejado e, em seguida, adicione
maiúsculas
dois pontos e o índice após o último item desejado. Deixe de lado o
primeiro índice para começar no início da lista e deixe de lado o último print("\nEstes foram meus dois primeiros cachorros:")
nomes = ['kai', 'abe', 'ada', 'gus', 'zoe']
índice para cortar o final da lista. cachorros_velhos = cachorros[:2]
para old_dog em old_dogs:
upper_names = [name.upper() para nome em nomes]
Obtendo os três primeiros itens print(velho_cachorro)
Você pode armazenar quantos pares chave-valor quiser em Você pode percorrer um dicionário de três maneiras: você pode
um dicionário, até que seu computador fique sem memória. percorrer todos os pares chave-valor, todas as chaves ou todos
Para adicionar um novo par chave-valor a um dicionário os valores.
existente, forneça o nome do dicionário e a nova chave entre Um dicionário apenas rastreia as conexões entre as chaves
colchetes e defina-o igual ao novo valor. e valores; ele não rastreia a ordem dos itens no
Isso também permite que você comece com um dicionário vazio e adicione dicionário. Se você deseja processar as informações em
pares de valores-chave conforme eles se tornam relevantes. ordem, pode classificar as chaves em seu loop.
Use chaves para definir um dicionário. Use dois-pontos Percorrendo todas as teclas
para conectar chaves e valores e use vírgulas para separar Você pode modificar o valor associado a qualquer chave em # Mostre a todos que responderam à pesquisa.
pares de valores-chave individuais. um dicionário. Para fazer isso, forneça o nome do dicionário e para nome em fav_languages.keys():
coloque a chave entre colchetes e, em seguida, forneça o novo imprimir(nome)
Fazendo um dicionário
valor para essa chave.
alien_0 = {'cor': 'verde', 'pontos': 5} Percorrendo todos os valores
Modificando valores em um dicionário
# Mostrar todos os idiomas que foram escolhidos.
alien_0 = {'cor': 'verde', 'pontos': 5} para idioma em fav_languages.values():
print(alien_0) imprimir(idioma)
Para acessar o valor associado a uma chave individual,
forneça o nome do dicionário e coloque a chave entre colchetes. # Altere a cor e o valor do ponto do alienígena. Percorrendo todas as teclas em ordem
Se a chave que você está pedindo não estiver no dicionário, alien_0['cor'] = 'amarelo'
ocorrerá um erro. # Mostra o idioma favorito de cada pessoa, # em
alien_0['pontos'] = 10 ordem pelo nome da pessoa.
Você também pode usar o método get(), que retorna None
print(alien_0) para nome em sorted(fav_languages.keys()):
em vez de um erro se a chave não existir. Você também pode
especificar um valor padrão a ser usado se a chave não estiver no print(nome + ": " + idioma)
dicionário.
Você pode remover qualquer par chave-valor que
Obtendo o valor associado a uma chave
desejar de um dicionário. Para fazer isso, use a palavra-chave
Você pode encontrar o número de pares chave-valor em um dicionário.
alien_0 = {'cor': 'verde', 'pontos': 5} del e o nome do dicionário, seguidos da chave entre colchetes.
Isso excluirá a chave e seu valor associado. Encontrando o comprimento de um dicionário
print(alien_0['cor'])
print(alien_0['pontos']) Excluindo um par chave-valor num_responses = len(fav_idiomas)
alien_0 = {'cor': 'verde', 'pontos': 5}
Obtendo o valor com get()
print(alien_0)
alien_0 = {'cor': 'verde'}
del alien_0['pontos']
alien_color = alien_0.get('cor') print(alien_0)
alien_points = alien_0.get('pontos', 0) Abrange Python 3 e Python 2
print(alien_color)
print(alien_points) Tente executar alguns desses exemplos em pythontutor.com.
Machine Translated by Google
Às vezes é útil armazenar um conjunto de dicionários em uma lista; isso Armazenar uma lista dentro de um dicionário permite Os dicionários padrão do Python não acompanham a ordem em
é chamado de nidificação. associar mais de um valor a cada chave. que as chaves e os valores são adicionados; eles apenas
preservam a associação entre cada chave e seu valor. Se você
Armazenando dicionários em uma lista Armazenando listas em um dicionário quiser preservar a ordem na qual as chaves e os valores são
adicionados, use um OrderedDict.
# Comece com uma lista vazia. # Armazene vários idiomas para cada pessoa.
usuários = [] fav_languages = { 'jen': ['python', 'ruby'], 'sarah': ['c'], Preservando a ordem de chaves e valores
'edward': ['ruby', 'go'], 'phil': ['python', 'haskel'],
# Crie um novo usuário e adicione-o à lista. new_user = das coleções importar OrderedDict
{ 'last': 'fermi', 'first': 'enrico', 'username': 'efermi', }
users.append(new_user) # Armazene os idiomas de cada pessoa, mantendo #
} controle de quem respondeu primeiro. fav_idiomas =
OrderedDict()
# Mostrar todas as respostas para cada pessoa.
para nome, langs em fav_languages.items(): fav_languages['jen'] = ['python', 'ruby']
print(nome + ": ") for fav_languages['sarah'] = ['c'] fav_languages['edward'] =
# Crie outro novo usuário e adicione-o também. new_user = lang in langs: print("- " + ['ruby', 'go'] fav_languages['phil'] = ['python', 'haskell']
{ 'last': 'curie', 'first': 'marie', 'username': 'mcurie', } lang)
users.append(new_user)
# Exibe os resultados, na mesma ordem em que # foram
inseridos.
Você pode armazenar um dicionário dentro de outro dicionário. Nesse for name, langs in fav_languages.items(): print(name +
caso, cada valor associado a uma chave é ele próprio um dicionário. ":") for lang in langs: print("- " + lang)
Armazenando dicionários em um dicionário
# Mostrar todas as informações sobre cada usuário.
for user_dict in users: for k, v in user_dict.items(): users =
print(k + ": " + v) print("\n") { 'aeinstein': { 'first':
'albert', 'last': 'einstein',
'location': 'princeton', }, Você pode usar um loop para gerar um grande número de
dicionários de forma eficiente, se todos os dicionários começarem com
'mcurie': { 'first': 'marie', 'last' :
Você também pode definir uma lista de dicionários diretamente, sem dados semelhantes.
'curie', 'localização': 'paris', },
usar append(): um milhão de alienígenas
Testar valores numéricos é semelhante a testar valores de string. Existem vários tipos de instruções if. Sua escolha de qual usar
depende do número de condições que você precisa testar.
Testando igualdade e desigualdade
Você pode ter quantos blocos elif precisar, e o bloco else é
>>> idade = 18 sempre opcional.
>>> idade == 18 Declaração if simples
Verdadeiro >>>
idade != 18 Falso idade = 19
Testando se um valor não está em uma lista Permitir que o usuário escolha quando sair Usando continuar em um loop
banidos_usuários = ['ann', 'chad', 'dee'] prompt = "\nDiga-me uma coisa, e eu" banidos_usuários = ['eve', 'fred', 'gary', 'helen']
usuário = 'erin' prompt += "repita de volta para você."
" prompt = "\nAdicione um jogador ao seu time."
prompt += "\nDigite 'quit' para encerrar o programa.
se o usuário não estiver em ban_users: prompt += "\nDigite 'quit' quando terminar. "
""
print("Você pode jogar!") message =
while message != 'sair': jogadores = []
Verificando se uma lista está vazia enquanto verdadeiro:
mensagem = input(prompt)
jogador = input(prompt)
jogadores = []
se mensagem != 'sair': se jogador == 'sair':
parar
se os jogadores: imprimir(mensagem)
jogador elif em banidos_usuários:
para jogador em jogadores: Usando uma bandeira
print(jogador + " foi banido!")
print("Jogador: " + jogador.título())
Prosseguir
senão: prompt = "\nDiga-me uma coisa, e eu"
senão:
print("Ainda não temos jogadores!") prompt += "repita de volta para você."
" jogadores.append(jogador)
prompt += "\nDigite 'quit' para encerrar o programa.
número_atual = 1 Você pode usar a instrução break e a instrução continue imprimir(animais de estimação)
Os dois principais tipos de argumentos são argumentos Uma função pode retornar um valor ou um conjunto de valores.
posicionais e palavras-chave. Quando você usa argumentos Quando uma função retorna um valor, a linha de chamada deve
fornecer
posicionais, o Python corresponde ao primeiro argumento na chamada de função com uma variável na qual armazenar o valor de retorno. Uma
o primeiro parâmetro na definição da função e assim por diante. função para de executar quando atinge uma instrução de retorno.
Com argumentos de palavra-chave, você especifica a qual
parâmetro cada argumento deve ser atribuído na chamada de função. Retornando um único valor
Quando você usa argumentos de palavra-chave, a ordem def get_full_name(primeiro, último):
dos argumentos não importa. """Retorna um nome completo bem formatado."""
' '
full_name = primeiro + + último
Usando argumentos posicionais
return full_name.title()
def describe_pet(animal, nome):
"""Exibir informações sobre um animal de estimação.""" músico = get_full_name('jimi', 'hendrix')
As funções são blocos nomeados de código projetados para realizar um "
print("\nEu tenho um + animal + ".") imprimir(músico)
trabalho específico. As funções permitem que você escreva um código uma
print("Seu nome é " + nome + ".")
vez que pode ser executado sempre que você precisar realizar a mesma Retornando um dicionário
tarefa. As funções podem receber as informações de que precisam e retornar describe_pet('hamster', 'harry') def build_person(primeiro, último):
as informações que geram. O uso eficaz de funções torna seus programas describe_pet('cachorro', 'willie') """Retorna um dicionário de informações
mais fáceis de escrever, ler, testar e corrigir. sobre uma pessoa.
Usando argumentos de palavra-chave """
def describe_pet(animal, nome): pessoa = {'primeiro': primeiro, 'último': último}
"""Exibir informações sobre um animal de estimação.""" pessoa de retorno
"
A primeira linha de uma função é sua definição, marcada print("\nEu tenho um + animal + ".")
pela palavra-chave def. O nome da função é seguido por um print("Seu nome é " + nome + ".") músico = build_person('jimi', 'hendrix')
conjunto de parênteses e dois pontos. Uma docstring, entre imprimir(músico)
aspas triplas, descreve o que a função faz. O corpo de uma describe_pet(animal='hamster', name='harry')
função é recuado um nível. describe_pet(name='willie', animal='cachorro') Retornando um dicionário com valores opcionais
Para chamar uma função, forneça o nome da função seguido por def build_person(primeiro, último, idade=Nenhum):
um conjunto de parênteses. """Retorna um dicionário de informações
sobre uma pessoa.
Fazendo uma função Você pode fornecer um valor padrão para um parâmetro. Quando """
as chamadas de função omitem este argumento, o valor padrão
def cumprimentar_usuário(): será usado. Os parâmetros com valores padrão devem ser listados pessoa = {'primeiro': primeiro, 'último': último}
"""Mostrar uma saudação simples.""" se idade:
após os parâmetros sem valores padrão na definição da função para
print("Olá!") que os argumentos posicionais ainda funcionem corretamente.
pessoa['idade'] = idade
pessoa de retorno
cumprimentar_usuário() Usando um valor padrão
músico = build_person('jimi', 'hendrix', 27)
def describe_pet(nome, animal='cachorro'):
imprimir(músico)
"""Exibir informações sobre um animal de estimação."""
"
As informações passadas para uma função são print("\nEu tenho um + animal + ".")
músico = build_person('janis', 'joplin')
chamadas de argumento; as informações recebidas por uma função print("Seu nome é " + nome + ".")
imprimir(músico)
são chamadas de parâmetro. Os argumentos são incluídos entre
parênteses após o nome da função e os parâmetros são listados describe_pet('harry', 'hamster')
entre parênteses na definição da função. descreva_pet('willie')
Tente executar alguns desses exemplos em pythontutor.com.
Passando um único argumento Usando None para tornar um argumento opcional
Você pode passar uma lista como um argumento para uma Às vezes, você não saberá quantos argumentos uma função Você pode armazenar suas funções em um arquivo separado
função e a função pode trabalhar com os valores na lista. precisará aceitar. Python permite que você colete um número arbitrário chamado módulo e, em seguida, importar as funções necessárias para o
Qualquer alteração que a função fizer na lista afetará a lista de argumentos em um parâmetro usando o operador. Um parâmetro que arquivo que contém seu programa principal. Isso permite arquivos de
*
original. Você pode evitar que uma função modifique uma lista aceita um número arbitrário de argumentos deve vir por último na programa mais limpos. (Certifique-se de que seu módulo esteja armazenado
passando uma cópia da lista como um argumento. definição da função. no mesmo diretório que seu programa principal.)
**
o O operador permite que um parâmetro colete um número
Passando uma lista como um argumento Armazenando uma função em um módulo
arbitrário de argumentos de palavra-chave.
Arquivo: pizza.py
def cumprimentar_usuários(nomes): Coletando um número arbitrário de argumentos
"""Imprima uma saudação simples para todos.""" def make_pizza(tamanho, *toppings):
para nome em nomes: def make_pizza(tamanho, *toppings): """Faça uma pizza."""
"
msg = "Olá, " print(msg) + nome + "!" """Faça uma pizza.""" print("\nFazendo uma + tamanho + " pizza.")
"
print("\nFazendo uma + tamanho + " pizza.") impressão("Coberturas:")
impressão("Coberturas:") para cobertura em coberturas:
nomes de usuário = ['hannah', 'ty', 'margot'] para cobertura em coberturas: print("-" + cobertura)
greet_users(nomes de usuário) print("-" + cobertura)
Importando um módulo inteiro
Permitir que uma função modifique uma lista Arquivo: making_pizzas.py
# Faça três pizzas com coberturas diferentes. Cada função no módulo está disponível no arquivo do programa.
O exemplo a seguir envia uma lista de modelos para uma função para
make_pizza('pequena', 'calabresa')
impressão. A lista original é esvaziada e a segunda lista é preenchida.
make_pizza('grande', 'pedaços de bacon', 'abacaxi') importar pizza
def print_models(não impresso, impresso): make_pizza('médio', 'cogumelos', 'pimentão',
"""Impressão 3D de um conjunto de modelos.""" 'cebola', 'queijo extra') pizza.make_pizza('médio', 'calabresa')
enquanto não impresso: pizza.make_pizza('pequeno', 'bacon', 'abacaxi')
Coletando um número arbitrário de argumentos de palavras-chave
current_model = não impresso.pop()
Importando uma função específica
print("Imprimindo " + modelo_atual) def build_profile(primeiro, último, **user_info): Apenas as funções importadas estão disponíveis no arquivo do programa.
impresso.append(modelo_atual) """Criar um dicionário de perfil de usuário."""
# Construa um dict com as chaves necessárias. da importação de pizza make_pizza
# Armazene alguns designs não impressos, perfil = {'primeiro': primeiro, 'último': último}
# e imprima cada um deles. make_pizza('médio', 'calabresa')
não impresso = ['capa de telefone', 'pingente', 'anel'] # Adicione quaisquer outras chaves e valores. make_pizza('pequeno', 'bacon', 'abacaxi')
impresso = [] para chave, valor em user_info.items(): Dando um alias a um módulo
print_models(não impresso, impresso) perfil[chave] = valor
importar pizza como p
print("\nNão impresso:", não impresso) perfil de retorno
print("Impresso:", impresso) p.make_pizza('médio', 'calabresa')
# Crie dois usuários com tipos diferentes p.make_pizza('pequeno', 'bacon', 'abacaxi')
Impedir que uma função modifique uma lista
# de informação.
O exemplo a seguir é igual ao anterior, exceto que a lista original permanece inalterada Dando um alias a uma função
após a chamada de print_models(). user_0 = build_profile('albert', 'einstein',
localização='princeton') de pizza importar make_pizza como mp
def print_models(não impresso, impresso): user_1 = build_profile('marie', 'curie',
"""Impressão 3D de um conjunto de modelos.""" localização='paris', campo='química') mp('médio', 'calabresa')
enquanto não impresso:
mp('pequeno', 'bacon', 'abacaxi')
current_model = não impresso.pop() imprimir(usuário_0)
print("Imprimindo " + modelo_atual) Importando todas as funções de um módulo
imprimir(usuário_1)
impresso.append(modelo_atual) Não faça isso, mas reconheça-o quando o vir no código de outras pessoas. Isso
pode resultar em conflitos de nomenclatura, o que pode causar erros.
Em Python, os nomes das classes são escritos em CamelCase e os nomes Abrange Python 3 e Python 2
unidade def (auto): dos objetos são escritos em letras minúsculas com sublinhados. Os módulos
"""Simular condução.""" que contêm classes ainda devem ser nomeados em letras minúsculas com
print("O carro esta em movimento.") sublinhados.
Machine Translated by Google
Usando a instância
Importando todas as classes de um módulo
my_ecar = ElectricCar('tesla', 'modelo x', 2016) (não faça isso, mas reconheça quando o vir). print("Carros a gasolina:", len(gas_fleet))
print("Carros elétricos:", len(electric_fleet))
da importação do carro *
my_ecar.charge()
print(my_ecar.battery.get_range()) Mais folhas de dicas disponíveis em
meu_fusca = Carro('volkswagen', 'fusca', 2016)
my_ecar.drive()
Machine Translated by Google
f_path = "C:\Users\ehmatthes\books\alice.txt"
Seus programas podem ler informações de arquivos e podem gravar dados
Passar o argumento 'w' para open() informa ao Python que você com open(f_path) como f_obj:
em arquivos. A leitura de arquivos permite que você trabalhe com uma ampla deseja gravar no arquivo. Tome cuidado; isso apagará o conteúdo linhas = f_obj.readlines()
variedade de informações; gravar em arquivos permite que os usuários do arquivo, se ele já existir. Passar o argumento 'a' informa ao
continuem de onde pararam na próxima vez que executarem seu programa. Python que você deseja anexar ao final de um arquivo existente.
Você pode gravar texto em arquivos e armazenar estruturas Python, como
Escrevendo em um arquivo vazio
listas em arquivos de dados. Quando você acha que pode ocorrer um erro, pode escrever
nome do arquivo = 'programação.txt' um bloco try except para lidar com a exceção que pode ser levantada.
O bloco try diz ao Python para tentar executar algum código, e o
com open(filename, 'w') como f: bloco except diz ao Python o que fazer se o código resultar em um
Exceções são objetos especiais que ajudam seus programas a
f.write("Eu amo programar!") determinado tipo de erro.
responder a erros de maneira apropriada. Por exemplo, se o seu programa
tentar abrir um arquivo que não existe, você pode usar exceções para exibir Escrevendo várias linhas em um arquivo vazio Manipulando a exceção ZeroDivisionError
uma mensagem de erro informativa em vez de travar o programa.
tentar:
nome do arquivo = 'programação.txt'
imprimir(5/0)
com open(filename, 'w') como f: exceto ZeroDivisionError:
f.write("Eu amo programar!\n") print("Você não pode dividir por zero!")
f.write("Adoro criar novos jogos.\n") Manipulando a exceção FileNotFoundError
Para ler um arquivo, seu programa precisa abrir o arquivo e ler o
Anexando a um arquivo f_name = 'siddhartha.txt'
conteúdo do arquivo. Você pode ler todo o conteúdo do arquivo
de uma vez ou ler o arquivo linha por linha. A instrução with nome do arquivo = 'programação.txt'
garante que o arquivo seja fechado corretamente quando o tentar:
programa terminar de acessar o arquivo. com open(filename, 'a') como f: com open(f_name) como f_obj:
f.write("Também adoro trabalhar com dados.\n") linhas = f_obj.readlines()
Lendo um arquivo inteiro de uma só vez exceto FileNotFoundError:
f.write("Eu também adoro criar aplicativos.\n")
nome do arquivo = 'siddhartha.txt' msg = "Não foi possível encontrar o arquivo {0}.".format(f_name)
imprimir(mensagem)
O bloco try deve conter apenas código que pode causar um erro. Às vezes, você deseja que seu programa continue em execução quando O módulo json permite despejar estruturas de dados Python simples
Qualquer código que dependa da execução bem-sucedida do bloco encontrar um erro, sem relatar o erro ao usuário. Usar a instrução pass em um arquivo e carregar os dados desse arquivo na próxima vez que
try deve ser colocado no bloco else. em um bloco else permite que você faça isso. o programa for executado. O formato de dados JSON não é específico
do Python, portanto, você também pode compartilhar esse tipo de
Usando um bloco else
dados com pessoas que trabalham em outras linguagens.
Usando a instrução pass em um bloco else
print("Digite dois números. Vou dividi-los.")
f_names = ['alice.txt', 'siddhartha.txt', Saber como gerenciar exceções é importante ao trabalhar com
x = input("Primeiro número: ") 'moby_dick.txt', 'little_women.txt'] dados armazenados. Você geralmente deseja certificar-se de que os
y = input("Segundo número: ") dados que está tentando carregar existem antes de trabalhar com eles.
para f_name em f_names: Usando json.dump() para armazenar dados
tentar: # Informa o comprimento de cada arquivo encontrado.
resultado = int(x) / int(y) tentar: """Armazenar alguns números."""
Você pode adicionar quantos testes de unidade precisar a um caso de teste. Testar uma classe é semelhante a testar uma função, já que você estará Ao testar uma classe, você geralmente precisa criar uma instância
Para escrever um novo teste, adicione um novo método à sua classe de caso testando principalmente seus métodos. da classe. O método setUp() é executado antes de cada teste.
de teste. Quaisquer instâncias que você criar em setUp() estarão disponíveis em todos os testes
Uma classe para
que você escrever.
Testando nomes do meio testar Salvar como accountant.py
Mostramos que get_full_name() funciona para nomes e Usando setUp() para suportar vários testes A
sobrenomes. Vamos testar se também funciona para nomes do meio. class Accountant(): instância self.acc pode ser usada em cada novo teste.
"""Gerenciar uma conta bancária."""
importar unittest de importar unittest do
full_names importar get_full_name def __init__(self, balance=0): self.balance contador importar contador
= balance
class NamesTestCase(unittest.TestCase): """Testes class TestAccountant(unittest.TestCase):
para names.py.""" def deposit(auto, valor): self.saldo """Testes para a classe Contador."""
+= valor
def test_first_last(self): """Testar def setUp(self):
nomes como Janis Joplin.""" full_name = def saque(auto, valor): self.saldo -= self.acc = Accountant()
get_full_name('janis', 'joplin') valor
self.assertEqual(full_name, 'Janis def test_initial_balance(self):
Joplin') Construindo um caso de # O saldo padrão deve ser 0.
teste Para o primeiro teste, vamos nos certificar de que podemos começar
self.assertEqual(self.acc.balance, 0)
com diferentes saldos iniciais. Salve-o como test_accountant.py.
def test_middle(self): """Nomes importar unittest do # Teste o saldo não padrão. acc =
de teste como David Lee Roth.""" full_name = contador importar contador Contador(100)
get_full_name('david', 'roth', 'lee') self.assertEqual(acc.saldo, 100)
class TestAccountant(unittest.TestCase):
self.assertEqual(nome_completo, """Testes para a classe Contador.""" def test_deposit(self):
'David Lee Roth') # Teste o depósito único.
def test_initial_balance(self): self.acc.deposit(100)
unittest.main() # O saldo padrão deve ser 0. acc = self.assertEqual(self.acc.balance, 100)
Accountant() self.assertEqual(acc.balance,
Executando os testes Os
0) # Teste vários depósitos.
dois pontos representam dois testes aprovados.
self.acc.deposit(100)
.. # Teste o saldo não padrão. self.acc.deposit(100)
--------------------------------------- acc = Contador(100) self.assertEqual(self.acc.balance, 300)
Realizou 2 testes em 0,000s self.assertEqual(acc.saldo, 100)
def test_withdrawal(self):
OK unittest.main() # Teste de retirada única.
self.acc.deposit(1000)
Executando o teste
self.acc.withdraw(100)
. self.assertEqual(self.acc.balance, 900)
O Python fornece vários métodos assert que você pode usar ---------------------------------------
para testar seu código.
Realizou 1 teste em 0,000s unittest.main()
Verifique se a==b ou a != b
OK Executando os testes
assertEqual(a, b)
...
assertNotEqual(a, b) ---------------------------------------
Verifique se x é verdadeiro ou x é falso Realizou 3 testes em 0,001s
Em geral, você não deve modificar um teste depois de escrito.
Quando um teste falha, geralmente significa que o novo código que você
assertTrue(x) OK
escreveu quebrou a funcionalidade existente e você precisa modificar o novo
assertFalse(x)
código até que todos os testes existentes sejam aprovados.
Verifique se um item está em uma lista ou não está em uma lista Se seus requisitos originais foram alterados, pode ser
apropriado modificar alguns testes. Isso geralmente acontece nos Mais folhas de dicas disponíveis em
assertIn(item, lista)
estágios iniciais de um projeto, quando o comportamento desejado
assertNotIn(item, lista)
ainda está sendo resolvido.
Machine Translated by Google
O código a seguir configura uma janela de jogo vazia e inicia um Atributos rect úteis
loop de eventos e um loop que atualiza continuamente a tela. Uma vez que você tenha um objeto reto, há vários atributos que são úteis ao posicionar
objetos e detectar posições relativas de objetos. (Você pode encontrar mais atributos na
sistema de importação
# Valores individuais de x e y:
importar pygame como pg
screen_rect.esquerda, screen_rect.direita
Pygame é um framework para fazer jogos usando Python. screen_rect.top, screen_rect.bottom
def run_game():
screen_rect.centerx, screen_rect.centery
Fazer jogos é divertido e é uma ótima maneira de expandir suas # Inicializar e configurar a tela.
screen_rect.width, screen_rect.height
habilidades e conhecimentos de programação. pg.init()
O Pygame cuida de muitas das tarefas de nível inferior na tela = pg.display.set_mode((1200, 800))
# Tuplas
construção de jogos, o que permite que você se concentre nos pg.display.set_caption("Invasão Alienígena")
screen_rect.center
aspectos de seu jogo que o tornam interessante. screen_rect.size
# Inicia o loop principal.
enquanto verdadeiro: Criando um objeto reto
# Inicia o loop de eventos. Você pode criar um objeto reto do zero. Por exemplo, um pequeno objeto reto preenchido
para o evento em pg.event.get(): pode representar um marcador em um jogo. A classe Rect() usa as coordenadas do
O Pygame é executado em todos os sistemas, mas a configuração é canto superior esquerdo e a largura e a altura do retângulo. A função draw.rect() pega
ligeiramente diferente em cada sistema operacional. As instruções aqui if event.type == pg.QUIT:
um objeto de tela, uma cor e um retângulo. Esta função preenche o retângulo dado com
assumem que você está usando o Python 3 e fornecem uma instalação sys.exit()
a cor dada.
mínima do Pygame. Se essas instruções não funcionarem para o seu
# Atualizar tela.
sistema, consulte as notas mais detalhadas em http:// ehmatthes.github.io/ pcc/.
pg.display.flip() bullet_rect = pg.Rect(100, 100, 3, 15)
Pygame no Linux cor = (100, 100, 100)
run_game() pg.draw.rect(tela, cor, bullet_rect)
$ sudo apt-get install python3-dev mercurial
libsdl-image1.2-dev libsdl2-dev Definindo um tamanho de janela personalizado
libsdl-ttf2.0-dev A função display.set_mode() aceita uma tupla que define o tamanho da tela.
$ pip install --user Muitos objetos em um jogo são imagens que se movem pela tela. É
hg+http://bitbucket.org/pygame/pygame mais fácil usar arquivos de imagem bitmap (.bmp), mas você também
screen_dim = (1200, 800)
Pygame no OS X pode configurar seu sistema para trabalhar com arquivos jpg, png e gif.
tela = pg.display.set_mode(screen_dim)
Isso pressupõe que você usou o Homebrew para instalar o Python 3.
Definir uma cor de fundo personalizada
Carregando uma imagem
$ brew install hg sdl sdl_image sdl_ttf As cores são definidas como uma tupla de valores de vermelho, verde e azul. Cada
valor varia de 0-255.
$ pip install --user ship = pg.image.load('images/ship.bmp')
hg+http://bitbucket.org/pygame/pygame
bg_color = (230, 230, 230) Obtendo o objeto reto de uma imagem
Pygame no Windows screen.fill(bg_color)
Encontre um instalador em ship_rect = ship.get_rect()
https:// bitbucket.org/ pygame/ pygame/ downloads/ ou http://
www.lfd.uci.edu/ ~gohlke/ pythonlibs/ #pygame que corresponda à sua versão do Posicionando uma imagem
Python. Execute o arquivo do instalador se for um arquivo .exe ou .msi. Com rects, é fácil posicionar uma imagem onde quiser na tela ou em relação a outro
Muitos objetos em um jogo podem ser tratados como
Se for um arquivo .whl, use pip para instalar o Pygame: objeto. O código a seguir posiciona um objeto de navio na parte inferior central da tela.
retângulos simples, em vez de sua forma real. Isso simplifica o
código sem afetar visivelmente o jogo. Pygame tem um objeto rect que
> python –m pip install --user
facilita o trabalho com objetos de jogo. ship_rect.midbottom = screen_rect.midbottom
pygame-1.9.2a0-cp35-none-win32.whl
Obtendo o objeto de tela reta
Testando sua instalação
Já temos um objeto de tela; podemos acessar facilmente o objeto rect associado à
Para testar sua instalação, abra uma sessão de terminal e tente importar o Pygame.
tela.
Se você não receber nenhuma mensagem de erro, sua instalação foi bem-sucedida.
screen_rect = screen.get_rect()
$ python
Abrange Python 3 e Python 2
Encontrando o centro da tela
>>> importar pygame Os objetos Rect possuem um atributo center que armazena o ponto central.
>>>
screen_center = screen_rect.center
Machine Translated by Google
x_values = [0, 1, 2, 3, 4, 5]
Abrange Python 3 e Python 2
quadrados = [0, 1, 4, 9, 16, 25]
plt.plot(x_values, squares)
plt.show()
Machine Translated by Google
Você pode fazer quantos gráficos quiser em uma figura. Você pode incluir quantos gráficos individuais quiser em uma
Argumentos de formatação de data e hora
Ao fazer vários gráficos, você pode enfatizar as relações figura. Isso é útil, por exemplo, ao comparar conjuntos de dados
A função strftime() gera uma string formatada a partir de um objeto datetime, relacionados.
nos dados. Por exemplo, você pode preencher o espaço entre dois
e a função strptime() gera um objeto datetime a partir de uma string. Os
conjuntos de dados.
códigos a seguir permitem trabalhar com datas exatamente como você precisa. Compartilhando um eixo x
Plotando dois conjuntos de dados O código a seguir plota um conjunto de quadrados e um conjunto de cubos em
Aqui usamos plt.scatter() duas vezes para plotar números quadrados e cubos dois gráficos separados que compartilham um eixo x comum.
%UMA
Nome do dia da semana, como segunda-feira
na mesma figura. A função plt.subplots() retorna um objeto figure e uma tupla
%B Nome do mês, como janeiro
de eixos. Cada conjunto de eixos corresponde a um gráfico separado na
importar matplotlib.pyplot como plt %m Mês, como um número (01 a 12) figura. Os dois primeiros argumentos controlam o número de linhas e colunas
%d Dia do mês, como um número (01 a 31) geradas na figura.
%Y Ano de quatro dígitos, como 2016
x_values = lista(intervalo(11))
%y Ano de dois dígitos, como 16 importar matplotlib.pyplot como plt
quadrados = [x**2 para x em x_values]
%H Hora, no formato de 24 horas (00 a 23)
cubos = [x**3 para x em x_values]
%EU Hora, no formato de 12 horas (01 a 12) x_vals = lista(intervalo(11))
%p AM ou PM quadrados = [x**2 para x em x_vals]
plt.scatter(x_values, squares, c='blue',
%M Minutos (00 a 59) cubos = [x**3 para x em x_vals]
edgecolor='nenhum', s=20)
%S Segundos (00 a 61)
plt.scatter(x_values, cubos, c='vermelho',
fig, axarr = plt.subplots(2, 1, sharex=True)
edgecolor='nenhum', s=20)
Convertendo uma string em um objeto datetime
axarr[0].scatter(x_vals, quadrados)
plt.axis([0, 11, 0, 1100]) new_years = dt.strptime('1/1/2017', '%m/%d/%Y')
axarr[0].set_title('Quadrados')
plt.show()
Convertendo um objeto datetime em uma string
Preenchendo o espaço entre os conjuntos de dados axarr[1].scatter(x_vals, cubos, c='vermelho')
O método fill_between() preenche o espaço entre dois conjuntos de dados. É
ny_string = dt.strftime(new_years, '%B %d, %Y') axarr[1].set_title('Cubos')
preciso uma série de valores de x e duas séries de valores de y. Também é preciso print(ny_string)
uma cor de face para usar no preenchimento e um alfa opcional plt.show()
Traçando altas temperaturas
argumento que controla a transparência da cor.
O código a seguir cria uma lista de datas e uma lista correspondente de altas Compartilhando um eixo y
plt.fill_between(x_values, cubos, quadrados, temperaturas. Em seguida, ele plota as altas temperaturas, com os rótulos de
Para compartilhar um eixo y, usamos o argumento sharey=True .
facecolor='azul', alpha=0.25) data exibidos em um formato específico.
importar matplotlib.pyplot como plt
from datetime importar datetime como dt
x_vals = lista(intervalo(11))
importar matplotlib.pyplot como plt
Muitos conjuntos de dados interessantes têm uma data ou hora quadrados = [x**2 para x em x_vals]
from matplotlib importar datas como mdates
como valor x. O módulo datetime do Python ajuda você a trabalhar com cubos = [x**3 para x em x_vals]
esse tipo de dados.
datas = [
fig, axarr = plt.subplots(1, 2, sharey=Verdadeiro)
Gerando a data atual dt(2016, 6, 21), dt(2016, 6, 22),
A função datetime.now() retorna um objeto datetime que representa a dt(2016, 6, 23), dt(2016, 6, 24),
data e hora atuais. axarr[0].scatter(x_vals, quadrados)
]
axarr[0].set_title('Quadrados')
from datetime importar datetime como dt
altos = [57, 68, 64, 59]
axarr[1].scatter(x_vals, cubos, c='vermelho')
hoje = dt.agora() axarr[1].set_title('Cubos')
date_string = dt.strftime(hoje, '%m/%d/%Y') fig = plt.figure(dpi=128, figsize=(10,6))
print(data_string) plt.plot(datas, máximos, c='vermelho')
plt.show()
plt.title("Altas Temperaturas Diárias", fontsize=24)
Gerando uma data específica plt.ylabel("Temp (F)", tamanho da fonte=16)
Você também pode gerar um objeto datetime para qualquer data e hora que
desejar. A ordem posicional dos argumentos é ano, mês e dia. x_axis = plt.axes().get_xaxis()
Os argumentos hora, minuto, segundo e microssegundo são opcionais.
x_axis.set_major_formatter(
mdates.DateFormatter('%B %d %Y')
from datetime importar datetime como dt )
fig.autofmt_xdate()
new_years = dt(2017, 1, 1) Mais folhas de dicas disponíveis em
fall_equinox = dt(ano=2016, mês=9, dia=22) plt.show()
Machine Translated by Google
resultados = [1, 2, 3, 4, 5, 6]
Para fazer um gráfico com Pygal, você especifica o tipo de gráfico e frequências = [18, 16, 18, 17, 18, 13]
depois adiciona os dados.
chart = pygal.Bar()
Fazendo um gráfico de linhas
chart.force_uri_protocol = 'http'
Para visualizar a saída, abra o arquivo squares.svg em um navegador.
chart.x_labels = resultados chart.add('D6',
importar pygal frequências) chart.render_to_file('rolling_dice.svg')
Pygal permite personalizar muitos elementos de um enredo. Pygal pode gerar mapas mundiais e você pode adicionar quaisquer dados
Definições de configuração
Existem alguns temas padrão excelentes e muitas opções para que desejar a esses mapas. Os dados são indicados por cores, por rótulos e
Algumas configurações são controladas por um objeto Config .
estilizar elementos de plotagem individuais. por dicas de ferramentas que mostram os dados quando os usuários passam
my_config = pygal.Config() o mouse sobre cada país no mapa.
Usando estilos integrados
my_config.show_y_guides = False my_config.width
Para usar estilos integrados, importe o estilo e crie uma instância da classe de Instalando o módulo de mapa-múndi O módulo de
estilo. Em seguida, passe o objeto de estilo com o argumento de estilo ao criar o = 1000 my_config.dots_size = 5 mapa-múndi não é incluído por padrão no Pygal 2.0. Pode ser instalado com pip:
objeto de gráfico.
wm = World()
Classe de estilo personalizada wm.force_uri_protocol = 'http' wm.title =
Você pode começar com uma classe de estilo simples e, em seguida, definir
'População da América do Norte' wm.add('América do Norte',
apenas as propriedades de seu interesse.
populações)
chart_style = Style()
chart_style.colors = [ '#CCCCCC', wm.render_to_file('na_populations.svg')
'#AAAAAA', '#888888'] chart_style.plot_background
= '#EEEEEE'
Os dados em um projeto Django são estruturados como um conjunto Os usuários interagem com um projeto por meio de páginas da Web, e
de modelos. a página inicial de um projeto pode começar como uma página simples sem
dados. Uma página geralmente precisa de um URL, uma exibição e um modelo.
Definindo um modelo
Para definir os modelos para seu aplicativo, modifique o arquivo models.py que Mapeando as URLs de um projeto
foi criado na pasta do seu aplicativo. O método __str__() diz ao Django como O arquivo urls.py principal do projeto diz ao Django onde encontrar os arquivos
representar objetos de dados com base neste modelo. urls.py associados a cada aplicativo no projeto.
def __str__(auto):
<p>Entradas:</p>
Muitos elementos de uma página da Web são repetidos em todas return auto.texto[:50] + "..." <ul>
as páginas do site ou em todas as páginas de uma seção do site. {% para entrada nas entradas %}
Ao escrever um modelo pai para o site e um para cada seção, <li>
você pode modificar facilmente a aparência de todo o site. <p>
A maioria das páginas em um projeto precisa apresentar dados
específicos do usuário atual. {{entrada.data_adicionada|data:'M d, YH:i' }}
O modelo pai
O modelo pai define os elementos comuns a um conjunto de páginas e
</p>
define os blocos que serão preenchidos por páginas individuais. Parâmetros de URL <p>
Uma URL geralmente precisa aceitar um parâmetro informando quais dados {{entrada.texto|quebras de linha}}
<p> acessar do banco de dados. O segundo padrão de URL mostrado aqui </p>
<a href="{% url 'learning_logs:index' %}"> procura o ID de um tópico específico e o armazena no parâmetro topic_id. </li>
Registro de aprendizado
{% vazio %}
</a>
urlpadrões = [ <li>Ainda não há entradas.</li>
</p> {% endfor %}
url(r'^$', views.index, name='index'),
url(r'^topics/(?P<topic_id>\d+)/$', </ul>
{% conteúdo do bloco %}{% conteúdo do bloco final %}
visualizações.tópico, nome='tópico'),
] {% conteúdo do bloco final %}
O modelo filho
O modelo filho usa a tag de modelo {% extends %} para extrair a estrutura do
Usando dados em uma exibição
modelo pai. Em seguida, define o conteúdo de quaisquer blocos definidos no
A exibição usa um parâmetro da URL para extrair os dados corretos do banco
modelo pai.
de dados. Neste exemplo, a visualização está enviando um contexto
{% estende 'learning_logs/base.html' %} dicionário ao template, contendo os dados que devem ser exibidos na página. Você pode explorar os dados em seu projeto na linha de comando.
Isso é útil para desenvolver consultas e testar trechos de código.
{% bloquear conteúdo %} def tópico(solicitação, topic_id):
<p> """Mostrar um tópico e todas as suas entradas.""" Iniciar uma sessão de shell
O Learning Log ajuda você a acompanhar seu tópico = Topics.objects.get(id=topic_id)
aprendizado, para qualquer tópico que você esteja entradas = topic.entry_set.order_by( $ python manage.py shell
aprendendo sobre. '-data adicionada')
</p> Acessar dados do projeto
contexto = {
{% conteúdo do bloco final %} 'tópico': tópico, >>> do tópico de importação learning_logs.models
'entradas': entradas, >>> Topic.objects.all()
[<Tópico: Xadrez>, <Tópico: Escalada>]
} return render(solicitação, >>> tópico = Topic.objects.get(id=1)
'learning_logs/topic.html', contexto) >>> tópico.texto
'Xadrez'
de django.conf.urls url de importação A tag user.is_authenticated permite que você forneça conteúdo específico para
de django.contrib.auth.views import login usuários, dependendo se eles estão logados ou não.
A propriedade {{ user.username }} permite que você cumprimente os usuários que
a partir de . importar visualizações fizeram login. Os usuários que não fizeram login veem os links para se registrar ou
fazer login.
urlpadrões = [ <p>
url(r'^login/$', login, <a href="{% url 'learning_logs:index' %}">
A maioria dos aplicativos da Web precisa permitir que os usuários {'template_name': 'users/login.html'}, Registro de aprendizado
criem contas. Isso permite que os usuários criem e trabalhem com seus nome='login'), </a>
próprios dados. Alguns desses dados podem ser privados e alguns podem ser url(r'^logout/$', views.logout_view, {% if user.is_authenticated %}
públicos. Os formulários do Django permitem que os usuários insiram e
nome='logout'), Olá, {{ usuário.nome de usuário }}.
url(r'^register/$', views.register, <a href="{% url 'users:logout' %}">
modifiquem seus dados.
nome='registro'), sair
] </a>
O modelo de login {% senão %}
As contas de usuário são gerenciadas por um aplicativo dedicado
A exibição de login é fornecida por padrão, mas você precisa fornecer seu próprio modelo <a href="{% url 'users:register' %}">
chamado users. Os usuários precisam ser capazes de se registrar, fazer
de login. O modelo mostrado aqui exibe um formulário de login simples e fornece registro
login e sair. O Django automatiza muito desse trabalho para você. mensagens de erro básicas. Crie uma pasta de modelos na pasta de usuários e, em </a> -
seguida, crie uma pasta de usuários na pasta de modelos. Salve este arquivo como <a href="{% url 'users:login' %}">
Fazendo um aplicativo de usuários
login.html.
Depois de criar o aplicativo, certifique-se de adicionar 'usuários' a INSTALLED_APPS Conecte-se
A tag {% csrf_token %} ajuda a prevenir um tipo comum de ataque com formulários.
no arquivo settings.py do projeto. </a>
O elemento {{ form.as_p }} exibe o formulário de login padrão em formato de
parágrafo. O elemento <input> nomeado a seguir redireciona o usuário para a página
{% fim se %}
$ python manage.py usuários do startapp
inicial após um login bem-sucedido. </p>
Incluindo URLs para o aplicativo de usuários
Adicione uma linha ao arquivo urls.py do projeto para que os URLs do aplicativo dos {% conteúdo do bloco %}{% conteúdo do bloco final %}
usuários sejam incluídos no projeto. {% extends "learning_logs/base.html" %}
A visualização de logout
urlpadrões = [ {% bloquear conteúdo %} A função logout_view() usa a função logout() do Django e então redireciona o usuário
url(r'^admin/', include(admin.site.urls)), {% if form.errors %} de volta para a página inicial. Como não há página de logout, não há modelo de logout.
url(r'^users/', include('users.urls', Certifique-se de escrever este código no arquivo views.py que está armazenado na pasta
<p>
de aplicativos dos usuários.
namespace='usuários')), Seu nome de usuário e senha não correspondem.
url(r'', include('learning_logs.urls', Por favor, tente novamente. de django.http import HttpResponseRedirect
namespace='learning_logs')), </p> de django.core.urlresolvers import reverse
] {% fim se %} de django.contrib.auth import logout
O Heroku permite que você envie seu projeto para um servidor ativo, Consultando dados para o usuário atual new_topic = form.save(commit=False)
tornando-o disponível para qualquer pessoa com conexão à Internet. O Em uma exibição, o objeto de solicitação possui um atributo de usuário . Você pode usar
new_topic.owner = request.user
Heroku oferece um nível de serviço gratuito, que permite que você esse atributo para consultar os dados do usuário. A função filter() puxa os dados que
new_topic.save()
pertencem ao usuário atual.
aprenda o processo de implantação sem nenhum compromisso. Você
precisará instalar um conjunto de ferramentas heroku e usar o git para tópicos = Topic.objects.filter( Mais folhas de dicas disponíveis em
rastrear o estado do seu projeto. Consulte http:// devcenter.heroku.com/ proprietário=pedido.usuário)
e clique no link Python.