Freecodecamp: Zukünftiges Python-Curriculum [Diskussion]

Erstellt am 25. Apr. 2017  ·  56Kommentare  ·  Quelle: freeCodeCamp/freeCodeCamp

Python-Lehrplan

Diese Ausgabe wird der Hauptthema für die Planung und Entwicklung des zukünftigen FCC-Python-Lehrplans sein.

Für Diskussionen über die Integration von REPL.it Classroom besuchen Sie stattdessen https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

Wir arbeiten derzeit daran, eine überprüfbare Python-Testsuite auf einem iframe Repl.it-Widget auszuführen. Sobald wir das zum Laufen gebracht haben, werden wir mit der Implementierung des in diesem Thread definierten Lehrplans beginnen. Wenn Sie daran interessiert sind, diesen Teil des FCC-Python-Lehrplans zu entwickeln, senden Sie mir bitte eine Nachricht (Ethan Arrowood) auf Gitter oder kommentieren Sie unten.

Bitte beachten Sie, dass Sie alle Python-Herausforderungen in Version 3.6 schreiben müssen



Die aktuelle Struktur für das FCC-Python-Curriculum lautet: Anfänger-, Mittel- und Spezialthemenbereich.

Anfängerbereich:

  • [] Einführung in Python
  • [ ] Ausgabe

    • Drucken

    • Escape-Charaktere

    • Eingang

  • [ ] Datentypen

    • Ganzzahlen, Floats

    • Saiten

    • Tupel

    • Listen

    • Sets

    • Wörterbücher

  • [] Operatoren

    • +, - ,, /,%, *

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

    • =

    • Richtig, falsch und oder nicht

    • in, nicht in

    • ist, ist nicht

  • [x] Math - @bgroveben

    • Addieren, subtrahieren, multiplizieren, dividieren

    • Potenz, sqrt (), abs (), round (), sum (), max (), min ()

  • [] Variablen
  • [] Bedingungen

    • wenn, elif, sonst

  • [] Schleifen

    • während für (in Bereich), für (in Liste), für (in Zeichenfolge)

  • [] Funktionen
  • [ ] Klassen

Zwischenabschnitt:

  • [] Datei-E / A.
  • [] Iteratoren und Generatoren
  • [x] Lambda - @robbiemu
  • [] Bedingungen
  • [] OOP
  • [] Module, Bibliotheken, Pakete
  • [] Datei- und Fehlerbehandlung
  • [] Erweiterte Objekte und Datentypen
  • [] Druckformatierung
  • [] Listenverständnisse
  • [] Dekorateure

Spezieller Themenbereich:

  • [ ] Maschinelles Lernen
  • [] Spieleentwicklung
  • [] Webscraping (BeautifulSoup)
  • [] GIS (Faltblatt / Folium)
  • [] Flask / Django (besser auf einen konzentrieren, nicht auf beide)
  • [] Datenanalyse (Panda / Numpy)
  • [] Datenvisualisierung (brach)
  • [] GUI (tkinter)
  • [] Geokodierung (Geopie)
  • [] Natural Language Toolkit (NLTK)

Haben Sie eine Idee für eine Abschnittsstunde?

Kommentieren Sie unten und geben Sie an, zu welchem ​​Abschnitt es hinzugefügt werden soll und warum.

Möchten Sie den Lehrplan für eine Lektion entwickeln?

Kommentar unter den folgenden Details:

  • Titel
  • Beschreibung / Erklärung / Lektion
  • Code-Eingabeaufforderung / Herausforderung
  • Vordefinierter Code
  • Lösung
  • Tests

Möchten Sie Änderungen an einer vorhandenen Lektion vornehmen?

Geben Sie Ihren Updates ausführliche Erklärungen, warum Sie die angegebenen Änderungen vornehmen.



Demnächst

- -

So schlagen Sie eine Python-Herausforderung vor

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

Eine Python-Herausforderung vorschlagen?

learn

Hilfreichster Kommentar

Hey Leute, ich bin Gründer / CEO von Repl.it. Die FCC liegt uns sehr am Herzen, daher werden wir alles tun, um sie hier zu unterstützen. Was sind die größten Hürden bei der Einführung von Repl.it-Klassenzimmern?

Alle 56 Kommentare

Folgendes können wir hinzufügen:
Anfänger

  • Bedingungen

Mittlere:

  • Iteratoren & Generatoren
  • Lambda
  • Bedingungen
  • OOP
  • Module, Bibliotheken, Pakete
  • Datei- und Fehlerbehandlung
  • Erweiterte Objekte und Datentypen
  • Formatierung drucken

Fortgeschrittene:

  • Webscraping (BeautifulSoup)
  • GIS (Faltblatt / Folium)
  • Flask / Django (ich würde mich mehr zu Django neigen)
  • Datenanalyse (Panda / Numpy)
  • Datenvisualisierung (brach)
  • GUI (tkinter)
  • Geokodierung (Geopie)

