Freecodecamp: Currículo Futuro do Python [discussão]

Criado em 25 abr. 2017  ·  56Comentários  ·  Fonte: freeCodeCamp/freeCodeCamp

Currículo Python

Esta edição será o principal tópico de planejamento e desenvolvimento do futuro currículo FCC Python.

Para qualquer discussão sobre a integração do REPL.it Classroom, visite https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

No momento, estamos trabalhando na execução de um conjunto de testes Python verificável em um widget iframe Repl.it. Assim que fizermos isso funcionar, começaremos a implementar o currículo definido neste tópico. Se você estiver interessado em desenvolver esta parte do currículo do FCC Python, envie uma mensagem para mim (Ethan Arrowood) no Gitter ou comente abaixo.

Anote para escrever todos os desafios Python na versão 3.6



A estrutura atual do currículo FCC Python é: Seção para iniciantes, Seção intermediária e Seção de tópicos especiais.

Seção para iniciantes:

  • [] Introdução ao Python
  • [ ] Resultado

    • Impressão

    • Personagens de Fuga

    • entrada

  • [ ] Tipos de dados

    • Inteiros, Flutuantes

    • Cordas

    • Tuplas

    • Listas

    • Jogos

    • Dicionários

  • [] Operadores

    • +, -,, /,%, *

    • <,>, <=,> =, ==,! =

    • =

    • Verdadeiro, falso e, ou, não

    • dentro, não dentro

    • é não é

  • [x] Matemática - @bgroveben

    • Adicionar, subtrair, multiplicar, dividir

    • Potência, sqrt (), abs (), round (), sum (), max (), min ()

  • [] Variáveis
  • [ ] Condicionais

    • if, elif, else

  • [ ] Rotações

    • while, for (in range), for (in list), for (in string)

  • [ ] Funções
  • [ ] Aulas

Seção intermediária:

  • [] Arquivo I / O
  • [] Iteradores e Geradores
  • [x] Lambda - @robbiemu
  • [ ] Condicionais
  • [] OOP
  • [] Módulos, bibliotecas, pacotes
  • [] Tratamento de arquivos e erros
  • [] Objetos e DataTypes avançados
  • [] Imprimir formatação
  • [] Compreensões de lista
  • [] Decoradores

Seção de tópico especial:

  • [] Aprendizado de Máquina
  • [ ] Desenvolvimento de jogos
  • [] Webcraping (BeautifulSoup)
  • [] GIS (Folheto / Fólio)
  • [] Flask / Django (melhor focar em um, não em ambos)
  • [] Análise de dados (Panda / Numpy)
  • [] Visualização de dados (breakh)
  • [] GUI (tkinter)
  • [] Geocodificação (geopy)
  • [] Kit de ferramentas de linguagem natural (NLTK)

Tem uma ideia para uma aula de seção?

Comente abaixo e especifique em qual seção ele deve ser adicionado e por quê.

Quer desenvolver o currículo de uma aula?

Comente abaixo os seguintes detalhes:

  • Título
  • Descrição / Explicação / Lição
  • Prompt de código / desafio
  • Código Pré-definido
  • Solução
  • Testes

Quer fazer alterações em uma aula existente?

Forneça suas atualizações com explicações detalhadas do porque você está fazendo as alterações fornecidas.



Em breve

-

Como propor um desafio Python

https://github.com/freeCodeCamp/freeCodeCamp/tree/feature/python-challenges

Propondo um desafio Python?

learn

Comentários muito úteis

Olá pessoal, sou o fundador / ceo da Repl.it. A FCC é muito querida em nossos corações, então faremos tudo o que pudermos para apoiar aqui. Quais são os principais obstáculos para a adoção de salas de aula Repl.it para isso?

Todos 56 comentários

Aqui está o que podemos adicionar:
Principiante

  • Condicionais

Intermediário:

  • Iteradores e geradores
  • Lambda
  • Condicionais
  • OOP
  • Módulos, bibliotecas, pacotes
  • Tratamento de arquivos e erros
  • Objetos e DataTypes avançados
  • Formatação de impressão

Avançado:

  • Webcraping (BeautifulSoup)
  • GIS (Folheto / Fólio)
  • Flask / Django (gostaria mais de Django)
  • Análise de dados (Panda / Numpy)
  • Visualização de dados (breakh)
  • GUI (tkinter)
  • Geocodificação (geopy)

@mstellaluna Obrigado por suas recomendações. Qual seria a diferença entre a seção condicional inicial e a seção condicional intermediária?

@Ethan-Arrowood para mim o básico deve ser apenas um conhecimento mínimo (se, senão, para qual). Minha entrada para o "condicional" no intermediário seriam condicionais com base na entrada do usuário ou declarações ternárias .. mesma coisa para a formatação de impressão .. básica seria uma simples declaração de impressão enquanto intermediária podemos introduzir declarações de impressão com variáveis, o% s. etc.

