Freecodecamp: Plan de estudios futuro de Python [Discusión]

Creado en 25 abr. 2017  ·  56Comentarios  ·  Fuente: freeCodeCamp/freeCodeCamp

Plan de estudios de Python

Este número será el hilo conductor principal para la planificación y el desarrollo del futuro Currículo de FCC Python.

Para cualquier discusión sobre la integración de REPL.it Classroom, visite https://github.com/freeCodeCamp/freeCodeCamp/issues/14736 en su lugar

Actualmente estamos trabajando en ejecutar un conjunto de pruebas de Python verificable en un widget iframe Repl.it. Una vez que logremos que funcione, comenzaremos a implementar el plan de estudios definido en este hilo. Si está interesado en desarrollar esta parte del plan de estudios de FCC Python, envíeme un mensaje a mí mismo (Ethan Arrowood) en Gitter o comente a continuación.

Tenga en cuenta que debe escribir todos los desafíos de Python en la versión 3.6



La estructura actual del plan de estudios de FCC Python es: sección para principiantes, sección intermedia y sección de tema especial.

Sección para principiantes:

  • [] Introducción a Python
  • [] Salida

    • Impresión

    • Personajes de escape

    • entrada

  • [ ] Tipos de datos

    • Enteros, Flotadores

    • Instrumentos de cuerda

    • Tuplas

    • Liza

    • Conjuntos

    • Diccionarios

  • [] Operadores

    • +, -,, /,%, *

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

    • =

    • Verdadero, falso y, o no

    • en, no en

    • no lo es

  • [x] Matemáticas: @bgroveben

    • Sumar, restar, multiplicar, dividir

    • Potencia, sqrt (), abs (), round (), suma (), max (), min ()

  • [] Variables
  • [] Condicionales

    • si, elif, si no

  • [] Bucles

    • while, for (en rango), for (en lista), for (en cadena)

  • [] Funciones
  • [] Clases

Sección intermedia:

  • [] E / S de archivo
  • [] Iteradores y generadores
  • [x] Lambda - @robbiemu
  • [] Condicionales
  • [] OOP
  • [] Módulos, bibliotecas, paquetes
  • [] Gestión de archivos y errores
  • [] Objetos y tipos de datos avanzados
  • [] Formato de impresión
  • [] Lista comprensiva
  • [] Decoradores

Sección de tema especial:

  • [ ] Aprendizaje automático
  • [] Desarrollo de juegos
  • [] Webscraping (BeautifulSoup)
  • [] GIS (folleto / folio)
  • [] Frasco / Django (es mejor centrarse en uno y no en ambos)
  • [] Análisis de datos (Panda / Numpy)
  • [] Visualización de datos (brokeh)
  • [] GUI (tkinter)
  • [] Geocodificación (geopy)
  • [] Kit de herramientas de lenguaje natural (NLTK)

¿Tiene una idea para una lección de sección?

Comente a continuación y especifique a qué sección se debe agregar y por qué.

¿Quiere desarrollar el plan de estudios para una lección?

Comente a continuación los siguientes detalles:

  • Título
  • Descripción / Explicación / Lección
  • Solicitud de código / desafío
  • Código predefinido
  • Solución
  • Pruebas

¿Quiere realizar cambios en una lección existente?

Proporcione sus actualizaciones con explicaciones detalladas de por qué está realizando los cambios indicados.



Próximamente

-

Cómo proponer un desafío de Python

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

¿Proponiendo un desafío de Python?

learn

Comentario más útil

Hola chicos, soy el fundador / ceo de Repl.it. FCC está cerca y es querido en nuestros corazones, por lo que haremos todo lo posible para poder apoyar aquí. ¿Cuáles son los principales obstáculos para adoptar las aulas Repl.it para esto?

Todos 56 comentarios

Esto es lo que podemos agregar:
Principiante

  • Condicionales

Intermedio:

  • Iteradores y generadores
  • Lambda
  • Condicionales
  • OOP
  • Módulos, bibliotecas, paquetes
  • Manejo de archivos y errores
  • Objetos y tipos de datos avanzados
  • Formato de impresión