@mstellaluna Vielen Dank für Ihre Empfehlungen. Was wäre der Unterschied zwischen dem bedingten Abschnitt für Anfänger und dem bedingten Abschnitt für Fortgeschrittene?

@ Ethan-Arrowood für mich sollten die Grundlagen nur imo das minimale Wissen sein (wenn, sonst, für welches). Mein Eintrag für die "Bedingung" in der Zwischenstufe wäre eine Bedingung, die auf Benutzereingaben oder ternären Anweisungen basiert. Dasselbe gilt für die Druckformatierung. Grundlegend wäre eine einfache Druckanweisung, während eine Zwischenbedingung Druckanweisungen mit Variablen,% s, einführen kann. . usw

Repl.it verfügt über einen neuen Bereich zum Erstellen benutzerdefinierter Klassenzimmer. Sie können Zuordnungen mit Anweisungen erstellen.

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

Liste der Gemeinschaftsklassenräume
https://repl.it/community

Ich schlage vor, grundlegende, mittlere und erweiterte Algorithmusabschnitte hinzuzufügen (ähnlich dem FCC-Front-End-Lehrplan für JavaScript).

Ich habe mir das Beispiel der FCC-Python-Variablen-Herausforderung angesehen und festgestellt, dass die Herausforderung ein wenig Wissen über die Voraussetzungen voraussetzt. Als ob der Camper zuvor in Variablen eingeführt worden wäre.

Die Beschreibung / Erklärung für die Variablenherausforderung erklärt nicht, was Variablen sind. Im Gegensatz zur JavaScript- Herausforderung "JavaScript-Variablen deklarieren" , die eine Einführung in die Variablen enthält.

Ich weiß, dass dies nur ein Beispiel ist - aber nur um sicher zu gehen - gehen wir davon aus, dass der Camper beim Erstellen des Python-Lehrplans bereits den JavaScript-Lehrplan durchlaufen hat?

@jamesperrin Ja, wir haben uns das angeschaut, aber wir versuchen, den Benutzer auf der FCC-Website zu halten, sodass die Herausforderungen eingebettet werden müssen. Darüber hinaus haben wir keine Möglichkeit, auf die Ergebnisse der Unit-Tests der Repl-Klassenzimmer zuzugreifen.

@ U-Wege Ja das war mein Fehler. Das Ziel ist, dass dies ein unabhängiger Lehrplan ist, damit die tatsächlichen Erklärungen viel detaillierter sind (wie in der JS-Version). Vielen Dank, dass Sie dies hervorgehoben haben :)

@AnikaErceg Dies werden großartige

@ Ethan-Arrowood Möglicherweise möchten Sie das Natural Language Toolkit hinzufügen.

Ich habe Listenverständnisse zu Intermediate hinzugefügt

Wie wäre es mit Dekorateuren unter fortgeschrittenen? Ich gehe davon aus, dass während der Dateiverwaltung Kontextmanager angezeigt werden.

@ t3h2mas Ich habe Dekorateure unter Zwischen gestellt.

Wenn Sie for (in list) hinzugefügt haben, könnten Sie vielleicht auch for (in string) hinzufügen?
Außerdem wäre eine Einführung in den Operator in auch gut (ich weiß, dass ich mein Leben leichter fand, als ich entdeckte, dass es nicht nur mit for -Schleifen verwendet werden muss: smiley :).

@ AnikaErceg guter Vorschlag. Getan. Ich fügte hinzu, ist und ist nicht so gut.

@ginoskotheon Sie haben vergessen, for (in string) unter Schleifen hinzuzufügen, oder sehen Sie keinen Grund, dies einzuführen? : smiley:

Ich bin ein Entwickler, dessen Muttersprache Python war ... Ich helfe bereits bei meinem lokalen FCC-Kapitel und der Veranstalter schlug vor, dass ich beim neuen Lehrplan helfen möchte. Ich bin mir nicht 100% sicher, wie ich anfangen soll, aber ich würde es definitiv gerne tun. Ich bin auch ziemlich aktiv in der Python-Community, sowohl lokal als auch allgemein, so dass ich bei Bedarf viele sachkundige Augen bekommen kann.

Meine ersten Vorschläge:

  • [] Alle Beispiele folgen PEP 8
  • [] Boolesche Lektion sollte in 'Datentypen' zusammen mit 'wahrheitsgemäßen' und 'falschen' Werten sein
  • [] Einige der Standardbibliotheken sollten irgendwo enthalten sein ( itertools , collections )
  • [] Einige grundlegende Bibliotheken könnten enthalten sein ( requests , scrapy usw.)
  • [] Ich bin mir nicht sicher, was 'Escape-Sequenzen' in 'Ausgabe' bedeutet, aber wenn es sich um %s -Stil-Strings handelt ... lassen Sie das für ein 'Legacy-Zeug, auf das Sie möglicherweise stoßen, aber nicht Ich muss mich wirklich um den Abschnitt kümmern und nur neue Stilstrings im Stil von f und .format() .
  • [] Der Loop-Abschnitt erwähnt range , list und 'string', als wären sie alle unterschiedlich, aber in Python sind sie alle iterabel, weshalb Sie sie mit derselben Schleife durchlaufen können Schlüsselwörter. Vielleicht kann das im Abschnitt 'Iteratoren & Generatoren' angesprochen werden.

    • [] enumerate()

  • [] Kontextmanager sollten irgendwo erwähnt werden.
  • [] Es könnte einen erweiterten Abschnitt für asyncio
  • [] Traditionell wird PEP 20 irgendwo am Anfang zusammen mit einigen Beispielen von spam und eggs .
  • [] Tests
  • [] virtualenvs
  • [] installieren
  • [ ] Bemerkungen
    Ich würde mehr als glücklich sein, bei diesem Projekt auf jede erdenkliche Weise zu helfen. Ich habe eine ganze Weile darüber nachgedacht, dass wir so etwas brauchen.