Repl.it possui uma nova área para a criação de salas de aula personalizadas. Você pode criar atribuições com instruções.

Repl.it Classrooms
https://repl.it/site/classrooms

Lista de salas de aula da comunidade
https://repl.it/community

Eu sugiro adicionar seções de algoritmo básicas, intermediárias e avançadas (semelhante ao currículo do FCC Front End para JavaScript).

Eu olhei para o exemplo FCC-Python-Variable-Challenge dado, e percebi que o desafio exige um pouco de conhecimento de 'pré-requisitos'. Como se o campista já tivesse sido apresentado a variáveis ​​antes.

A descrição / explicação para o desafio variável não explica o que são variáveis. Ao contrário do desafio Declare JavaScript Variables do JavaScript , que faz uma pequena introdução sobre o que são as variáveis.

Eu sei que este é apenas um exemplo - mas só para ter certeza - vamos supor que o campista já passou pelo currículo JavaScript enquanto construía o currículo Python?

@jamesperrin Sim, investigamos isso, mas estamos tentando manter o usuário no site da FCC, então os desafios devem ser incorporados. Além disso, não temos como acessar os resultados dos testes de unidade das salas de aula Repl.

@ U-way Sim, esse foi meu erro. O objetivo é que este seja um currículo independente para que as explicações reais sejam muito mais detalhadas (como a versão JS). Obrigado por destacar isso :)

@AnikaErceg essas serão ótimas seções de prática. Definitivamente vou manter isso em mente. Obrigado!

@ Ethan-Arrowood Você pode querer incluir o Natural Language Toolkit.

Eu adicionei compreensões de lista para intermediar

Que tal decoradores em avançado? Presumo que os gerenciadores de contexto surjam durante o tratamento do arquivo.

@ t3h2mas Eu coloquei decoradores em intermediários.

Se você adicionou for (in list) , talvez também possa adicionar for (in string) ?
Além disso, uma introdução ao operador in também seria bom (eu sei que achei minha vida mais fácil quando descobri que ele não precisa ser usado apenas com for loops: smiley:).

@AnikaErceg boa sugestão. Feito. Eu adicionei está e não está bem.

@ginoskotheon Você se esqueceu de adicionar for (in string) em loops ou não vê sentido em introduzir isso? :risonho:

Sou um desenvolvedor cuja primeira linguagem foi Python ... Já ajudo com meu capítulo local do FCC e o organizador sugeriu que eu gostaria de ajudar com o novo currículo. Não estou 100% certo de como começar a contribuir, mas definitivamente gostaria de fazer. Também sou bastante ativo na comunidade Python, tanto localmente quanto em geral, então posso conseguir muitos olhos experientes quando necessário.

Minhas primeiras sugestões:

  • [] fazer todos os exemplos seguirem PEP 8
  • [] a lição booleana deve estar em 'tipos de dados' junto com os valores 'verdadeiro' e 'falso'
  • [] alguma da biblioteca padrão deve ser incluída em algum lugar ( itertools , collections )
  • [] algumas bibliotecas básicas podem ser incluídas ( requests , scrapy , etc)
  • [] Não tenho certeza do que 'Sequências de escape' significa em 'Saída', mas se se refere a strings de estilo %s ... deixe isso para um 'material legado que você pode encontrar, mas não realmente precisa se preocupar com a seção 'e apenas ensinar o novo estilo f e .format() strings de estilo.
  • [] a seção de loop menciona range , list e 'string' como se fossem todos diferentes, mas em Python são todos iteráveis, por isso você pode fazer um loop sobre eles com palavras-chave. Talvez isso possa ser abordado na seção 'iteradores e geradores'.

    • [] enumerate()

  • [] gerenciadores de contexto devem ser mencionados em algum lugar.
  • [] pode haver uma seção avançada para asyncio
  • [] tradicionalmente, o PEP 20 é ensinado em algum lugar no início junto com alguns exemplos de spam e eggs .
  • [] testes
  • [] virtualenvs
  • [] instalando
  • [ ] comentários
    Eu ficaria mais do que feliz em ajudar com este projeto de qualquer maneira que puder. Há um bom tempo que penso que precisávamos de algo assim.

@cldershem Tantas sugestões excelentes, obrigado! Com sua experiência, o melhor tipo de contribuição que você pode fazer é escrever as próprias lições / desafios. Me diga quais você tem interesse em escrever 😄

@cldershem

Não estou 100% certo de como começar a contribuir, mas definitivamente gostaria de fazer.

https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Pull-Request-Contribute

Pode apontar a direção certa.

Talvez @ Ethan-Arrowood receba os envios por meio de comentários do Github também?

