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.
Kommentieren Sie unten und geben Sie an, zu welchem Abschnitt es hinzugefügt werden soll und warum.
Kommentar unter den folgenden Details:
Geben Sie Ihren Updates ausführliche Erklärungen, warum Sie die angegebenen Änderungen vornehmen.
https://github.com/freeCodeCamp/freeCodeCamp/tree/feature/python-challenges
Eine Python-Herausforderung vorschlagen?
Folgendes können wir hinzufügen:
Anfänger
Mittlere:
Fortgeschrittene:
@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:
itertools
, collections
)requests
, scrapy
usw.)%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()
.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()
asyncio
spam
und eggs
.@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
-
Namedtuples
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]
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.
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']
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:
namedtuples._make
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)
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)
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)
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)
._fields
, um alternative Formen zu erstellen: TwoD = namedtuple('TwoD', 'x y')
=> ThreeD = namedtuple('ThreeD', TWo._fields + ('z',))
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:
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?