@cldershem So viele tolle Vorschläge, danke! Mit Ihrer Erfahrung können Sie die Lektionen / Herausforderungen selbst am besten selbst schreiben. Lassen Sie mich wissen, welche Sie schreiben möchten 😄

@cldershem

Ich bin mir nicht 100% sicher, wie ich anfangen soll, aber ich würde es definitiv gerne tun.

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

Könnte Sie in die richtige Richtung weisen.

Vielleicht würde @ Ethan-Arrowood auch Beiträge durch Github-Kommentare entgegennehmen?

@ t3h2mas Ja, wie ich oben schon sagte, können Einreichungen von Lektionen / Herausforderungen direkt hier in diesem Thread als Kommentare vorgenommen werden 😄

@cldershem Eine andere Möglichkeit, wie Sie helfen können, besteht darin, eine gute Möglichkeit zu kennen, eine Herausforderung im Browser zu erstellen, die tatsächlich getestet werden kann (mit unittest). Wir untersuchen alle Arten von Optionen von REPL.it bis codeMirror bis Skulpt.

@cldershem Ich sollte wahrscheinlich "Escape-Zeichen" schreiben. Das sind Dinge wie '\ n', '\ t' usw.

Und ich weiß, dass sie iterabel sind, aber ich fange an, die Dinge in Bezug auf einzelne mundgerechte Lektionen aufzuteilen.

Übrigens, danke für all die Vorschläge und die Hilfe. Ich plane, über das Wochenende an einer Beispielstunde / -herausforderung zu arbeiten, und hoffe, dass dies eine Art Vorlage für andere sein kann. Wenn Sie eine Lektion / Herausforderung angehen möchten, die ähnlich wie die Herausforderungen von Free Code Camp funktioniert, veröffentlichen Sie bitte Ihren Code. Das würde ich gerne sehen.

@ Ethan-Arrowood @ginoskotheon @cldershem
Ich möchte auch helfen, die Lektionen und Herausforderungen für den FCC-Python-Kurs zu schreiben.
Aus früheren Kommentaren geht hervor, dass Repl.it-Klassenzimmer nicht die beste Wahl sind, aber ich kann dort mit der Arbeit an den oben beschriebenen Lektionen (Titel, Beschreibung, Tests usw.) beginnen. Sobald eine Plattform / ein Framework festgelegt wurde, kann ich den Code jederzeit ändern und verschieben.
Ich habe ein paar Beispielübungen geschrieben, die Sie hier finden können. Sie sollten sie sehen können, aber Sie müssen angemeldet sein, um sie zu importieren, einen Blick unter die Haube zu werfen und sie zu ändern.
Bitte zögern Sie nicht, die Lektionen selbst zu kommentieren, zu kritisieren und zu ändern, und lassen Sie mich wissen, wenn eine geeignetere Plattform / ein geeigneteres Framework festgelegt wurde.
In der Zwischenzeit kann ich an den oben beschriebenen Anfängerlektionen arbeiten, angefangen bei Mathematik bis hin zu allem, was noch getan werden muss.

Hey Leute, ich bin Gründer / CEO von Repl.it. Die FCC liegt uns sehr am Herzen, daher werden wir alles tun, um sie hier zu unterstützen. Was sind die größten Hürden bei der Einführung von Repl.it-Klassenzimmern?

@amasad hallo! Schön dich hier zu haben 😄
Die größte Hürde, vor der wir stehen, wenn wir Repl.it in den FCC Python-Kurs aufnehmen, ist die Schnittstelle zu den Repl.it Classroom-Unittests. Wir lieben die Repl.it-Klassenzimmerstruktur, eine unabhängige Datei mit Komponententests ausführen zu können. Wir können jedoch nicht herausfinden, wie ein Benutzer die Herausforderung abschließt (alle Unittests besteht). Natürlich ist dieses Verhalten in Repl.it eingebettet, aber um das Gefühl des aktuellen FreeCodeCamp beizubehalten, möchten wir den Benutzer nach Abschluss des Vorgangs automatisch zur nächsten Herausforderung weiterleiten können (oder ihn dazu auffordern) aktuelle Herausforderung (dh alle Unittests erfolgreich bestehen).