Avanzado:

  • Webscraping (BeautifulSoup)
  • GIS (folleto / folio)
  • Flask / Django (me inclinaría más hacia Django)
  • Análisis de datos (Panda / Numpy)
  • Visualización de datos (brokeh)
  • GUI (tkinter)
  • Geocodificación (geopy)

@mstellaluna Gracias por sus recomendaciones. ¿Cuál sería la diferencia entre la sección condicional para principiantes y la sección condicional intermedia?

@ Ethan-Arrowood para mí, los conceptos básicos deberían ser solo el conocimiento mínimo (si, si no, para, cuál). Mi entrada para el "condicional" en el intermedio serían condicionales basados ​​en la entrada del usuario o declaraciones ternarias ... lo mismo para el formato de impresión ... básico sería una declaración de impresión simple mientras que en el intermedio podemos introducir declaraciones de impresión con variables, el% s. .etc

Repl.it tiene una nueva área para la creación de aulas personalizadas. Puede crear asignaciones con instrucciones.

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

Lista de aulas comunitarias
https://repl.it/community

Sugiero agregar secciones de algoritmos básicos, intermedios y avanzados (similar a lo que tiene el plan de estudios FCC Front End para JavaScript).

He mirado el ejemplo de FCC-Python-Variable-Challenge dado, y noté que el desafío espera un poco de conocimiento de 'prerrequisitos'. Como si el campista hubiera conocido variables antes.

La Descripción / Explicación del desafío de la variable no explica qué son las variables. A diferencia del desafío Declare JavaScript Variables de JavaScript , que incluye una pequeña introducción sobre qué son las variables.

Sé que esto es solo un ejemplo, pero solo para estar seguro, ¿vamos a suponer que el campista ya pasó por el plan de estudios de JavaScript mientras creaba el plan de estudios de Python?

@jamesperrin Sí, lo

@ U-way Sí, ese fue mi error. El objetivo es que este sea un plan de estudios independiente, por lo que las explicaciones reales serán mucho más detalladas (como la versión JS). Gracias por destacar esto :)

@AnikaErceg, estas serán secciones de gran práctica. Definitivamente lo tendré en cuenta. ¡Gracias!

@ Ethan-Arrowood Es posible que desee incluir el kit de herramientas de lenguaje natural.

Agregué listas por comprensión a intermedias

¿Qué hay de los decoradores de nivel avanzado? ¿Asumo que los administradores de contexto aparecerán durante el manejo de archivos?

@ t3h2mas Puse a los decoradores en intermedio.

Si agregó for (in list) , ¿quizás también podría agregar for (in string) ?
Además, una introducción al operador in también sería buena (sé que encontré mi vida más fácil cuando descubrí que no tiene que usarse solo con for loops: smiley:).

@AnikaErceg buena sugerencia. Hecho. Agregué es y no es tan bien.

@ginoskotheon ¿Olvidaste agregar for (in string) debajo de los bucles o no ves que tiene sentido introducir eso? : smiley:

Soy un desarrollador cuyo primer idioma era Python ... Ya ayudé con mi capítulo local de la FCC y el organizador sugirió que me gustaría ayudar con el nuevo plan de estudios. No estoy 100% seguro de cómo empezar a contribuir, pero definitivamente me gustaría hacerlo. También soy bastante activo en la comunidad de Python, tanto a nivel local como en general, por lo que puedo obtener muchos ojos expertos cuando sea necesario.