@ t3h2mas Sim, como eu disse no início das aulas / desafios, os envios podem ser feitos aqui neste tópico como comentários 😄

@cldershem Outra maneira de ajudar é conhecer uma boa maneira de criar um desafio no navegador que possa realmente ser testado (com unittest). Estamos explorando todos os tipos de opções de REPL.it para codeMirror para Skulpt.

@cldershem Eu provavelmente deveria escrever "caracteres de escape". São coisas como '\ n', '\ t', etc.

E eu sei que eles são iteráveis, mas estou começando a dividir as coisas em termos de pequenas lições individuais.

A propósito, obrigado por todas as sugestões e toda a ajuda. Estou planejando trabalhar em uma lição / desafio de amostra no fim de semana e espero que possa ser uma espécie de modelo para outros. Se você quiser enfrentar uma lição / desafio que funcione de forma semelhante aos desafios do Free Code Camp, poste seu código. Eu adoraria ver isso.

@ Ethan-Arrowood @ginoskotheon @cldershem
Eu também gostaria de ajudar a escrever as lições e desafios para o curso FCC-Python.
Vejo por comentários anteriores que Repl.it Classrooms não é a melhor escolha, mas posso começar a trabalhar nas aulas (título, descrição, testes, etc. descritos acima) lá. Uma vez que uma plataforma / estrutura tenha sido definida, sempre posso modificar o código e movê-lo.
Eu escrevi alguns exemplos de exercícios que você pode encontrar aqui ; você deve ser capaz de vê-los, mas precisa estar conectado para importá-los, dê uma olhada nos bastidores e modifique-os.
Sinta-se à vontade para comentar, criticar e alterar as próprias lições e, por favor, me avise quando uma plataforma / estrutura mais apropriada for decidida.
Nesse ínterim, posso trabalhar nas lições para iniciantes detalhadas acima, começando com matemática e passando para o que mais precisa ser feito.

Olá pessoal, sou o fundador / ceo da Repl.it. A FCC é muito querida em nossos corações, então faremos tudo o que pudermos para apoiar aqui. Quais são os principais obstáculos para a adoção de salas de aula Repl.it para isso?

@amasad olá! Fico feliz em ter você aqui 😄
O principal obstáculo que enfrentamos ao adotar o Repl.it no curso FCC Python é a interface com os testes de unidade Repl.it Classroom. Adoramos a estrutura Repl.it Classroom de poder executar um arquivo independente com testes de unidade; no entanto, não podemos descobrir como saber quando um usuário conclui o desafio (passa em todos os testes de unidade). É claro que esse comportamento está embutido no Repl.it, mas para manter a sensação do FreeCodeCamp atual, gostaríamos de poder avançar o usuário para o próximo desafio automaticamente (ou solicitar que ele o faça) assim que completar o desafio atual (ou seja, passar com sucesso em todos os testes de unidade).

Alguma ideia de como podemos implementar isso? O FCC é escrito em JavaScript, portanto, qualquer tipo de API da Web ou módulo npm funcionaria muito bem.

Se você acha que muitos de seus visualizadores virão do background do JavaScript, acho que uma introdução sobre as diferenças seria útil. Por exemplo

// javascript
var dict = {
    a : 1
};

console.log(dict.a)
# python
dict = {
    "a" : 1
}

print(dict["a"])

Outro exemplo seria fazer um loop em um dicionário ou array com loops for. Isso me faz tropeçar o tempo todo.

_Título_ Introdução a Lambdas

_Descrição / Explicação / Lição_
srcs:

1 http://stackoverflow.com/questions/890128/why-are-python-lambdas-useful
2 http://www.secnetix.de/olli/Python/lambda_functions.hawk
3 https://pythonconquerstheuniverse.wordpress.com/2011/08/29/lambda_tutorial/
4 http://stackoverflow.com/questions/16501/what-is-a-lambda-function
5 https://en.wikipedia.org/wiki/Anonymous_function

"Uma função anônima (literal de função, abstração lambda) é uma definição de função que não está ligada a um identificador." [5] A palavra "Lambda vem do Lambda Calculus" [4]. Em python, lambda é uma palavra-chave para definir uma função anônima. Usando a palavra-chave lambda vez da palavra-chave def , um lambda básico se parece com isto: lambda x: x**2 Estes podem ser atribuídos a variáveis ​​e reutilizados de forma muito semelhante a funções:

>>> def f (x): return x**2
>>> print f(8)
64
>>> g = lambda x: x**2
>>> print g(8)
64

_src 2_

Os casos de uso mais comuns são manter o código curto e legível, em vez de dividir a definição e usar conforme este exemplo:

def __init__(self, parent):
    """Constructor"""
    frame = tk.Frame(parent)
    frame.pack()

    btn22 = tk.Button(frame,
        text="22", command=self.buttonCmd22)
    btn22.pack(side=tk.LEFT)

    btn44 = tk.Button(frame,
        text="44", command=self.buttonCmd44)
    btn44.pack(side=tk.LEFT)

def buttonCmd22(self):
    self.printNum(22)

def buttonCmd44(self):
    self.printNum(44)

_src 3_

Nesta interface GUI Tkinter, uma função deve ser passada para o atributo _command_. As funções são nomeadas com números porque foram geradas com um construtor RAD. Isso é bom e funcional, mas não muito legível. Você pode renomeá-los e isso torna as coisas mais claras, mas se você tivesse muitos botões, poderia ser complicado procurar pelo código para encontrar o comando correto e, uma vez que eles retornam apenas um valor básico, uma solução melhor seria definir o funcionar ali mesmo, anonimamente:

frame = tk.Frame(parent)
frame.pack()

btn22 = tk.Button(frame,
        text="22", command=lambda: self.printNum(22))
btn22.pack(side=tk.LEFT)

btn44 = tk.Button(frame,
        text="44", command=lambda: self.printNum(44))
btn44.pack(side=tk.LEFT)

_src 3_

Outro recurso importante desse uso é que ele também torna o código mais curto, o que significa que ele está mais prontamente disponível para o programador ao buscar uma ferramenta como parte de uma solução maior.

_Código Prompt / Desafio_
Escreva uma expressão lambda que tenha os principais recursos descritos acima; tornar o código mais legível movendo todo o código em uso para o mesmo lugar; resultando em um código mais curto e natural.

_Código pré-definido_

# only edit below this line
def y(z):
  return abs(5-z)

print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=y))

_src 1_

_Solução_
print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)))

@robbiemu ótimo trabalho! Minha única sugestão seria adicionar um comentário na seção Código pré-definido ao lado da linha de impressão que diga algo como # only edit this line . Também acredito que este é o código do python 2 e vamos ensinar o python 3, então acho que a única mudança é que a linha de impressão requer quebra de linha '()'.
Obrigado pela sua contribuição!

Ethan, obrigado. Vou continuar trabalhando nisso. O problema e a solução podem ser alterados para que também haja testes razoáveis ​​(sem usar um conjunto de dados estático, como fiz aqui). Eu gostaria de ver uma lição de exemplo para a melhor abordagem para fazer isso.

@robbiemu, é claro. Ainda estamos trabalhando no REPL.it e atualizaremos este tópico assim que tivermos mais informações. Bom trabalho por enquanto 😄

Este é um dos desafios de código para a seção Principiante - Matemática listado no início deste tópico.

_Title_ - valor absoluto

_Descrição / Explicação / Lição_ -
O valor absoluto refere-se à distância de um número de zero.
Se um número for negativo, abs () o converterá em positivo.
Em abs (x), x pode ser um número inteiro, flutuante ou complexo.
https://docs.python.org/3/library/functions.html#abs
https://docs.python.org/3/library/stdtypes.html#numeric -types-int-float-complex

>>> abs(2)
2
>>> abs(-2)
2
>>> abs(-2.0)
2.0

_Código Prompt / Desafio_ -
A variável absolute_value é igual a -42.
Altere absoluto_valor para que seja igual ao valor absoluto de -42.

_Código pré-definido_ -

absolute_value = -42

_Solution_ -

absolute_value = abs(-42)

_Testes_ -

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(absolute_value, int)
        self.assertEqual(absolute_value, 42)

@bgroveben LGTM. bom trabalho!

@ Ethan-Arrowood Obrigado! Também escrevi lições para os outros desafios básicos / matemáticos listados acima. Posso postar cada um deles neste tópico, se você quiser. Além disso, acho que seria uma boa ideia incluir round (), sum (), max () e min () com as lições básicas de matemática - elas serão úteis.

@bgroveben Vou marcá-lo como concluído e sim, por favor. Faça cada desafio em um comentário separado também, por favor; será mais fácil fazer referência para alterações ou qualquer outra coisa. Obrigado por suas contribuições!

@ Ethan-Arrowood

@amasad olá! Fico feliz em ter você aqui 😄

Que bom estar aqui 💃

O principal obstáculo que enfrentamos ao adotar o Repl.it no curso FCC Python é a interface com os testes de unidade Repl.it Classroom. Adoramos a estrutura Repl.it Classroom de poder executar um arquivo independente com testes de unidade; no entanto, não podemos descobrir como saber quando um usuário conclui o desafio (passa em todos os testes de unidade). É claro que esse comportamento está embutido no Repl.it, mas para manter a sensação do FreeCodeCamp atual, gostaríamos de poder avançar o usuário para o próximo desafio automaticamente (ou solicitar que ele o faça) assim que completar o desafio atual (ou seja, passar com sucesso em todos os testes de unidade).