Irgendwelche Ideen, wie wir dies umsetzen könnten? FCC ist in JavaScript geschrieben, so dass jede Art von Web-API oder npm-Modul ziemlich gut funktionieren würde.

Wenn Sie glauben, dass viele Ihrer Betrachter aus dem JavaScript-Hintergrund stammen, wäre eine Einführung in die Unterschiede meiner Meinung nach hilfreich. Zum Beispiel

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

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

print(dict["a"])

Ein anderes Beispiel wäre das Durchlaufen eines Wörterbuchs oder Arrays mit for-Schleifen. Das stolpert mich die ganze Zeit.

_Titel_ Einführung in Lambdas

_Beschreibung / Erklärung / Lektion_
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

"Eine anonyme Funktion (Funktionsliteral, Lambda-Abstraktion) ist eine Funktionsdefinition, die nicht an einen Bezeichner gebunden ist." [5] Das Wort "Lambda kommt aus dem Lambda-Kalkül" [4]. In Python ist ein Lambda ein Schlüsselwort zum Definieren einer anonymen Funktion. Wenn Sie das Schlüsselwort lambda anstelle des Schlüsselworts def , sieht ein einfaches Lambda folgendermaßen aus: lambda x: x**2 Diese können Variablen zugewiesen und ähnlich wie Funktionen wiederverwendet werden:

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

_src 2_

Die häufigsten Anwendungsfälle bestehen darin, den Code kurz und lesbar zu halten, anstatt die Definition und Verwendung gemäß diesem Beispiel aufzuteilen:

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_

In dieser Tkinter-GUI-Schnittstelle muss eine Funktion an das Attribut _command_ übergeben werden. Die Funktionen werden mit Zahlen benannt, da sie mit einem RAD-Builder generiert wurden. Dies ist gut und funktional, aber nicht sehr gut lesbar. Sie können sie umbenennen, und das macht die Dinge klarer. Wenn Sie jedoch viele Schaltflächen hätten, könnte es mühsam werden, den Code zu durchsuchen, um den richtigen Befehl zu finden. Da sie nur einen Grundwert zurückgeben, wäre es eine bessere Lösung, den zu definieren Funktionieren Sie genau dort anonym:

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_

Ein weiteres wichtiges Merkmal dieser Verwendung ist, dass der Code dadurch auch kürzer wird, was bedeutet, dass er für den Programmierer leichter verfügbar ist, wenn er ein Werkzeug als Teil einer größeren Lösung sucht.

_Code Prompt / Challenge_
Schreiben Sie einen Lambda-Ausdruck mit den oben beschriebenen Hauptmerkmalen. Verbesserung der Lesbarkeit des Codes durch Verschieben des gesamten verwendeten Codes an denselben Ort; was zu einem kürzeren, natürlicheren Code führt.

Vordefinierter Code

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

_Lösung_
print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)))

@robbiemu tolle Arbeit! Mein einziger Vorschlag wäre, im Abschnitt Vordefinierter Code neben der Druckzeile einen Kommentar hinzuzufügen, der so etwas wie # only edit this line sagt. Ich glaube auch, dass dies Python 2-Code ist und wir Python 3 unterrichten werden. Ich denke, die einzige Änderung ist, dass die Druckzeile das Umschließen von '()' erfordert.
Danke für Ihren Beitrag!

Ethan, danke. Ich werde weiter daran arbeiten. Das Problem und die Lösung könnten geändert werden, so dass es auch vernünftige Tests gibt (ohne Verwendung eines statischen Datensatzes, wie ich es hier habe). Ich würde gerne eine Beispielstunde sehen, um den besten Ansatz dafür zu finden.

@robbiemu natürlich. Wir arbeiten noch an REPL.it und werden diesen Thread aktualisieren, sobald wir weitere Informationen kennen. Gute Arbeit fürs Erste 😄

Dies ist eine der Code-Herausforderungen für den Abschnitt Anfänger - Mathematik, der am Anfang dieses Threads aufgeführt ist.

_Title_ - Absolutwert

_Beschreibung / Erklärung / Lektion_ -
Der Absolutwert bezieht sich darauf, wie weit eine Zahl von Null entfernt ist.
Wenn eine Zahl negativ ist, konvertiert abs () sie in positiv.
In abs (x) kann x eine ganze Zahl, ein Gleitkommawert oder eine komplexe Zahl sein.
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

_Code Prompt / Challenge_ -
Die Variable absolute_value ist gleich -42.
Ändern Sie absolute_value so, dass es dem absoluten Wert von -42 entspricht.

Vordefinierter Code

absolute_value = -42

_Lösung_ -

absolute_value = abs(-42)

_Tests_ -

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

@bgroveben LGTM. gute Arbeit!

@ Ethan-Arrowood Danke! Ich habe auch Lektionen für die anderen oben aufgeführten grundlegenden / mathematischen Herausforderungen geschrieben. Ich kann jeden von ihnen in diesem Thread posten, wenn Sie möchten. Ich denke auch, dass es eine gute Idee wäre, round (), sum (), max () und min () in den Mathematik-Grundlagenunterricht aufzunehmen - sie werden sich als nützlich erweisen.