Mis primeras sugerencias:

  • [] haga que todos los ejemplos sigan PEP 8
  • [] la lección booleana debe estar en 'tipos de datos' junto con los valores 'verdaderos' y 'falsos'
  • [] parte de la biblioteca estándar debe incluirse en algún lugar ( itertools , collections )
  • [] se podrían incluir algunas bibliotecas básicas ( requests , scrapy , etc.)
  • [] No estoy seguro de qué significa 'Secuencias de escape' en 'Salida', pero si se refiere a cadenas de estilo %s ... déjelo para 'cosas heredadas que pueda encontrar, pero no Realmente necesito preocuparme por la sección 'y solo enseñar el nuevo estilo f y .format() cadenas de estilo.
  • [] la sección de bucle menciona range , list y 'string' como si fueran todos diferentes, pero en Python son todos iterables, por lo que puede recorrerlos con el mismo palabras clave. Tal vez eso se pueda tocar en la sección 'iteradores y generadores'.

    • [] enumerate()

  • [] los administradores de contexto deben mencionarse en alguna parte.
  • [] podría haber una sección avanzada por asyncio
  • [] tradicionalmente PEP 20 se enseña en algún lugar al principio junto con algunos ejemplos de spam y eggs .
  • [] pruebas
  • [] virtualenvs
  • [] instalando
  • [] comentarios
    Estaría más que feliz de ayudar con este proyecto en todo lo que pueda. He estado pensando durante bastante tiempo que necesitábamos algo como esto.

@cldershem ¡Muchas buenas sugerencias, gracias! Con su experiencia, el mejor tipo de contribución que puede hacer es escribir las lecciones / desafíos en sí. Déjame saber cuáles te interesaría escribir 😄

@cldershem

No estoy 100% seguro de cómo empezar a contribuir, pero definitivamente me gustaría hacerlo.

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

Podría apuntarle en la dirección correcta.

¿Quizás @ Ethan-Arrowood también aceptaría envíos a través de comentarios de Github?

@ t3h2mas Sí, como dije en la parte superior, las presentaciones de lecciones / desafíos se pueden hacer aquí mismo en este hilo como comentarios 😄

@cldershem Otra forma en que puede ayudar es si conoce una buena manera de crear un desafío en el navegador que realmente se pueda probar (con unittest). Estamos explorando todo tipo de opciones desde REPL.it hasta codeMirror y Skulpt.

@cldershem Probablemente debería escribir "caracteres de escape". Esas son cosas como '\ n', '\ t', etc.

Y sé que son iterables, pero estoy empezando a dividir las cosas en términos de lecciones individuales del tamaño de un bocado.

Por cierto, gracias por todas las sugerencias y toda la ayuda. Estoy pensando en trabajar en una lección / desafío de muestra durante el fin de semana y espero que pueda ser una especie de plantilla para otros. Si desea abordar una lección / desafío que funciona de manera similar a cómo funcionan los desafíos de Free Code Camp, publique su código. Me encantaría ver eso.

@ Ethan-Arrowood @ginoskotheon @cldershem
También me gustaría ayudar a escribir las lecciones y los desafíos del curso FCC-Python.
Veo por comentarios anteriores que Repl.it Classrooms no es la mejor opción, pero puedo comenzar a trabajar en las lecciones (título, descripción, pruebas, etc. descritas anteriormente) allí. Una vez que se ha establecido una plataforma / marco, siempre puedo modificar el código y moverlo.
Escribí un par de ejercicios de muestra que puedes encontrar aquí ; debería poder verlos, pero debe iniciar sesión para importarlos, echar un vistazo debajo del capó y modificarlos.
No dude en comentar, criticar y cambiar las lecciones por sí mismos, y avíseme cuando se haya decidido una plataforma / marco más apropiado.
Mientras tanto, puedo trabajar en las lecciones para principiantes detalladas anteriormente, comenzando con matemáticas y pasando a cualquier otra cosa que deba hacerse.

Hola chicos, soy el fundador / ceo de Repl.it. FCC está cerca y es querido en nuestros corazones, por lo que haremos todo lo posible para poder apoyar aquí. ¿Cuáles son los principales obstáculos para adoptar las aulas Repl.it para esto?

@amasad ¡hola! Me alegro de tenerte aquí 😄
El principal obstáculo al que nos enfrentamos al adoptar Repl.it en el curso FCC Python es la interfaz con las pruebas unitarias de Repl.it Classroom. Nos encanta la estructura de Repl.it Classroom de poder ejecutar un archivo independiente con pruebas unitarias; sin embargo, no podemos averiguar cómo saber cuándo un usuario completa el desafío (pasa todas las pruebas unitarias). Por supuesto, este comportamiento está incrustado en Repl.it, pero para mantener la sensación del FreeCodeCamp actual, nos gustaría poder avanzar al usuario al siguiente desafío automáticamente (o pedirle que lo haga) una vez que complete el desafío actual (es decir, aprobar con éxito todas las pruebas unitarias).