Alguma ideia de como podemos implementar isso? O FCC é escrito em JavaScript, portanto, qualquer tipo de API da Web ou módulo npm funcionaria muito bem.

O mais fácil é que nós cozinhemos. Tenha uma configuração no lado do professor para coisas que dizem "avanço automático" ou algo assim. (Não somos contra a adição de webhooks, etc., mas para reduzir a complexidade). Isso funcionaria?

@amasad usando um recurso de "avanço automático", certamente seríamos capazes de emular o FreeCodeCamp em uma sala de aula Repl.it, mas ainda não seríamos capazes de rastrear o progresso do usuário no final do FCC, o que é crucial para a sensação do FCC.

Que tal um recurso que nos permite OBTER / POSTAR dados de uma 'Sala de Aula'. Assim, poderíamos fazer algo como:

repl.getUser('classroomID', 'userID').then( () => {
    // do stuff async 
}).catch( (error) => {
    // handle error
});

ou melhor ainda:

repl.getProgress('classroomID', 'lessonID', 'userID').then( () => { }).catch( (e) => { });

Agora, ambos os métodos seriam executados em nosso lado, mas como o REPL Classroom é incorporado por meio de um iframe, precisaríamos pelo menos de alguns gatilhos de evento simples do lado do REPL para rastrear adequadamente o progresso individual do usuário.

Além disso, como o Classroom seria incorporado por meio de um iframe, poderíamos potencialmente obter um recurso que, quando um usuário conclui uma lição, o REPL Classroom executa algumas linhas de JavaScript (que podemos definir através do portal do professor) para que possamos fazer com que a sala de aula comunicar com a FCC?

Esperamos poder usar salas de aula REPL não apenas para Python, mas também para outras linguagens. Assim que o FCC Python Curriculum estiver instalado e funcionando com sucesso, seguiremos em frente para implementar linguagens como Java ou C ++ (ou literalmente qualquer linguagem que o REPL possa nos oferecer para usar!).

Eu adoraria obter a opinião de @QuincyLarson sobre isso, assim como alguns outros contribuidores principais do FCC (tentarei entrar em

Olá a todos, muito obrigado pelos comentários e sugestões.

@amasad Obrigado por reservar um tempo para compartilhar seus pensamentos e ideias aqui. É ótimo saber que REPL.it está trabalhando no produto de sala de aula, que adoraríamos integrar na plataforma.

Para começar, seria ótimo se pudéssemos levar isso em uma discussão separada em vez deste tópico de currículo, para mantê-lo mais relevante para a própria integração.

@Ethan-Arrowood Trabalho incrível com a iniciativa. Obrigado por seu trabalho duro.

@amasad @QuincyLarson Mudei oficialmente a discussão da sala de aula REPL para este tópico de discussão (por recomendação @raisedadead ). https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

acompanhando o comentário de cldershem (comentado 8 dias atrás), aqui está um para collections -

Título

exemplares nomeados

Descrição / Explicação / Lição

1 https://en.wikipedia.org/wiki/Tuple
2 https://docs.python.org/3.6/library/collections.html
3 https://docs.python.org/3.6/library/collections.html#collections.namedtuple
4 https://pythonprogramming.net/reading-csv-files-python-3/

Uma tupla é um conceito comum em matemática. É considerada uma lista ordenada finita de elementos. [1] Em python, eles são funcionalmente semelhantes aos dicionários, onde as chaves são definidas com antecedência. Namedtuples podem ser usados ​​para fornecer uma árvore de propriedades rápida para qualquer uso: como se seu aplicativo deve lidar com meias e todas as meias têm um tamanho e um preço, então uma tupla com dois campos é útil, aproximando-se do dicionário {size: _size_, price: _price_} . Para obter uma tupla com esses campos, você os passa para a função de fábrica collections.namedtuple : [2]
collections.namedtuple(Socks, ['size', 'price'])
Por conveniência, especialmente ao processar informações de fontes de texto simples, os nomes dos campos podem ser uma matriz ou uma única string com valores separados por vírgula e / ou por espaço: [3]
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
Qualquer identificador Python válido pode ser usado para um _fieldname_, exceto para nomes que começam com um sublinhado. Os identificadores válidos consistem em letras, dígitos e sublinhados, mas não começam com um dígito ou sublinhado e não podem ser uma palavra-chave como class, for, return, global, pass ou raise. [3]
Depois de gerados, eles podem ser usados ​​para criar instâncias com entradas semelhantes a um dicionário:

Point = namedtuple('Point', ['x', 'y'])
p = Point(x=11, y=22)
p[0] + p[1] # 33
x, y = p # (11, 22)
p.x + p.y # 33
p # Point(x=11, y=22)

_de_ [3]

Prompt de código / desafio

Um bom uso de namedtuples é facilitar a ingestão de dados, como a partir de uma exportação csv de um banco de dados. No código a seguir, corrija essa importação CSV com uma tupla.

Código Pré-definido

import csv
import collections

# only change code below this line!
recordData = ['fieldNames'] # find the fieldnames in the code below
# only change code above this line!
EmployeeRecord = collections.namedtuple('EmployeeRecord', recordData)

with open('employee-records.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
# onlt change code below this line!
        name = row[0]
        age = row[1]
        title = row[2]
        department = row[3]
        paygrade = row[4]

        processEmployee([name, age, title, department, paygrade]) # fails because processEmployee accepts an EmployeeRecord Tuple!
# only change code above this line!

_derivado de_ [4]

_note_: o acima usa um arquivo real, mas poderíamos substituir as linhas with ... readCSV por algo como:
readCSV = csv.reader(['Alan,42,Manager,Sales, N1', 'Beth,38,Regional Director,Operations,CO','Robin,23,Associate,Sales,C2']

Solução

import csv
import collections

# only change code below this line!
recordData = ['name', 'age', 'title', 'department', 'paygrade']
# only change code above this line!
EmployeeRecord = collections.namedtuple('EmployeeRecord', recordData)

with open('employee-records.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
# onlt change code below this line!
        employee = EmployeeRecord(*row)

        processEmployee(employee)
# only change code above this line!

Lição 2:

Título

namedtuples._make

Descrição / Explicação / Lição

1 https://docs.python.org/3.6/library/collections.html#collections.namedtuple

Um método de NamedTuples chamado __make_ facilita a geração de instâncias dentro de uma função iteradora. Isso tornaria o problema da lição anterior ainda mais conciso.
Isso é usado como:

for emp in map(EmployeeRecord._make, allRows):
    print(emp.name, emp.title)

Prompt de código / desafio

Estamos revisitando a lição anterior e revisando o código. Está quase lá, mas o trabalho está inacabado. Para sua conveniência, alguns registros são impressos onde você deve processar o registro. Lembre-se, precisamos criar um EmployeeRecord e passá-lo para uma função em outro lugar no código, como:

        employee = EmployeeRecord(*row)

        processEmployee(employee)

Código Pré-definido

import csv
from collections import namedtuple

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
# only change code below this line!
    print(emp.name, emp.title)

Solução

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

import csv
for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
# only change code below this line!
    processEmployee(emp)

Provavelmente também poderíamos usar lições rápidas ilustrando:

  • n = NamedTuple(**Dictionary)
  • uso de ._fields para fazer formas alternativas: TwoD = namedtuple('TwoD', 'x y') => ThreeD = namedtuple('ThreeD', TWo._fields + ('z',))
  • cobertura de casos de uso básicos: ingestão de dados (como o csv), transações de banco de dados, transações de rede, facilitação de POJOs (ou .. POPOs é uma coisa em Python? lol)

Aqui estão os outros desafios matemáticos para iniciantes:

__Title: __ Python Addition

__Descrição / Explicação / Lição: __

Em Python, um inteiro (int) é um dos 3 tipos numéricos distintos.
Neste exercício, você adicionará dois inteiros usando o operador de mais (+).

>>> 2 + 2
4

__Code Prompt / Desafio: __

Altere o 0 para que o total seja igual a 20.

__Pcódigo definido novamente: __

total = 10 + 0

__Solução:__

total = 10 + 10

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 20)

__Título:__
Calcule o quociente e o resto usando a função divmod ().

__Descrição / Explicação / Lição: __

Divmod recebe dois números (não complexos) como argumentos e retorna um par de números consistindo em seu quociente e resto ao usar a divisão inteira.
Para inteiros, o resultado é o mesmo que (a // b, a% b).

>>> divmod(1, 1)
(1, 0)
>>> divmod(3, 2)
(1, 1)

__Code Prompt / Desafio: __

Neste exercício, as variáveis ​​aeb são definidas para você.
Defina uma variável chamada resultado que chama a função divmod nas variáveis ​​a e b (nessa ordem).

__Pcódigo definido novamente: __

a = 11
b = 3

__Solução:__

a = 11
b = 3
result = divmod(a, b)

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(result, tuple)
        self.assertEqual(result, (3, 2))

__Título: __ Expoentes Python

__Descrição / Explicação / Lição: __

Python usa o operador de asterisco duplo (**) para lidar com a exponenciação.
O número antes dos asteriscos é a base e o número depois é o expoente.
Python também permite que você use a função interna pow (x, y), que fornece x elevado à potência de y.

>>> 2 ** 2
4
>>> pow(2, 4)
16

__Code Prompt / Desafio: __

No console, você recebe duas variáveis, a e b.
Usando um dos métodos descritos nesta lição, defina uma variável chamada potência que é igual a a elevado à potência de b.

__Pcódigo definido novamente: __

a = 3
b = 4

__Solução:__

a = 3
b = 4
power = pow(a, b)
# or #
power = a ** b

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(power, int)
        self.assertEqual(power, 81)

__Title: __ Python Float Division

__Descrição / Explicação / Lição: __

Python 3 distingue entre divisão inteira (piso) e divisão flutuante (verdadeira).
Python usa um único operador de barra (/) para a divisão flutuante.
Ao usar a divisão flutuante, mesmo se o quociente (resultado) for um número inteiro como 1 ou 2, um número de ponto flutuante será retornado em vez de um inteiro.

>>> 1 / 1
1.0
>>> 3 / 2
1.5

__Code Prompt / Desafio: __

Quando você executa o código existente, a variável denominada quociente terá um valor de 1,0.
Altere o segundo número (o denominador) para que o quociente tenha um valor de 2,5.

__Pcódigo definido novamente: __

quotient = 5 / 5

__Solução:__

quotient = 5 / 2

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(quotient, float)
        self.assertEqual(quotient, 2.5)

__Title: __ Python Integer Division

__Descrição / Explicação / Lição: __

Python 3 distingue entre divisão inteira (piso) e divisão flutuante (verdadeira).
Python usa um operador de barra dupla (//) para divisão inteira.
Ao usar a divisão inteira, o Python arredondará o quociente para o número inteiro mais próximo.

>>> 1 // 1
1
>>> 3 // 2
1

__Code Prompt / Desafio: __

Ao executar o código existente, a variável denominada quociente terá o valor 1.
Altere o segundo número (o denominador) para que o quociente tenha um valor de 2.

__Pcódigo definido novamente: __

quotient = 5 // 5

__Solução:__

quotient = 5 // 2

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(quotient, int)
        self.assertEqual(quotient, 2)

__Title: __ Python Maximum Value

__Descrição / Explicação / Lição: __

A função max () retorna o maior item em um iterável (como uma lista ou string), ou o maior de dois ou mais argumentos.
Ao fornecer um iterável como um argumento, devemos nos certificar de que todos os elementos no iterável são do mesmo tipo.
Se o iterável estiver vazio e o padrão não for fornecido, um ValueError é gerado.

>>> max(1,2,3,4)
4
>>> list1 = ['a', 'e', 'i', 'o', 'u']
>>> max(list1)
'u'
>>> string1 = "largest"
>>> max(string1)
't'

__Code Prompt / Desafio: __

O código inicial tem uma lista de números nomeados, bem, números.
A variável mais alta é inicializada com números.
Faça o valor mais alto igual ao maior número em números.

__Pcódigo definido novamente: __

numbers = [8, 2, 4, 3, 6, 5, 9, 1]
highest = numbers

__Solução:__

numbers = [8, 2, 4, 3, 6, 5, 9, 1]
highest = max(numbers)

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(highest, int)
        self.assertEqual(highest, 9)

__Título: __ Valor Mínimo Python

__Descrição / Explicação / Lição: __

A função min () retorna o menor item em um iterável (como uma lista ou string), ou o menor de dois ou mais argumentos.
Ao fornecer um iterável como um argumento, devemos nos certificar de que todos os elementos no iterável são do mesmo tipo.
Se o iterável estiver vazio e o padrão não for fornecido, um ValueError é gerado.

>>> min(1,2,3,4)
1
>>> list1 = ['a', 'e', 'i', 'o', 'u']
>>> min(list1)
'a'
>>> string1 = "smallest"
>>> min(string1)
'a'

__Code Prompt / Desafio: __

O código inicial tem uma lista de letras chamadas, digamos, letras.
A variável mais baixa é inicializada com letras.
Faça com que o valor mais baixo seja igual à 'menor' (primeira letra em ordem alfabética).

__Pcódigo definido novamente: __

letters = ['m','o','n','t','y','p','y','t','h','o','n']
lowest = letters

__Solução:__

letters = ['m','o','n','t','y','p','y','t','h','o','n']
lowest = min(letters)

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(lowest, str)
        self.assertEqual(lowest, 'h')

__Título: __ Multiplicação Python

__Descrição / Explicação / Lição: __

Python usa o operador asterisco (*) para multiplicação.

>>> 3 * 3
9

__Code Prompt / Desafio: __

Altere 0 para que o produto seja igual a 80.

__Pcódigo definido novamente: __

product = 8 * 0

__Solução:__

product = 8 * 10

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(product, int)
        self.assertEqual(product, 80)

__Título: __ Python Remainder

__Descrição / Explicação / Lição: __

O operador% (módulo) produz o resto da divisão do primeiro argumento pelo segundo.
O operador módulo sempre produz um resultado com o mesmo sinal de seu segundo operando (ou zero).

>>> 3 % 2
1
>>> 3 % 2.0
1.0

Uma maneira simples de determinar se um número é ímpar ou par é verificar o resto quando esse número é dividido por 2.
Para números ímpares, o resto é 1.
Para números pares, o resto é 0.

>>> 3 % 2
1
>>> 4 % 2
0

__Code Prompt / Desafio: __

Defina a variável resto igual ao resto de 11 dividido por 3 usando o operador módulo (%).

__Pcódigo definido novamente: __

remainder = "Solution goes here"

__Solução:__

remainder = 11 % 3

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(remainder, int)
        self.assertEqual(remainder, 2)

__Title: __ Python Rounding

__Descrição / Explicação / Lição: __

A função round (número, n dígitos) retorna um determinado número arredondado para a precisão de n dígitos após o ponto decimal.
Se n dígitos for omitido ou for Nenhum, ele retornará o inteiro mais próximo para sua entrada.
O valor de retorno é um inteiro se chamado com um argumento, caso contrário, é do mesmo tipo que o número fornecido.

>>> round(5)
5
>>> round(5.5)
6
>>> round(5.555, 1)
5.6

__Code Prompt / Desafio: __

A variável mais long_pi tem muitos dígitos após a casa decimal.
Crie uma variável chamada curta_pi que podemos usar em seu lugar.
Use a função round () para exibir apenas os 2 primeiros dígitos após o ponto decimal e atribua esse valor a short_pi.

__Pcódigo definido novamente: __

longer_pi = 3.14159265358979323846

__Solução:__

longer_pi = 3.14159265358979323846
shorter_pi = round(longer_pi, 2)

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(shorter_pi, float)
        self.assertEqual(shorter_pi, 3.14)

__Title: __ Python Square Root

__Descrição / Explicação / Lição: __

A função math.sqrt () é uma parte do módulo matemático do Python, que está sempre disponível, mas deve ser importado.
Math.sqrt (x) retorna a raiz quadrada de x como um número de ponto flutuante.

>>> import math
>>> math.sqrt(4)
2.0
>>> math.sqrt(2)
1.4142135623730951

__Code Prompt / Desafio: __

A variável square_root é definida como o número 81.
Altere raiz_quadrada para que seja igual à raiz quadrada de 81.
O módulo matemático foi importado para você.

__Pcódigo definido novamente: __

import math
square_root = 81

__Solução:___

import math
square_root = math.sqrt(81)

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(square_root, float)
        self.assertEqual(square_root, 9.0)

__Title: __ Python Subtraction

__Descrição / Explicação / Lição: __

Em Python, um inteiro (int) é um dos 3 tipos numéricos distintos.
Neste exercício, você subtrairá dois inteiros usando o operador menos (-).

>>> 2 - 1
1

__Code Prompt / Desafio: __

Altere o 0 para que o total seja igual a 10.

__Pcódigo definido novamente: __

total = 20 - 0

__Solução:__

total = 20 - 10

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 10)

__Title: __ Python Sum

__Descrição / Explicação / Lição: __

A função sum (iterável) adiciona todos os itens em um iterável Python (lista, tupla e assim por diante) da esquerda para a direita e retorna o total.
Há um segundo argumento opcional, start, que tem como padrão 0 e é adicionado ao total.
Os itens do iterável são normalmente números e o valor inicial não pode ser uma string.

>>> numbers = [1, 2, 3, 4, 5]
>>> sum(numbers)
15
>>> sum(numbers, 1)
16
>>> sum(numbers, 10)
25

__Code Prompt / Desafio: __

Existem duas listas de números.
Encontre a soma de todos os itens em ambas as listas e atribua esse valor a uma variável chamada total.

__Pcódigo definido novamente: __

list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8, 10]

__Solução:__

list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8, 10]
total = sum(list1, sum(list2))

__Testes: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 55)

Acho que cobre todas as lições listadas na seção de noções básicas / matemática.
Por favor, deixe-me saber se você deseja adicionar mais.
Além disso, sinta-se à vontade para fazer edições, alterações, sugestões e assim por diante.
Tenho todas as lições que acabei de postar em arquivos .py e .md em:
https://github.com/bgroveben/FCC_Python.
Eu também configurei uma REPL Classroom em:
https://repl.it/community/classrooms/18388.

Observe - estamos movendo a discussão de nossos desafios de codificação Python para este novo repositório: https://github.com/freeCodeCamp/python-coding-challenges/issues

Postando aqui para referência:
Acho que o Max e o Min podem querer os dois:

  1. Use números para maior clareza - os usuários podem não saber como um char é um inteiro
  2. Certifique-se de usar várias instâncias de um número - para realmente impulsionar o comportamento
Esta página foi útil?
0 / 5 - 0 avaliações