@bgroveben Ich werde es als abgeschlossen markieren und ja bitte. Führen Sie jede Herausforderung bitte auch in einem separaten Kommentar aus. Es wird einfacher sein, auf Änderungen oder was auch immer zu verweisen. Vielen Dank für Ihre Beiträge!

@ Ethan-Arrowood

@amasad hallo! Schön dich hier zu haben 😄

Freut mich, hier zu sein 💃

Die größte Hürde, vor der wir stehen, wenn wir Repl.it in den FCC Python-Kurs aufnehmen, ist die Schnittstelle zu den Repl.it Classroom-Unittests. Wir lieben die Repl.it-Klassenzimmerstruktur, eine unabhängige Datei mit Komponententests ausführen zu können. Wir können jedoch nicht herausfinden, wie ein Benutzer die Herausforderung abschließt (alle Unittests besteht). Natürlich ist dieses Verhalten in Repl.it eingebettet, aber um das Gefühl des aktuellen FreeCodeCamp beizubehalten, möchten wir den Benutzer nach Abschluss des Vorgangs automatisch zur nächsten Herausforderung weiterleiten können (oder ihn dazu auffordern) aktuelle Herausforderung (dh alle Unittests erfolgreich bestehen).

Irgendwelche Ideen, wie wir dies umsetzen könnten? FCC ist in JavaScript geschrieben, so dass jede Art von Web-API oder npm-Modul ziemlich gut funktionieren würde.

Am einfachsten ist es, wenn wir es backen. Haben Sie eine Einstellung auf der Lehrerseite von Dingen, die "Auto-Advance" oder so etwas sagen. (Wir sind nicht gegen das Hinzufügen von Webhooks usw., aber um die Komplexität zu verringern.) Würde das funktionieren?

@amasad Mit einer "Auto-Advance" -Funktion könnten wir FreeCodeCamp sicherlich in einem Repl.it-Klassenzimmer emulieren, aber wir könnten den Benutzerfortschritt am Ende der FCC nicht verfolgen, was für das Gefühl der FCC ziemlich wichtig ist.

Was ist mit einer Funktion, mit der wir Daten eines 'Klassenzimmers' abrufen / veröffentlichen können? Auf diese Weise könnten wir so etwas tun:

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

oder noch besser:

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

Jetzt würden beide Methoden auf unserer Seite ausgeführt, aber da das REPL-Klassenzimmer über einen Iframe eingebettet ist, würden wir zumindest einige einfache Ereignisauslöser von REPL-Seite benötigen, um den Fortschritt einzelner Benutzer richtig zu verfolgen.

Da das Klassenzimmer über einen Iframe eingebettet wäre, könnten wir möglicherweise die Funktion erhalten, dass das REPL-Klassenzimmer nach Abschluss einer Lektion einige Zeilen JavaScript ausführt (die wir über das Lehrerportal definieren können), damit wir das Klassenzimmer erreichen können mit FCC kommunizieren?

Wir hoffen, REPL-Klassenzimmer nicht nur für Python, sondern auch für andere Sprachen verwenden zu können. Sobald das FCC-Python-Curriculum erfolgreich ausgeführt wurde, werden wir Sprachen wie Java oder C ++ (oder buchstäblich jede Sprache, die REPL uns anbieten kann!) Implementieren.

Ich würde gerne die Meinung von @QuincyLarson dazu sowie einige andere wichtige FCC-Mitwirkende

Hallo allerseits, vielen Dank für die Kommentare und Vorschläge.

@amasad Danke, dass du dir die Zeit genommen hast, deine Gedanken und Ideen hier zu teilen. Es ist schön zu wissen, dass REPL.it an dem Klassenzimmerprodukt arbeitet, das wir gerne in die Plattform integrieren würden.

Für den Anfang wäre es großartig, wenn wir dies in einer separaten Diskussion anstelle dieses Lehrplan-Threads aufgreifen könnten, um es für die Integration selbst relevanter zu halten.

@ Ethan-Arrowood Super Job mit der Initiative. Danke für deine harte Arbeit.