¿Alguna idea sobre cómo podríamos implementar esto? FCC está escrito en JavaScript, por lo que cualquier tipo de API web o módulo npm funcionaría bastante bien.

Si cree que muchos de sus espectadores provienen del entorno de JavaScript, creo que sería útil una introducción a las diferencias. Por ejemplo

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

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

print(dict["a"])

Otro ejemplo sería recorrer un diccionario o matriz con bucles for. Esto me hace tropezar todo el tiempo.

_Title_ Introducción a Lambdas

_Descripción / Explicación / Lección_
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

"Una función anónima (función literal, abstracción lambda) es una definición de función que no está vinculada a un identificador". [5] La palabra "Lambda proviene del cálculo Lambda" [4]. En Python, una lambda es una palabra clave para definir una función anónima. Usando la palabra clave lambda lugar de la palabra clave def , una lambda básica se ve así: lambda x: x**2 Estos pueden asignarse a variables y reutilizarse de manera muy similar a funciones:

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

_src 2_

Los casos de uso más comunes son mantener el código corto y legible, en lugar de dividir la definición y el uso según este ejemplo:

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_

En esta interfaz GUI de Tkinter, se debe pasar una función al atributo _command_. Las funciones se nombran con números porque se generaron con un constructor RAD. Esto es correcto y funcional, pero no muy legible. Puede cambiarles el nombre y eso aclara las cosas, pero si tuviera muchos botones, podría resultar engorroso buscar en el código para encontrar el comando correcto, y como solo devuelven un valor básico, una mejor solución sería definir el funcionar allí mismo, de forma anónima:

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_

Otra característica clave de este uso es que también acorta el código, lo que significa que está más disponible para el programador cuando busca una herramienta como parte de una solución más grande.

_Código de solicitud / desafío_
Escriba una expresión lambda que tenga las características clave descritas anteriormente; hacer el código más legible moviendo todo el código en uso al mismo lugar; resultando en un código más corto y natural.

_Código predefinido_

# 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_

_Solución_
print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)))

@robbiemu ¡ gran trabajo! Mi única sugerencia sería agregar un comentario en la sección Código predefinido junto a la línea de impresión que diga algo como # only edit this line . También creo que este es el código de Python 2 y vamos a enseñar Python 3, así que creo que el único cambio es que la línea de impresión requiere ajustar '()'.
¡Gracias por tu contribución!

Ethan, gracias. Seguiré trabajando en esto. El problema y la solución podrían cambiarse, por lo que también hay pruebas razonables (sin usar un conjunto de datos estáticos, como lo he hecho aquí). Me gustaría ver una lección de ejemplo sobre el mejor enfoque para hacer esto.

@robbiemu por supuesto. Todavía estamos trabajando en REPL.it y actualizaremos este hilo tan pronto como sepamos más información. Buen trabajo por ahora 😄

Este es uno de los desafíos de código para la sección Principiante - Matemáticas enumerados al principio de este hilo.

_Title_ - Valor absoluto

_Descripción / Explicación / Lección_ -
El valor absoluto se refiere a qué tan lejos está un número de cero.
Si un número es negativo, abs () lo convertirá en positivo.
En abs (x), x puede ser un número entero, flotante o complejo.
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 de solicitud / desafío_ -
La variable valor_absoluto es igual a -42.
Cambie valor_absoluto para que sea igual al valor absoluto de -42.

_Código predefinido_ -

absolute_value = -42

_Solución_ -

absolute_value = abs(-42)

_Pruebas_ -

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

@bgroveben LGTM. ¡buen trabajo!

@ Ethan-Arrowood ¡Gracias! También he escrito lecciones para los otros desafíos básicos / matemáticos enumerados anteriormente. Puedo publicar cada uno de ellos en este hilo si lo desea. Además, creo que sería una buena idea incluir round (), sum (), max () y min () con las lecciones básicas de matemáticas; serán útiles.