@amasad @QuincyLarson Ich habe die REPL-Klassenzimmerdiskussion offiziell in diesen Themen-Thread verschoben (gemäß https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

Nach dem Kommentar von cldershem (vor 8 Tagen kommentiert), hier ist einer für collections -

Titel

Namedtuples

Beschreibung / Erklärung / Lektion

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/

Ein Tupel ist ein in der Mathematik übliches Konzept. Es wird als endlich geordnete Liste von Elementen angesehen. [1] In Python ähneln diese funktional Wörterbüchern, in denen Schlüssel im Voraus definiert werden. Namedtuples können verwendet werden, um einen schnellen Eigenschaftsbaum für jede Verwendung bereitzustellen: Wenn Ihre App beispielsweise mit Socken umgehen muss und alle Socken eine Größe und einen Preis haben, ist ein Tupel mit zwei Feldern nützlich, das dem Wörterbuch {size: _size_, price: _price_} . Um ein Tupel mit diesen Feldern zu erhalten, übergeben Sie die Felder an die Factory-Funktion collections.namedtuple : [2]
collections.namedtuple(Socks, ['size', 'price'])
Insbesondere bei der Verarbeitung von Informationen aus Nur-Text-Quellen können die Feldnamen der Einfachheit halber ein Array oder eine einzelne Zeichenfolge mit durch Kommas und / oder Leerzeichen getrennten Werten sein: [3]
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
Jeder gültige Python-Bezeichner kann für einen Feldnamen verwendet werden, mit Ausnahme von Namen, die mit einem Unterstrich beginnen. Gültige Bezeichner bestehen aus Buchstaben, Ziffern und Unterstrichen, beginnen jedoch nicht mit einer Ziffer oder einem Unterstrich und können kein Schlüsselwort wie class, for, return, global, pass oder raise sein. [3]
Einmal generiert, können sie verwendet werden, um Instanzen mit wörterbuchartigen Einträgen zu erstellen:

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)

_von_ [3]

Code-Eingabeaufforderung / Herausforderung

Eine gute Verwendung von namedtuples besteht darin, das Aufnehmen von Daten zu erleichtern, beispielsweise aus einem CSV-Export aus einer Datenbank. Korrigieren Sie im folgenden Code diesen CSV-Import mit einem Tupel.

Vordefinierter Code

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!

abgeleitet von [4]

_note_: das obige verwendet eine tatsächliche Datei, aber wir könnten die with ... readCSV -Zeilen durch etwas wie Folgendes ersetzen:
readCSV = csv.reader(['Alan,42,Manager,Sales, N1', 'Beth,38,Regional Director,Operations,CO','Robin,23,Associate,Sales,C2']

Lösung

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!

Lektion 2:

Titel

namedtuples._make

Beschreibung / Erklärung / Lektion

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

Eine NamedTuples-Methode namens __make_ erleichtert die Generierung von Instanzen innerhalb einer Iteratorfunktion. Dies würde das Problem aus der vorherigen Lektion noch knapper machen.
Dies wird verwendet wie:

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

Code-Eingabeaufforderung / Herausforderung

Wir überarbeiten die vorherige Lektion und überarbeiten den Code. Es ist fast da, aber der Job ist noch nicht erledigt. Zur Vereinfachung werden einige Datensätze ausgedruckt, in denen Sie den Datensatz verarbeiten sollten. Denken Sie daran, wir müssen einen EmployeeRecord erstellen und diesen an eine andere Stelle im Code übergeben, z.

        employee = EmployeeRecord(*row)

        processEmployee(employee)

Vordefinierter Code

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)

Lösung

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)

Wir könnten wahrscheinlich auch kurze Lektionen verwenden, um Folgendes zu veranschaulichen:

  • n = NamedTuple(**Dictionary)
  • Verwendung von ._fields , um alternative Formen zu erstellen: TwoD = namedtuple('TwoD', 'x y') => ThreeD = namedtuple('ThreeD', TWo._fields + ('z',))
  • Abdeckung grundlegender Anwendungsfälle: Datenaufnahme (wie die CSV), Datenbanktransaktionen, Netzwerktransaktionen, Erleichterung von POJOs (oder ... sind POPOs eine Sache in Python? lol)

Hier sind die restlichen mathematischen Herausforderungen für Anfänger:

__Titel: __ Python-Addition

__Beschreibung / Erklärung / Lektion: __

In Python ist eine Ganzzahl (int) einer von drei verschiedenen numerischen Typen.
In dieser Übung fügen Sie mit dem Pluszeichen (+) zwei Ganzzahlen hinzu.

>>> 2 + 2
4

__Code Prompt / Challenge: __

Ändern Sie die 0 so, dass die Summe 20 entspricht.

__Vordefinierter Code: __

total = 10 + 0

__Lösung:__

total = 10 + 10

__Tests: __

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

__Titel:__
Berechnen Sie den Quotienten und den Rest mit der Funktion divmod ().

__Beschreibung / Erklärung / Lektion: __