@bgroveben Lo marcaré como completado y sí, por favor. Haga cada desafío en un comentario separado también, por favor; será más fácil consultar los cambios o lo que sea. ¡Gracias por sus aportaciones!

@ Ethan-Arrowood

@amasad ¡hola! Me alegro de tenerte aquí 😄

Me alegro de estar aquí 💃

El principal obstáculo al que nos enfrentamos al adoptar Repl.it en el curso FCC Python es la interfaz con las pruebas unitarias de Repl.it Classroom. Nos encanta la estructura de Repl.it Classroom de poder ejecutar un archivo independiente con pruebas unitarias; sin embargo, no podemos averiguar cómo saber cuándo un usuario completa el desafío (pasa todas las pruebas unitarias). Por supuesto, este comportamiento está incrustado en Repl.it, pero para mantener la sensación del FreeCodeCamp actual, nos gustaría poder avanzar al usuario al siguiente desafío automáticamente (o pedirle que lo haga) una vez que complete el desafío actual (es decir, aprobar con éxito todas las pruebas unitarias).

¿Alguna idea sobre cómo podríamos implementar esto? FCC está escrito en JavaScript, por lo que cualquier tipo de API web o módulo npm funcionaría bastante bien.

Lo más fácil es que lo horneamos. Tenga una configuración en el lado del maestro que diga "avance automático" o algo así. (No estamos en contra de agregar webhooks, etc., sino por el bien de reducir la complejidad) ¿Funcionaría?

@amasad usando una función de "avance automático" seguramente podríamos emular FreeCodeCamp en un aula de Repl.it, pero aún no podríamos rastrear el progreso del usuario en el extremo de FCC, lo cual es bastante crucial para la sensación de FCC.

¿Qué pasa con una función que nos permite OBTENER / POST datos de un 'Aula'? De esta forma podríamos hacer algo como:

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

o mejor aún:

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

Ahora, ambos métodos se ejecutarían en nuestro extremo, pero debido a que REPL Classroom está incrustado a través de un iframe, al menos necesitaríamos algunos activadores de eventos simples del lado de REPL para realizar un seguimiento adecuado del progreso del usuario individual.

Además, debido a que Classroom estaría incrustado a través de un iframe, ¿podríamos potencialmente obtener una función que cuando un usuario completa una lección, REPL Classroom ejecuta algunas líneas de JavaScript (que podemos definir a través del portal de profesores) para que podamos hacer que el aula funcione? comunicarse con FCC?

Esperamos poder usar las aulas REPL no solo para Python, sino también para otros lenguajes. Una vez que el plan de estudios de FCC Python esté funcionando correctamente, pasaremos a implementar lenguajes como Java o C ++ (¡o literalmente cualquier lenguaje que REPL pueda ofrecernos para usar!).

Me encantaría obtener la opinión de @QuincyLarson sobre esto, así como sobre otros colaboradores principales de la FCC (intentaré comunicarme con ellos en Gitter / Forums).

Hola a todos, muchas gracias por los comentarios y sugerencias.

@amasad Gracias por tomarse el tiempo para compartir sus pensamientos e ideas aquí. Es genial saber que REPL.it está trabajando en el producto para el aula, que nos encantaría integrar en la plataforma.

Para empezar, sería genial si pudiéramos abordar esto en una discusión separada en lugar de este hilo del plan de estudios, para mantenerlo más relevante para la integración en sí.

@ Ethan-Arrowood Impresionante trabajo con la iniciativa. Gracias por su arduo trabajo.

@amasad @QuincyLarson He trasladado oficialmente la discusión en el aula de REPL a este tema (según la recomendación de @raisedadead ). https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

siguiendo el comentario de cldershem (comentado hace 8 días), aquí hay uno para collections -

Título

con nombre tuplas

Descripción / Explicación / Lección

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/

Una tupla es un concepto común en matemáticas. Se considera una lista ordenada finita de elementos. [1] En Python, estos son funcionalmente similares a los diccionarios, donde las claves se definen de antemano. Se pueden usar Namedtuples para proporcionar un árbol de propiedades rápido para cualquier uso: por ejemplo, si su aplicación debe lidiar con calcetines y todos los calcetines tienen un tamaño y un precio, entonces una tupla con dos campos es útil, aproximándose al diccionario {size: _size_, price: _price_} . Para obtener una tupla con estos campos, pase los campos a la función de fábrica collections.namedtuple : [2]
collections.namedtuple(Socks, ['size', 'price'])
Por conveniencia, especialmente al procesar información de fuentes de texto sin formato, los nombres de campo pueden ser una matriz o una sola cadena con valores separados por comas y / o espacios: [3]
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
Se puede usar cualquier identificador Python válido para un _fieldname_ excepto para los nombres que comienzan con un guión bajo. Los identificadores válidos consisten en letras, dígitos y guiones bajos, pero no comienzan con un dígito o guión bajo y no pueden ser una palabra clave como clase, para, retorno, global, pase o aumento. [3]
Una vez generados, se pueden usar para crear instancias con entradas de diccionario:

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)

_desde_ [3]

Solicitud de código / desafío

Un buen uso de namedtuples es facilitar la ingesta de datos, como desde una exportación csv desde una base de datos. En el siguiente código, corrija esta importación CSV con una tupla.

Código predefinido

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]

_nota_: lo anterior usa un archivo real, pero podríamos reemplazar las líneas with ... readCSV con algo como:
readCSV = csv.reader(['Alan,42,Manager,Sales, N1', 'Beth,38,Regional Director,Operations,CO','Robin,23,Associate,Sales,C2']

Solución

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!

Lección 2:

Título

namedtuples._make

Descripción / Explicación / Lección

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

Un método de NamedTuples llamado __make_ facilita la generación de instancias dentro de una función de iterador. Esto haría que el problema de la lección anterior sea aún más conciso.
Esto se usa como:

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

Solicitud de código / desafío

Estamos revisando la lección anterior y revisando el código. Ya casi está ahí, pero el trabajo no está terminado. Para su conveniencia, se imprimen algunos registros donde debe procesarlos. Recuerde, necesitamos crear un EmployeeRecord y pasarlo a una función en otra parte del código, como:

        employee = EmployeeRecord(*row)

        processEmployee(employee)

Código predefinido

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)

Solución

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)

Probablemente también podríamos usar lecciones rápidas que ilustren:

  • n = NamedTuple(**Dictionary)
  • uso de ._fields para hacer formas alternativas: TwoD = namedtuple('TwoD', 'x y') => ThreeD = namedtuple('ThreeD', TWo._fields + ('z',))
  • cobertura de casos de uso básicos: ingestión de datos (como el csv), transacciones de bases de datos, transacciones de red, facilitar POJO (o ... ¿son los POPO algo en Python? lol)

Aquí están el resto de los desafíos matemáticos para principiantes:

__Título: __ Adición de Python

__Descripción / Explicación / Lección: __

En Python, un entero (int) es uno de los 3 tipos numéricos distintos.
En este ejercicio, sumará dos enteros usando el operador más (+).

>>> 2 + 2
4

__ Código de solicitud / desafío: __

Cambie el 0 para que el total sea igual a 20.

__Código predefinido: __

total = 10 + 0

__Solución:__

total = 10 + 10

__Pruebas: __

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

__Título:__
Calcule el cociente y el resto con la función divmod ().

__Descripción / Explicación / Lección: __

Divmod toma dos números (no complejos) como argumentos y devuelve un par de números que consta de su cociente y resto cuando se utiliza la división de enteros.
Para enteros, el resultado es el mismo que (a // b, a% b).

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

__ Código de solicitud / desafío: __

En este ejercicio, las variables ayb se definen automáticamente.
Defina una variable llamada resultado que llame a la función divmod en las variables ayb (en ese orden).

__Código predefinido: __

a = 11
b = 3

__Solución:__

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

__Pruebas: __

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

__Título: __ Exponentes de Python

__Descripción / Explicación / Lección: __

Python usa el operador de doble asterisco (**) para manejar la exponenciación.
El número antes de los asteriscos es la base y el número después es el exponente.
Python también le permite usar la función incorporada pow (x, y), que le da x elevado a y.

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

__ Código de solicitud / desafío: __

En la consola, se le dan dos variables, ay b.
Usando cualquiera de los métodos descritos en esta lección, defina una variable llamada potencia que sea igual a a elevado a b.

__Código predefinido: __

a = 3
b = 4

__Solución:__

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

__Pruebas: __

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

__Título: __ División flotante de Python

__Descripción / Explicación / Lección: __

Python 3 distingue entre división entera (piso) y división flotante (verdadera).
Python usa un solo operador de barra diagonal (/) para la división flotante.
Cuando se usa la división flotante, incluso si el cociente (resultado) es un número entero como 1 o 2, se devolverá un número de coma flotante en lugar de un int.

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

__ Código de solicitud / desafío: __

Cuando ejecuta el código existente, la variable denominada cociente tendrá un valor de 1.0.
Cambia el segundo número (el denominador) para que el cociente tenga un valor de 2.5.

__Código predefinido: __

quotient = 5 / 5

__Solución:__

quotient = 5 / 2

__Pruebas: __

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

__Título: __ División de enteros de Python

__Descripción / Explicación / Lección: __

Python 3 distingue entre división entera (piso) y división flotante (verdadera).
Python usa un operador de doble barra inclinada (//) para la división de enteros.
Al usar la división de enteros, Python redondeará el cociente al número entero más cercano.

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

__ Código de solicitud / desafío: __

Cuando ejecuta el código existente, la variable denominada cociente tendrá un valor de 1.
Cambia el segundo número (el denominador) para que el cociente tenga un valor de 2.

__Código predefinido: __

quotient = 5 // 5

__Solución:__

quotient = 5 // 2

__Pruebas: __

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

__Título: __ Valor máximo de Python

__Descripción / Explicación / Lección: __

La función max () devuelve el elemento más grande en un iterable (como una lista o cadena), o el más grande de dos o más argumentos.
Mientras damos un iterable como argumento, debemos asegurarnos de que todos los elementos del iterable sean del mismo tipo.
Si el iterable está vacío y no se proporciona el valor predeterminado, se genera un ValueError.

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

__ Código de solicitud / desafío: __

El código de inicio tiene una lista de números llamados, bueno, números.
La variable más alta se inicializa en números.
Haga que el valor del más alto sea igual al número más grande en números.

__Código predefinido: __

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

__Solución:__

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

__Pruebas: __

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

__Título: __ Valor mínimo de Python

__Descripción / Explicación / Lección: __

La función min () devuelve el elemento más pequeño en un iterable (como una lista o cadena), o el más pequeño de dos o más argumentos.
Mientras damos un iterable como argumento, debemos asegurarnos de que todos los elementos del iterable sean del mismo tipo.
Si el iterable está vacío y no se proporciona el valor predeterminado, se genera un ValueError.

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

__ Código de solicitud / desafío: __

El código de inicio tiene una lista de letras llamadas, bueno, letras.
La variable más baja se inicializa en letras.
Haga que el valor de menor sea igual a la letra 'más pequeña' (alfabéticamente la primera) en letras.

__Código predefinido: __

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

__Solución:__

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

__Pruebas: __

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

__Título: __ Multiplicación de Python

__Descripción / Explicación / Lección: __

Python usa el operador asterisco (*) para la multiplicación.

>>> 3 * 3
9

__ Código de solicitud / desafío: __

Cambie el 0 para que el producto sea igual a 80.

__Código predefinido: __

product = 8 * 0

__Solución:__

product = 8 * 10

__Pruebas: __

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

__Título: __ Resto de Python

__Descripción / Explicación / Lección: __

El operador% (módulo) produce el resto de la división del primer argumento por el segundo.
El operador de módulo siempre produce un resultado con el mismo signo que su segundo operando (o cero).

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

Una forma sencilla de determinar si un número es par o impar es comprobar el resto cuando ese número se divide por 2.
Para números impares, el resto es 1.
Para números pares, el resto es 0.

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

__ Código de solicitud / desafío: __

Establezca el resto de la variable igual al resto de 11 dividido por 3 utilizando el operador de módulo (%).

__Código predefinido: __

remainder = "Solution goes here"

__Solución:__

remainder = 11 % 3

__Pruebas: __

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

__Título: __ Redondeo de Python

__Descripción / Explicación / Lección: __

La función round (número, n dígitos) devuelve un número dado redondeado a precisión de n dígitos después del punto decimal.
Si se omiten n dígitos o es Ninguno, devuelve el número entero más cercano a su entrada.
El valor de retorno es un número entero si se llama con un argumento; de lo contrario, es del mismo tipo que el número dado.

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

__ Código de solicitud / desafío: __

La variable long_pi tiene demasiados dígitos después del lugar decimal.
Cree una variable llamada short_pi que podamos usar en su lugar.
Use la función round () para mostrar solo los primeros 2 dígitos después del punto decimal y asigne ese valor a short_pi.

__Código predefinido: __

longer_pi = 3.14159265358979323846

__Solución:__

longer_pi = 3.14159265358979323846
shorter_pi = round(longer_pi, 2)

__Pruebas: __

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

__Título: __ Raíz cuadrada de Python

__Descripción / Explicación / Lección: __

La función math.sqrt () es parte del módulo matemático de Python, que siempre está disponible pero debe importarse.
Math.sqrt (x) devuelve la raíz cuadrada de x como un número de punto flotante.

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

__ Código de solicitud / desafío: __

La variable raíz_cuadrada se define como el número 81.
Cambie square_root para que sea igual a la raíz cuadrada de 81.
El módulo de matemáticas se ha importado automáticamente.

__Código predefinido: __

import math
square_root = 81

__Solución:___

import math
square_root = math.sqrt(81)

__Pruebas: __

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

__Título: __ Resta de Python

__Descripción / Explicación / Lección: __

En Python, un entero (int) es uno de los 3 tipos numéricos distintos.
En este ejercicio, restará dos números enteros utilizando el operador menos (-).

>>> 2 - 1
1

__ Código de solicitud / desafío: __

Cambie el 0 para que el total sea igual a 10.

__Código predefinido: __

total = 20 - 0

__Solución:__

total = 20 - 10

__Pruebas: __

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

__Título: __ Suma de Python

__Descripción / Explicación / Lección: __

La función sum (iterable) agrega todos los elementos en un iterable de Python (lista, tupla, etc.) de izquierda a derecha y devuelve el total.
Hay un segundo argumento opcional, inicio, que por defecto es 0 y se agrega al total.
Los elementos de los iterables son normalmente números y no se permite que el valor inicial sea una cadena.

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

__ Código de solicitud / desafío: __

Hay dos listas de números.
Encuentre la suma de todos los elementos en ambas listas y asigne ese valor a una variable llamada total.

__Código predefinido: __

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

__Solución:__

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

__Pruebas: __

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

Creo que cubre todas las lecciones enumeradas en la sección de conceptos básicos / matemáticas.
Por favor, avíseme si desea agregar más.
Además, no dude en realizar ediciones, cambios, sugerencias, etc.
Tengo todas las lecciones que acabo de publicar en archivos .py y .md en:
https://github.com/bgroveben/FCC_Python.
También configuré un aula REPL en:
https://repl.it/community/classrooms/18388.

Tenga en cuenta que estamos trasladando la discusión de nuestros desafíos de codificación de Python a este nuevo repositorio: https://github.com/freeCodeCamp/python-coding-challenges/issues

Publicando aquí como referencia:
Creo que Max y Min pueden querer ambos:

  1. Use números para mayor claridad: es posible que los usuarios no sepan cómo un carácter es un número entero
  2. Asegúrese de utilizar varias instancias de un número para impulsar realmente el comportamiento
¿Fue útil esta página
0 / 5 - 0 calificaciones