Divmod verwendet zwei (nicht komplexe) Zahlen als Argumente und gibt bei Verwendung der Ganzzahldivision ein Zahlenpaar zurück, das aus ihrem Quotienten und dem Rest besteht.
Für ganze Zahlen ist das Ergebnis dasselbe wie (a // b, a% b).

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

__Code Prompt / Challenge: __

In dieser Übung werden die Variablen a und b für Sie definiert.
Definieren Sie eine Variable mit dem Namen result, die die divmod-Funktion für die Variablen a und b (in dieser Reihenfolge) aufruft.

__Vordefinierter Code: __

a = 11
b = 3

__Lösung:__

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

__Tests: __

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

__Titel: __ Python-Exponenten

__Beschreibung / Erklärung / Lektion: __

Python verwendet den Operator double asterisk (**), um die Exponentiation zu handhaben.
Die Zahl vor den Sternchen ist die Basis und die Zahl danach ist der Exponent.
In Python können Sie auch die integrierte Funktion pow (x, y) verwenden, mit der Sie x zur Potenz von y machen.

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

__Code Prompt / Challenge: __

In der Konsole erhalten Sie zwei Variablen, a und b.
Definieren Sie mit einer der in dieser Lektion beschriebenen Methoden eine Variable mit dem Namen power, die a gleich der Potenz von b ist.

__Vordefinierter Code: __

a = 3
b = 4

__Lösung:__

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

__Tests: __

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

__Titel: __ Python Float Division

__Beschreibung / Erklärung / Lektion: __

Python 3 unterscheidet zwischen Integer (Floor) Division und Float (True) Division.
Python verwendet einen einzelnen Schrägstrich (/) für die Float-Division.
Bei Verwendung der Gleitkommadivision wird, selbst wenn der Quotient (Ergebnis) eine ganze Zahl wie 1 oder 2 ist, eine Gleitkommazahl anstelle eines int zurückgegeben.

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

__Code Prompt / Challenge: __

Wenn Sie den vorhandenen Code ausführen, hat die Variable mit dem Namen Quotient den Wert 1.0.
Ändern Sie die zweite Zahl (den Nenner) so, dass der Quotient einen Wert von 2,5 hat.

__Vordefinierter Code: __

quotient = 5 / 5

__Lösung:__

quotient = 5 / 2

__Tests: __

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

__Titel: __ Python Integer Division

__Beschreibung / Erklärung / Lektion: __

Python 3 unterscheidet zwischen Integer (Floor) Division und Float (True) Division.
Python verwendet einen doppelten Schrägstrich (//) für die Ganzzahldivision.
Bei Verwendung der Ganzzahldivision rundet Python den Quotienten auf die nächste ganze Zahl ab.

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

__Code Prompt / Challenge: __

Wenn Sie den vorhandenen Code ausführen, hat die Variable mit dem Namen Quotient den Wert 1.
Ändern Sie die zweite Zahl (den Nenner) so, dass der Quotient den Wert 2 hat.

__Vordefinierter Code: __

quotient = 5 // 5

__Lösung:__

quotient = 5 // 2

__Tests: __

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

__Titel: __ Python-Maximalwert

__Beschreibung / Erklärung / Lektion: __

Die Funktion max () gibt das größte Element in einer Iterable (wie eine Liste oder eine Zeichenfolge) oder das größte von zwei oder mehr Argumenten zurück.
Während wir eine Iterable als Argument angeben, müssen wir sicherstellen, dass alle Elemente in der Iterable vom gleichen Typ sind.
Wenn die Iterable leer ist und die Standardeinstellung nicht angegeben ist, wird ein ValueError ausgelöst.

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

__Code Prompt / Challenge: __

Der Startercode enthält eine Liste von Nummern mit dem Namen "gut".
Die höchste Variable wird mit Zahlen initialisiert.
Machen Sie den höchsten Wert gleich der größten Zahl in Zahlen.

__Vordefinierter Code: __

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

__Lösung:__

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

__Tests: __

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

__Titel: __ Python-Mindestwert

__Beschreibung / Erklärung / Lektion: __

Die Funktion min () gibt das kleinste Element in einer Iterable (wie eine Liste oder eine Zeichenfolge) oder das kleinste von zwei oder mehr Argumenten zurück.
Während wir eine Iterable als Argument angeben, müssen wir sicherstellen, dass alle Elemente in der Iterable vom gleichen Typ sind.
Wenn die Iterable leer ist und die Standardeinstellung nicht angegeben ist, wird ein ValueError ausgelöst.

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

__Code Prompt / Challenge: __

Der Startercode enthält eine Liste von Buchstaben mit dem Namen "Buchstaben".
Die niedrigste Variable wird mit Buchstaben initialisiert.
Machen Sie den Wert des niedrigsten gleich dem 'kleinsten' (alphabetisch ersten) Buchstaben in Buchstaben.

__Vordefinierter Code: __

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

__Lösung:__

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

__Tests: __

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

__Titel: __ Python-Multiplikation

__Beschreibung / Erklärung / Lektion: __

Python verwendet den Stern (*) -Operator zur Multiplikation.

>>> 3 * 3
9

__Code Prompt / Challenge: __

Ändern Sie die 0 so, dass das Produkt gleich 80 ist.

__Vordefinierter Code: __

product = 8 * 0

__Lösung:__

product = 8 * 10

__Tests: __

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

__Titel: __ Python-Rest

__Beschreibung / Erklärung / Lektion: __

Der% (Modulo) -Operator ergibt den Rest aus der Division des ersten Arguments durch das zweite.
Der Modulo-Operator liefert immer ein Ergebnis mit dem gleichen Vorzeichen wie sein zweiter Operand (oder Null).

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

Eine einfache Möglichkeit, um festzustellen, ob eine Zahl ungerade oder gerade ist, besteht darin, den Rest zu überprüfen, wenn diese Zahl durch 2 geteilt wird.
Bei ungeraden Zahlen beträgt der Rest 1.
Für gerade Zahlen ist der Rest 0.

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

__Code Prompt / Challenge: __

Setzen Sie den variablen Rest mit dem Modulo-Operator (%) gleich dem Rest von 11 geteilt durch 3.

__Vordefinierter Code: __

remainder = "Solution goes here"

__Lösung:__

remainder = 11 % 3

__Tests: __

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

__Titel: __ Python-Rundung

__Beschreibung / Erklärung / Lektion: __

Die Funktionsrunde (Zahl, n-stellig) gibt eine bestimmte Zahl zurück, die nach dem Dezimalpunkt auf n-stellige Genauigkeit gerundet ist.
Wenn n-Ziffern weggelassen werden oder Keine ist, wird die nächste Ganzzahl an die Eingabe zurückgegeben.
Der Rückgabewert ist eine Ganzzahl, wenn er mit einem Argument aufgerufen wird, andernfalls ist er vom gleichen Typ wie die angegebene Zahl.

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

__Code Prompt / Challenge: __

Die Variable long_pi hat zu viele Nachkommastellen.
Erstellen Sie eine Variable mit dem Namen kürzeres_pi, die wir stattdessen verwenden können.
Verwenden Sie die Funktion round (), um nur die ersten 2 Stellen nach dem Dezimalpunkt anzuzeigen, und weisen Sie diesen Wert kürzeren_pi zu.

__Vordefinierter Code: __

longer_pi = 3.14159265358979323846

__Lösung:__

longer_pi = 3.14159265358979323846
shorter_pi = round(longer_pi, 2)

__Tests: __

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

__Titel: __ Python-Quadratwurzel

__Beschreibung / Erklärung / Lektion: __

Die Funktion math.sqrt () ist Teil des Python-Mathematikmoduls, das immer verfügbar ist, aber importiert werden muss.
Math.sqrt (x) gibt die Quadratwurzel von x als Gleitkommazahl zurück.

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

__Code Prompt / Challenge: __

Die Variable square_root ist als die Nummer 81 definiert.
Ändern Sie square_root so, dass es der Quadratwurzel von 81 entspricht.
Das Mathematikmodul wurde für Sie importiert.

__Vordefinierter Code: __

import math
square_root = 81

__Lösung:___

import math
square_root = math.sqrt(81)

__Tests: __

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

__Titel: __ Python-Subtraktion

__Beschreibung / Erklärung / Lektion: __

In Python ist eine Ganzzahl (int) einer von drei verschiedenen numerischen Typen.
In dieser Übung subtrahieren Sie zwei Ganzzahlen mit dem Minusoperator (-).

>>> 2 - 1
1

__Code Prompt / Challenge: __

Ändern Sie die 0 so, dass die Summe 10 entspricht.

__Vordefinierter Code: __

total = 20 - 0

__Lösung:__

total = 20 - 10

__Tests: __

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

__Titel: __ Python-Summe

__Beschreibung / Erklärung / Lektion: __

Die Funktionssumme (iterierbar) addiert alle Elemente in einem iterierbaren Python (Liste, Tupel usw.) von links nach rechts und gibt die Summe zurück.
Es gibt ein optionales zweites Argument, start, das standardmäßig 0 ist und zur Gesamtsumme hinzugefügt wird.
Die Elemente der Iterable sind normalerweise Zahlen, und der Startwert darf keine Zeichenfolge sein.

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

__Code Prompt / Challenge: __

Es gibt zwei Nummernlisten.
Suchen Sie die Summe aller Elemente in beiden Listen und weisen Sie diesen Wert einer Variablen mit dem Namen total zu.

__Vordefinierter Code: __

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

__Lösung:__

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

__Tests: __

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

Ich denke, das deckt alle Lektionen ab, die im Abschnitt Grundlagen / Mathematik aufgeführt sind.
Bitte lassen Sie mich wissen, wenn Sie weitere hinzufügen möchten.
Sie können auch Änderungen, Vorschläge usw. vornehmen.
Ich habe alle Lektionen, die ich gerade in .py- und .md-Dateien gepostet habe, unter:
https://github.com/bgroveben/FCC_Python.
Ich habe auch ein REPL-Klassenzimmer eingerichtet unter:
https://repl.it/community/classrooms/18388.

Bitte beachten Sie, dass wir die Diskussion über unsere Python-Codierungsprobleme in dieses neue Repository verschieben: https://github.com/freeCodeCamp/python-coding-challenges/issues

Als Referenz hier posten:
Ich denke, Max und Min möchten vielleicht beide:

  1. Verwenden Sie zur Verdeutlichung Zahlen - Benutzer wissen möglicherweise nicht, wie ein Zeichen eine Ganzzahl ist
  2. Stellen Sie sicher, dass Sie mehrere Instanzen einer Nummer verwenden, um das Verhalten wirklich zu verbessern
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen