Freecodecamp: منهج بايثون المستقبل [مناقشة]

تم إنشاؤها على ٢٥ أبريل ٢٠١٧  ·  56تعليقات  ·  مصدر: freeCodeCamp/freeCodeCamp

منهج بايثون

ستكون هذه المشكلة هي الموضوع الرئيسي لتخطيط وتطوير منهج FCC Python المستقبلي.

لأي نقاش حول دمج REPL.it Classroom ، يرجى زيارة https://github.com/freeCodeCamp/freeCodeCamp/issues/14736 بدلاً من ذلك

نحن نعمل حاليًا على تشغيل مجموعة اختبار Python يمكن التحقق منها على عنصر واجهة مستخدم iframe Repl.it. بمجرد أن نحقق ذلك ، سنبدأ في تنفيذ المنهج المحدد في هذا الموضوع. إذا كنت مهتمًا بتطوير هذا الجزء من منهج FCC Python ، فيرجى إرسال رسالة بنفسي (Ethan Arrowood) على Gitter أو التعليق أدناه.

يرجى ملاحظة كتابة جميع تحديات Python في الإصدار 3.6



الهيكل الحالي لمنهج بايثون FCC هو: قسم المبتدئين ، القسم المتوسط ​​، قسم الموضوع الخاص.

قسم المبتدئين:

  • [] مقدمة إلى بايثون
  • [ ] انتاج

    • طباعة

    • شخصيات الهروب

    • إدخال

  • [ ] أنواع البيانات

    • عدد صحيح ، يطفو

    • سلاسل

    • مجموعات

    • القوائم

    • مجموعات

    • قواميس

  • [ ] العاملين

    • + ، - ، ، / ،٪ ، *

    • <،> ، <= ،> = ، == ،! =

    • =

    • صواب ، خطأ ، و ، أو لا

    • في وليس في

    • إنه ليس

  • [x] الرياضيات -bgroveben

    • جمع ، طرح ، ضرب ، قسمة

    • القوة ، الجذر التربيعي () ، القيمة المطلقة () ، الجولة () ، المجموع () ، الحد الأقصى () ، الحد الأدنى

  • [ ] المتغيرات
  • [] الشروط

    • if ، elif ، وإلا

  • [] الحلقات

    • بينما ، لـ (في النطاق) ، لـ (في القائمة) ، لـ (في السلسلة)

  • [ ] المهام
  • [ ] الطبقات

القسم المتوسط:

  • [] ملف I / O
  • [] التكرارات والمولدات
  • [x] لامدا - @ robiemu
  • [] الشروط
  • [] عفوا
  • [] وحدات ، مكتبات ، حزم
  • [] معالجة الملفات والأخطاء
  • [] الكائنات وأنواع البيانات المتقدمة
  • [] تنسيق الطباعة
  • [] قائمة الفهم
  • [] الديكور

قسم الموضوع الخاص:

  • [ ] التعلم الالي
  • [ ] تطوير اللعبة
  • [] Webscraping (BeautifulSoup)
  • [] نظم المعلومات الجغرافية (كتيب / فوليوم)
  • [] قارورة / جانغو (من الأفضل التركيز على أحدهما وليس كليهما)
  • [] تحليل البيانات (باندا / نومبي)
  • [] تصور البيانات (بروكه)
  • [] واجهة المستخدم الرسومية (tkinter)
  • [] الترميز الجغرافي (جيوبى)
  • [] مجموعة أدوات اللغة الطبيعية (NLTK)

هل لديك فكرة عن درس القسم؟

التعليق أدناه ويرجى تحديد القسم الذي يجب الإضافة إليه ولماذا.

تريد تطوير منهج الدرس؟

التعليق أدناه التفاصيل التالية:

  • عنوان
  • الوصف / الشرح / الدرس
  • موجه التعليمات البرمجية / التحدي
  • كود محدد مسبقا
  • المحلول
  • الاختبارات

هل تريد إجراء تغييرات على درس موجود؟

قدم تحديثاتك مع توضيحات مفصلة عن سبب قيامك بإجراء التغييرات المحددة.



قريبا

-

كيف تقترح تحدي بايثون

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

اقتراح تحدي بايثون؟

learn

التعليق الأكثر فائدة

مرحبًا يا شباب ، أنا مؤسس / الرئيس التنفيذي لشركة Repl.it. FCC قريبة وعزيزة على قلوبنا لذلك سنفعل كل ما يمكننا القيام به حتى نتمكن من الدعم هنا. ما هي العوائق الرئيسية التي تحول دون اعتماد فصول Repl.it لهذا الغرض؟

ال 56 كومينتر

إليك ما يمكننا إضافته:
مبتدئ

  • الشرطية

متوسط:

  • التكرارات والمولدات
  • لامدا
  • الشرطية
  • عفوا
  • وحدات ، مكتبات ، حزم
  • معالجة الملفات والأخطاء
  • كائنات وأنواع بيانات متقدمة
  • تنسيق الطباعة

المتقدمة:

  • Webscraping (شوربة جميلة)
  • GIS (كتيب / فوليوم)
  • قارورة / جانغو (كنت أميل أكثر نحو دجانغو)
  • تحليل البيانات (باندا / نومبي)
  • تصور البيانات (بروكه)
  • واجهة المستخدم الرسومية (tkinter)
  • الترميز الجغرافي (جيوبى)

mstellaluna شكرا

@ Ethan-Arrowood بالنسبة لي ، يجب أن تكون الأساسيات هي الحد الأدنى من المعرفة (إذا ، وإلا ، من أجل أي). سيكون إدخالي لـ "الشرطي" في الوسيط عبارة عن شروط شرطية استنادًا إلى إدخال المستخدم أو العبارات الثلاثية .. نفس الشيء بالنسبة لتنسيق الطباعة .. سيكون الأساسي عبارة طباعة بسيطة بينما يمكننا تقديم تعليمات طباعة مع المتغيرات ،٪ s. . إلخ

يحتوي Repl.it على منطقة جديدة لإنشاء فصول دراسية مخصصة. يمكنك إنشاء مهام مع التعليمات.

إعادة الفصول الدراسية
https://repl.it/site/classrooms

قائمة فصول المجتمع
https://repl.it/community

أقترح إضافة أقسام خوارزمية أساسية ومتوسطة ومتقدمة (على غرار ما يحتويه منهج FCC Front End لجافا سكريبت).

لقد ألقيت نظرة على مثال FCC-Python-Variable-Challenge المقدم ، ولاحظت أن التحدي يتوقع القليل من معرفة "المتطلبات الأساسية". كما لو أن العربة قد تعرفت على المتغيرات من قبل.

لا يشرح الوصف / التفسير لتحدي المتغير ماهية المتغيرات. بخلاف تحدي Declare JavaScript Variables الخاص

أعلم أن هذا مجرد مثال - ولكن للتأكد فقط - هل سنفترض أن العربة قد اجتازت بالفعل منهج JavaScript أثناء بناء منهج Python؟

jamesperrin نعم ، لقد بحثنا في ذلك ولكننا نحاول إبقاء المستخدم على موقع FCC لذلك يجب تضمين التحديات. علاوة على ذلك ، لا توجد طريقة بالنسبة لنا للوصول إلى نتائج اختبارات الوحدة في الفصول الدراسية البديلة.

@ U - طرق نعم كان هذا خطأي. الهدف هو أن يكون هذا منهجًا مستقلاً بحيث تكون التفسيرات الفعلية أكثر تفصيلاً (مثل إصدار JS). شكرا لك على إبراز هذا :)

AnikaErceg ستكون هذه

@ Ethan-Arrowood قد ترغب في تضمين مجموعة أدوات اللغة الطبيعية.

أضفت قائمة الفهم إلى المستوى المتوسط

ماذا عن الديكور تحت المتقدم؟ أفترض أن مديري السياق سيظهرون أثناء معالجة الملف؟

@ t3h2mas أضع الديكور تحت المتوسط.

إذا أضفت for (in list) ، فربما يمكنك أيضًا إضافة for (in string) ؟
أيضًا ، ستكون مقدمة إلى عامل التشغيل in جيدة أيضًا (أعلم أنني وجدت حياتي أسهل عندما اكتشفت أنه لا يجب استخدامها فقط مع حلقات for : smiley:)

AnikaErceg اقتراح جيد. منجز. أضفت هو وليس كذلك.

ginoskotheon هل نسيت إضافة حلقات under for (in string) أو لا ترى أي فائدة من إدخال ذلك؟ : مبتسم:

أنا مطور ولغته الأولى كانت Python ... لقد ساعدت بالفعل في الفصل المحلي الخاص بي التابع للجنة الاتصالات الفيدرالية واقترح المنظم أنني قد أرغب في المساعدة في المنهج الجديد. لست متأكدًا بنسبة 100٪ من كيفية البدء في المساهمة ، لكنني بالتأكيد أرغب في ذلك. أنا أيضًا نشط جدًا في مجتمع Python ، محليًا وعلى نطاق واسع ، لذلك يمكنني الحصول على الكثير من الأعين المطلعة عند الحاجة.

اقتراحاتي الأولى:

  • [] اجعل كل الأمثلة تتبع PEP 8
  • [] يجب أن يكون الدرس المنطقي في "أنواع البيانات" جنبًا إلى جنب مع قيم "true" و "falsy"
  • [] يجب تضمين بعض المكتبات القياسية في مكان ما ( itertools ، collections )
  • [] يمكن تضمين بعض المكتبات الأساسية ( requests ، scrapy ، إلخ)
  • [] لست متأكدًا مما تعنيه "تسلسلات الهروب" في "الإخراج" ، ولكن إذا كانت تشير إلى سلاسل نمط %s .... اترك ذلك لـ "الأشياء القديمة التي قد تواجهها ، ولكن لا تحتاج حقًا إلى القلق بشأن القسم "وقم فقط بتدريس نمط جديد f و .format() سلاسل نمط.
  • [] يشير قسم الحلقة إلى range و list و "سلسلة" كما لو كانت جميعها مختلفة ، لكن في Python كلها متكررة وهذا هو السبب في أنه يمكنك تكرارها بنفس الشيء الكلمات الدالة. ربما يمكن التطرق إلى ذلك في قسم "التكرارات والمولدات".

    • [] enumerate()

  • [] يجب ذكر مديري السياق في مكان ما.
  • [] قد يكون هناك قسم متقدم مقابل asyncio
  • [] تقليديا يتم تدريس PEP 20 في مكان ما في البداية مع بعض الأمثلة spam و eggs .
  • [] الاختبارات
  • [] virtualenvs
  • [] التثبيت
  • [ ] تعليقات
    سأكون أكثر من سعيد للمساعدة في هذا المشروع بأي طريقة ممكنة. لقد كنت أفكر منذ فترة طويلة في أننا بحاجة إلى شيء مثل هذا.

cldershem الكثير من الاقتراحات الرائعة شكرا لك! من خلال خبرتك ، فإن أفضل أنواع المساهمات التي يمكنك تقديمها هي كتابة الدروس / التحديات بأنفسهم. اسمحوا لي أن أعرف أيها ستهتم بكتابتها 😄

تضمين التغريدة

لست متأكدًا بنسبة 100٪ من كيفية البدء في المساهمة ، لكنني بالتأكيد أرغب في ذلك.

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

قد يوجهك في الاتجاه الصحيح.

ربما يأخذ @ Ethan-Arrowood الطلبات من خلال تعليقات Github أيضًا؟

@ t3h2mas نعم ، كما قلت في الجزء العلوي من الدرس / التحدي يمكن تقديمه هنا في هذا الموضوع كتعليقات 😄

cldershem هناك طريقة أخرى يمكنك من خلالها المساعدة وهي إذا كنت تعرف طريقة جيدة لإنشاء تحدٍ في المتصفح يمكن اختباره بالفعل (بطريقة غير ملائمة). نحن نستكشف جميع أنواع الخيارات من REPL.it إلى codeMirror إلى Skulpt.

cldershem ربما يجب أن أكتب "أحرف الهروب". هذه أشياء مثل "\ n" و "\ t" وما إلى ذلك.

وأنا أعلم أنها قابلة للتكرار ولكني بدأت في تقسيم الأمور من حيث الدروس الفردية الصغيرة.

بالمناسبة ، شكرًا على كل الاقتراحات وكل المساعدة. أخطط للعمل على نموذج درس / تحدٍ خلال عطلة نهاية الأسبوع ، وآمل أن يكون نموذجًا للآخرين. إذا كنت ترغب في التعامل مع درس / تحدي يعمل بشكل مشابه لكيفية عمل تحديات Free Code Camp ، فيرجى نشر الكود الخاص بك. أحب أن أرى ذلك.

تضمين التغريدة
أود أيضًا المساعدة في كتابة الدروس والتحديات لدورة FCC-Python.
أرى من التعليقات السابقة أن Repl.it Classrooms ليست الخيار الأفضل ، لكن يمكنني البدء في العمل على الدروس (العنوان والوصف والاختبارات وما إلى ذلك الموضحة أعلاه) هناك. بمجرد تسوية النظام الأساسي / إطار العمل ، يمكنني دائمًا تعديل الكود ونقله.
لقد كتبت بعض التمارين النموذجية التي يمكنك العثور عليها هنا ؛ يجب أن تكون قادرًا على رؤيتها ، ولكن عليك تسجيل الدخول لاستيرادها وإلقاء نظرة عليها وتعديلها.
لا تتردد في التعليق والنقد وتغيير الدروس بأنفسهم ، واسمحوا لي أن أعرف عندما يتم تحديد نظام أساسي / إطار عمل أكثر ملاءمة.
في غضون ذلك ، يمكنني العمل على دروس المبتدئين الموضحة أعلاه ، بدءًا من الرياضيات والانتقال إلى أي شيء آخر يجب القيام به.

مرحبًا يا شباب ، أنا مؤسس / الرئيس التنفيذي لشركة Repl.it. FCC قريبة وعزيزة على قلوبنا لذلك سنفعل كل ما يمكننا القيام به حتى نتمكن من الدعم هنا. ما هي العوائق الرئيسية التي تحول دون اعتماد فصول Repl.it لهذا الغرض؟

amasad مرحبا! سعيد بوجودك هنا 😄
العقبة الرئيسية التي نواجهها في اعتماد Repl.it في دورة FCC Python التدريبية هي التفاعل مع وحدات الفصول الدراسية Repl.it. نحن نحب بنية Repl.it Classroom للقدرة على تشغيل ملف مستقل باستخدام اختبارات الوحدة ؛ ومع ذلك ، لا يمكننا معرفة كيفية معرفة وقت إكمال المستخدم للتحدي (اجتياز جميع الاختبارات). بالطبع هذا السلوك مضمن في Repl.it ، ولكن من أجل الحفاظ على إحساس FreeCodeCamp الحالي ، نود أن نكون قادرين على دفع المستخدم إلى التحدي التالي تلقائيًا (أو مطالبتهم بالقيام بذلك) بمجرد إكمالهم التحدي الحالي (أي اجتياز جميع الاختبارات بنجاح).

أي أفكار حول كيفية تنفيذ هذا؟ تمت كتابة FCC بلغة JavaScript ، لذا فإن أي نوع من وحدات واجهة برمجة تطبيقات الويب أو وحدة npm ستعمل بشكل جيد.

إذا كنت تعتقد أن العديد من المشاهدين سيأتون من خلفية جافا سكريبت ، أعتقد أن كتابًا تمهيديًا عن الاختلافات سيكون مفيدًا. فمثلا

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

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

print(dict["a"])

مثال آخر هو الحلقات من خلال قاموس أو مصفوفة مع حلقات for. هذا يقودني طوال الوقت.

_Title_ مقدمة إلى Lambdas

_ الوصف / الشرح / الدرس_
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

"وظيفة مجهولة (دالة حرفية ، تجريد لامدا) هي تعريف دالة غير مرتبط بمعرف. [5] كلمة "لامدا تأتي من حساب لامدا" [4]. في لغة python ، تعد lambda كلمة مفتاحية لتعريف وظيفة مجهولة. باستخدام الكلمة الرئيسية lambda بدلاً من الكلمة الرئيسية def ، تبدو لامدا الأساسية كما يلي: lambda x: x**2 يمكن تخصيصها للمتغيرات وإعادة استخدامها مثل الوظائف:

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

_src 2_

حالات الاستخدام الأكثر شيوعًا هي الاحتفاظ بالشفرة قصيرة وقابلة للقراءة ، بدلاً من تقسيم التعريف واستخدامها وفقًا لهذا المثال:

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_

في واجهة Tkinter GUI هذه ، يجب تمرير وظيفة إلى السمة _command_. تمت تسمية الوظائف بأرقام لأنها تم إنشاؤها باستخدام منشئ RAD. هذا جيد وعملي ، لكن ليس مقروءًا جدًا. يمكنك إعادة تسميتها وهذا يجعل الأمور أكثر وضوحًا ، ولكن إذا كان لديك العديد من الأزرار ، فقد يصبح من المرهق البحث عن الكود للعثور على الأمر الصحيح ، وبما أنها ترجع قيمة أساسية فقط ، فسيكون الحل الأفضل هو تحديد تعمل هناك بشكل مجهول:

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_

ميزة رئيسية أخرى لهذا الاستخدام هي أنه يجعل الكود أقصر أيضًا ، مما يعني أنه متاح بسهولة أكبر للمبرمج عند البحث عن أداة كجزء من حل أكبر.

_ موجه الرمز / التحدي_
اكتب تعبير لامدا يحتوي على السمات الرئيسية الموضحة أعلاه ؛ جعل الكود أكثر وضوحًا عن طريق نقل كل الكود المستخدم إلى نفس المكان ؛ مما يؤدي إلى رمز أقصر وأكثر طبيعية.

_رمز محدد مسبقًا_

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

_المحلول_
print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)))

Robbiemu عمل عظيم! اقتراحي الوحيد هو إضافة تعليق في قسم الرمز المحدد مسبقًا بجوار سطر الطباعة الذي يقول شيئًا مثل # only edit this line . أعتقد أيضًا أن هذا هو كود python 2 وسنقوم بتدريس Python 3 لذلك أعتقد أن التغيير الوحيد هو أن خط الطباعة يتطلب التفافًا '()'.
شكرا لمساهمتك!

إيثان ، شكرا لك. سأستمر في العمل على هذا. يمكن تغيير المشكلة والحل ، لذلك هناك اختبارات معقولة أيضًا (لا تستخدم مجموعة بيانات ثابتة ، كما فعلت هنا). أود أن أرى مثالاً على درس لأفضل طريقة للقيام بذلك.

robbiemu بالطبع. ما زلنا نعمل على REPL.it وسنقوم بتحديث هذا الموضوع بمجرد معرفة المزيد من المعلومات. عمل جيد الآن 😄

هذا هو أحد تحديات الكود للمبتدئين - قسم الرياضيات المدرجة في بداية هذا الموضوع.

_Title_ - القيمة المطلقة

_ الوصف / الشرح / الدرس_ -
تشير القيمة المطلقة إلى مدى بعد الرقم عن الصفر.
إذا كان الرقم سالبًا ، فستحوله abs () إلى موجب.
في abs (x) ، قد تكون x عددًا صحيحًا أو عددًا عشريًا أو عددًا مركبًا.
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

_ موجه الرمز / التحدي _ -
المتغير المطلق يساوي -42.
غيّر القيمة المطلقة بحيث تساوي القيمة المطلقة لـ -42.

_رمز محدد مسبقًا_ -

absolute_value = -42

_المحلول_ --

absolute_value = abs(-42)

_ الاختبارات_ -

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

bgroveben LGTM. عمل جيد!

@ إيثان أروود شكرا لك! لقد كتبت أيضًا دروسًا للتحديات الأساسية / الرياضيات الأخرى المذكورة أعلاه. يمكنني نشر كل منهم في هذا الموضوع إذا كنت ترغب في ذلك. أيضًا ، أعتقد أنه من الجيد تضمين round () و sum () و max () و min () مع دروس أساسيات الرياضيات - ستكون في متناول اليد.

bgroveben سأضع علامة على أنه مكتمل ونعم من فضلك. هل كل تحد في تعليق منفصل أيضا من فضلك ؛ سيكون من الأسهل الرجوع إلى التغييرات أو أي شيء آخر. شكرا لمساهماتكم!

@ إيثان أروود

amasad مرحبا! سعيد بوجودك هنا 😄

سعيد لوجودي هنا 💃

العقبة الرئيسية التي نواجهها في اعتماد Repl.it في دورة FCC Python التدريبية هي التفاعل مع وحدات الفصول الدراسية Repl.it. نحن نحب بنية Repl.it Classroom للقدرة على تشغيل ملف مستقل باستخدام اختبارات الوحدة ؛ ومع ذلك ، لا يمكننا معرفة كيفية معرفة وقت إكمال المستخدم للتحدي (اجتياز جميع الاختبارات). بالطبع هذا السلوك مضمن في Repl.it ، ولكن من أجل الحفاظ على إحساس FreeCodeCamp الحالي ، نود أن نكون قادرين على دفع المستخدم إلى التحدي التالي تلقائيًا (أو مطالبتهم بالقيام بذلك) بمجرد إكمالهم التحدي الحالي (أي اجتياز جميع الاختبارات بنجاح).

أي أفكار حول كيفية تنفيذ هذا؟ تمت كتابة FCC بلغة JavaScript ، لذا فإن أي نوع من وحدات واجهة برمجة تطبيقات الويب أو وحدة npm ستعمل بشكل جيد.

الأسهل هو أننا نخبزها. يكون لديك مكان في جانب المعلم للأشياء التي تقول "التقدم التلقائي" أو شيء من هذا القبيل. (نحن لسنا ضد إضافة webhooks وما إلى ذلك ، ولكن من أجل تقليل التعقيد) هل سينجح ذلك؟

amasad باستخدام ميزة "التقدم التلقائي" ، سنتمكن بالتأكيد من محاكاة FreeCodeCamp في أحد الفصول الدراسية في Repl.it ، ولكن ما زلنا غير قادرين على تتبع تقدم المستخدم في نهاية FCC وهو أمر بالغ الأهمية لشعور FCC.

ماذا عن الميزة التي تتيح لنا الحصول على / نشر بيانات "الفصل الدراسي". بهذه الطريقة يمكننا القيام بشيء مثل:

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

أو الأفضل من ذلك:

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

الآن سيتم تشغيل كلتا الطريقتين من جانبنا ، ولكن نظرًا لأن REPL Classroom مضمّن عبر إطار iframe ، فسنحتاج على الأقل إلى بعض مشغلات الأحداث البسيطة من جانب REPL من أجل تتبع تقدم المستخدم الفردي بشكل صحيح.

علاوة على ذلك ، نظرًا لأنه سيتم تضمين Classroom عبر iframe ، فربما نحصل على ميزة أنه عندما يكمل المستخدم درسًا ، يقوم REPL Classroom بتشغيل بعض سطور JavaScript (التي يمكننا تحديدها عبر بوابة المعلمين) حتى نتمكن من جعل الفصل الدراسي التواصل مع FCC؟

نأمل أن نكون قادرين على استخدام الفصول الدراسية REPL ليس فقط للبايثون ، ولكن للغات أخرى أيضًا. بمجرد أن يتم تشغيل منهج FCC Python وتشغيله بنجاح ، سننتقل إلى تطبيق لغات مثل Java أو C ++ (أو حرفيًا أي لغة يمكن أن توفر لنا REPL استخدامها!).

أرغب في الحصول على رأي QuincyLarson حول هذا بالإضافة إلى بعض المساهمين الرئيسيين الآخرين في لجنة الاتصالات الفيدرالية (سأحاول الوصول إليهم على Gitter / المنتديات).

مرحباً بالجميع ، شكراً جزيلاً على التعليقات والاقتراحات.

amasad شكرا لأخذ الوقت لمشاركة أفكارك وأفكارك هنا. من الرائع معرفة أن REPL.it يعمل على منتج الفصل الدراسي ، والذي نود دمجه في النظام الأساسي.

بالنسبة للمبتدئين ، سيكون من الرائع أن نتمكن من تناول هذا في مناقشة منفصلة بدلاً من سلسلة المناهج الدراسية هذه ، لإبقائها أكثر ارتباطًا بالتكامل نفسه.

@ Ethan-Arrowood عمل رائع مع المبادرة. شكرا لعملكم الشاق.

amasadQuincyLarson لقد انتقلت رسميا مناقشة REPL الفصول الدراسية لهذا الموضوع قضية (لكل توصيةraisedadead). https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

متابعة تعليق cldershem (تم التعليق عليه منذ 8 أيام) ، إليك تعليق مقابل collections -

عنوان

مسمى

الوصف / الشرح / الدرس

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.amedtuple
4 https://pythonprogramming.net/reading-csv-files-python-3/

يعتبر tuple مفهومًا شائعًا في الرياضيات. تعتبر قائمة منتهية مرتبة من العناصر. [1] في لغة البايثون ، تشبه هذه القواميس وظيفيًا القواميس ، حيث يتم تعريف المفاتيح مسبقًا. يمكن استخدام Namedtuples لتوفير شجرة خاصية سريعة لأي استخدام: على سبيل المثال ، إذا كان يجب أن يتعامل تطبيقك مع الجوارب وأن جميع الجوارب لها حجم وسعر ، فإن المجموعة التي تحتوي على حقلين مفيدة ، وتقريب القاموس {size: _size_, price: _price_} . للحصول على مجموعة مع هذه الحقول ، تقوم بتمرير الحقول إلى وظيفة المصنع collections.namedtuple : [2]
collections.namedtuple(Socks, ['size', 'price'])
للراحة ، خاصة عند معالجة المعلومات من مصادر النص العادي ، يمكن أن تكون أسماء الحقول مصفوفة أو سلسلة واحدة مع قيم مفصولة بفاصلة و / أو مفصولة بمسافة: [3]
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
يمكن استخدام أي معرف Python صالح لـ _fieldname_ باستثناء الأسماء التي تبدأ بشرطة سفلية. تتكون المعرفات الصالحة من أحرف وأرقام وشرطات سفلية ولكنها لا تبدأ برقم أو شرطة سفلية ولا يمكن أن تكون كلمة أساسية مثل class ، for ، return ، global ، pass ، or lift. [3]
بمجرد إنشائها ، يمكن استخدامها لإنشاء مثيلات بإدخالات تشبه القاموس:

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)

_من _ [3]

موجه التعليمات البرمجية / التحدي

يُعد الاستخدام الجيد للصفحات المسماة تسهيل استيعاب البيانات ، مثل تصدير ملف csv من قاعدة بيانات. في التعليمات البرمجية التالية ، أصلح استيراد ملف CSV هذا باستخدام tuple.

كود محدد مسبقا

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!

_ مستمد من _ [4]

_note_: ما سبق يستخدم ملفًا فعليًا ، ولكن يمكننا استبدال الأسطر with ... readCSV بشيء مثل:
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!

الدرس 2:

عنوان

مسمى

الوصف / الشرح / الدرس

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

تسهل طريقة NamedTuples تسمى __make_ إنشاء مثيلات داخل دالة مكرر ، مما يجعل المشكلة من الدرس السابق أكثر إيجازًا.
يستخدم هذا مثل:

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

موجه التعليمات البرمجية / التحدي

نحن نراجع الدرس السابق ونراجع الكود. لقد شارفت على الانتهاء ، لكن المهمة لم تنته بعد. لراحتك ، تتم طباعة بعض السجلات حيث يجب معالجة السجل. تذكر أننا بحاجة إلى إنشاء سجل للموظفين وتمريره إلى وظيفة في مكان آخر في الكود ، مثل:

        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)

ربما يمكننا أيضًا استخدام دروس سريعة توضح:

  • n = NamedTuple(**Dictionary)
  • استخدام ._fields لعمل نماذج بديلة: TwoD = namedtuple('TwoD', 'x y') => ThreeD = namedtuple('ThreeD', TWo._fields + ('z',))
  • تغطية حالات الاستخدام الأساسية: استيعاب البيانات (مثل csv) ، ومعاملات قاعدة البيانات ، ومعاملات الشبكة ، وتسهيل POJOs (أو .. هل POPOs شيء في Python؟ lol)

فيما يلي باقي تحديات الرياضيات للمبتدئين:

__Title: __ إضافة بايثون

__الوصف / الشرح / الدرس: __

في بايثون ، العدد الصحيح (int) هو واحد من 3 أنواع رقمية مميزة.
في هذا التمرين ، ستجمع عددين صحيحين باستخدام عامل الجمع (+).

>>> 2 + 2
4

__Code موجه / تحدي: __

غيّر الصفر حتى يصبح المجموع 20.

__ رمز معرف مسبقًا: __

total = 10 + 0

__المحلول:__

total = 10 + 10

__الاختبارات: __

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

__عنوان:__
احسب حاصل القسمة والباقي باستخدام دالة divmod ().

__الوصف / الشرح / الدرس: __

يأخذ Divmod رقمين (غير مركبين) كوسائط ويعيد زوجًا من الأرقام يتكون من حاصل القسمة والباقي عند استخدام القسمة الصحيحة.
بالنسبة للأعداد الصحيحة ، تكون النتيجة هي نفسها (a // b، a٪ b).

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

__Code موجه / تحدي: __

في هذا التمرين ، يتم تحديد المتغيرين a و b من أجلك.
حدد متغيرًا باسم النتيجة التي تستدعي دالة divmod على المتغيرين a و b (بهذا الترتيب).

__ رمز معرف مسبقًا: __

a = 11
b = 3

__المحلول:__

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

__الاختبارات: __

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

__Title: __ أسس بايثون

__الوصف / الشرح / الدرس: __

تستخدم Python عامل النجمة المزدوج (**) للتعامل مع الأس.
الرقم قبل العلامات النجمية هو الأساس ، والرقم الذي يليه هو الأس.
تتيح لك Python أيضًا استخدام الدالة المضمنة pow (x ، y) ، والتي تمنحك x إلى قوة y.

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

__Code موجه / تحدي: __

في وحدة التحكم ، يتم إعطاؤك متغيرين ، أ وب.
باستخدام أي من الطريقتين الموصوفتين في هذا الدرس ، حدد متغيرًا باسم power يساوي a أس b.

__ رمز معرف مسبقًا: __

a = 3
b = 4

__المحلول:__

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

__الاختبارات: __

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

__Title: __ تقسيم تعويم بايثون

__الوصف / الشرح / الدرس: __

يميز Python 3 بين القسمة الصحيحة (الأرضية) والقسمة العائمة (الحقيقية).
تستخدم Python شرطة مائلة واحدة (/) عامل لتقسيم التعويم.
عند استخدام القسمة العائمة ، حتى إذا كان حاصل القسمة (النتيجة) عددًا صحيحًا مثل 1 أو 2 ، فسيتم إرجاع رقم فاصلة عائمة بدلاً من int.

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

__Code موجه / تحدي: __

عند تشغيل التعليمات البرمجية الموجودة ، سيكون للمتغير المسمى الحاصل قيمة 1.0.
غيّر الرقم الثاني (المقام) بحيث يكون للحاصل قيمة 2.5.

__ رمز معرف مسبقًا: __

quotient = 5 / 5

__المحلول:__

quotient = 5 / 2

__الاختبارات: __

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

__Title: __ قسم Python Integer

__الوصف / الشرح / الدرس: __

يميز Python 3 بين القسمة الصحيحة (الأرضية) والقسمة العائمة (الحقيقية).
تستخدم Python شرطة مائلة مزدوجة (//) عامل التشغيل لقسمة عدد صحيح.
عند استخدام القسمة الصحيحة ، ستقرب بايثون خارج القسمة إلى أقرب عدد صحيح.

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

__Code موجه / تحدي: __

عند تشغيل التعليمات البرمجية الحالية ، سيكون للمتغير المسمى خارج القسمة قيمة 1.
قم بتغيير الرقم الثاني (المقام) بحيث يكون للحاصل قيمة 2.

__ رمز معرف مسبقًا: __

quotient = 5 // 5

__المحلول:__

quotient = 5 // 2

__الاختبارات: __

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

__Title: __ قيمة Python القصوى

__الوصف / الشرح / الدرس: __

تعرض الدالة max () أكبر عنصر في عنصر قابل للتكرار (مثل قائمة أو سلسلة) ، أو أكبر وسيطتين أو أكثر.
أثناء إعطاء متكرر كحجة ، يجب أن نتأكد من أن جميع العناصر الموجودة في العنصر القابل للتكرار من نفس النوع.
إذا كانت القيمة القابلة للتكرار فارغة ولم يتم توفير الإعداد الافتراضي ، فسيتم تشغيل ValueError.

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

__Code موجه / تحدي: __

يحتوي رمز البداية على قائمة بالأرقام المسماة ، حسناً ، الأرقام.
يتم تهيئة المتغير الأعلى إلى أرقام.
اجعل القيمة الأعلى تساوي أكبر رقم في الأرقام.

__ رمز معرف مسبقًا: __

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

__المحلول:__

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

__الاختبارات: __

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

__Title: __ الحد الأدنى لقيمة Python

__الوصف / الشرح / الدرس: __

تُرجع الدالة min () أصغر عنصر في العنصر القابل للتكرار (مثل قائمة أو سلسلة أحرف) ، أو أصغر وسيطتين أو أكثر.
أثناء إعطاء متكرر كحجة ، يجب أن نتأكد من أن جميع العناصر الموجودة في العنصر القابل للتكرار من نفس النوع.
إذا كانت القيمة القابلة للتكرار فارغة ولم يتم توفير الإعداد الافتراضي ، فسيتم تشغيل ValueError.

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

__Code موجه / تحدي: __

يحتوي رمز البداية على قائمة بالأحرف المسماة ، وكذلك الأحرف.
يتم تهيئة المتغير الأدنى إلى الأحرف.
اجعل قيمة الأدنى تساوي الحرف "الأصغر" (أبجديًا أولاً) بالأحرف.

__ رمز معرف مسبقًا: __

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

__المحلول:__

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

__الاختبارات: __

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

__العنوان: __ ضرب بايثون

__الوصف / الشرح / الدرس: __

تستخدم Python عامل الضرب بعلامة النجمة (*).

>>> 3 * 3
9

__Code موجه / تحدي: __

غيّر 0 بحيث يساوي هذا المنتج 80.

__ رمز معرف مسبقًا: __

product = 8 * 0

__المحلول:__

product = 8 * 10

__الاختبارات: __

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

__Title: __ بايثون المتبقي

__الوصف / الشرح / الدرس: __

ينتج عامل التشغيل٪ (modulo) الباقي من قسمة الوسيطة الأولى على الثانية.
ينتج عن عامل modulo دائمًا نتيجة بنفس علامة المعامل الثاني (أو صفر).

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

هناك طريقة بسيطة لتحديد ما إذا كان الرقم فرديًا أم زوجيًا وهي التحقق من الباقي عند قسمة هذا الرقم على 2.
بالنسبة للأعداد الفردية ، فإن الباقي هو 1.
بالنسبة للأرقام الزوجية ، فإن الباقي هو 0.

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

__Code موجه / تحدي: __

اضبط باقي المتغير على ما تبقى من 11 مقسومًا على 3 باستخدام عامل التشغيل modulo (٪).

__ رمز معرف مسبقًا: __

remainder = "Solution goes here"

__المحلول:__

remainder = 11 % 3

__الاختبارات: __

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

__Title: __ تقريب بايثون

__الوصف / الشرح / الدرس: __

تعرض الدالة round (رقم ، n-digits) رقمًا محددًا مقربًا إلى دقة n من الأرقام بعد الفاصلة العشرية.
إذا تم حذف n-digits أو كانت None ، فإنها تُرجع أقرب عدد صحيح لمدخلها.
القيمة المعادة هي عدد صحيح إذا تم استدعاؤها باستخدام وسيطة واحدة ، وإلا فهي من نفس نوع الرقم المحدد.

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

__Code موجه / تحدي: __

يحتوي المتغير long_pi على عدد كبير جدًا من الأرقام بعد المكان العشري.
قم بإنشاء متغير باسم shorter_pi يمكننا استخدامه بدلاً من ذلك.
استخدم الدالة round () لعرض أول رقمين فقط بعد الفاصلة العشرية ، وقم بتعيين هذه القيمة إلى shorter_pi.

__ رمز معرف مسبقًا: __

longer_pi = 3.14159265358979323846

__المحلول:__

longer_pi = 3.14159265358979323846
shorter_pi = round(longer_pi, 2)

__الاختبارات: __

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

__Title: __ جذر مربع بايثون

__الوصف / الشرح / الدرس: __

الدالة math.sqrt () هي جزء من وحدة الرياضيات في بايثون ، وهي متاحة دائمًا ولكن يجب استيرادها.
تعرض Math.sqrt (x) الجذر التربيعي لـ x كرقم فاصلة عائمة.

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

__Code موجه / تحدي: __

يتم تعريف المتغير square_root بالرقم 81.
غيّر square_root بحيث يساوي الجذر التربيعي لـ 81.
تم استيراد وحدة الرياضيات من أجلك.

__ رمز معرف مسبقًا: __

import math
square_root = 81

__المحلول:___

import math
square_root = math.sqrt(81)

__الاختبارات: __

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

__Title: __ طرح بايثون

__الوصف / الشرح / الدرس: __

في بايثون ، العدد الصحيح (int) هو واحد من 3 أنواع رقمية مميزة.
في هذا التمرين ، ستطرح عددين صحيحين باستخدام عامل الطرح (-).

>>> 2 - 1
1

__Code موجه / تحدي: __

غيّر 0 بحيث يساوي هذا الإجمالي 10.

__ رمز معرف مسبقًا: __

total = 20 - 0

__المحلول:__

total = 20 - 10

__الاختبارات: __

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

__Title: __ Python Sum

__الوصف / الشرح / الدرس: __

يضيف مجموع الوظيفة (القابل للتكرار) جميع العناصر في Python القابلة للتكرار (قائمة ، مجموعة ، وما إلى ذلك) من اليسار إلى اليمين ويعيد الإجمالي.
هناك وسيطة ثانية اختيارية ، وهي start ، والتي يتم تعيينها افتراضيًا على 0 وتتم إضافتها إلى الإجمالي.
عادةً ما تكون العناصر القابلة للتكرار عبارة عن أرقام ، ولا يُسمح بأن تكون قيمة البداية سلسلة.

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

__Code موجه / تحدي: __

هناك نوعان من قوائم الأرقام.
ابحث عن مجموع كل العناصر في كلتا القائمتين وقم بتعيين هذه القيمة إلى متغير اسمه إجمالي.

__ رمز معرف مسبقًا: __

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

__المحلول:__

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

__الاختبارات: __

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

أعتقد أن هذا يغطي جميع الدروس المدرجة في قسم الأساسيات / الرياضيات.
يرجى إعلامي إذا كنت تريد إضافة المزيد.
أيضًا ، لا تتردد في إجراء تعديلات وتغييرات واقتراحات وما إلى ذلك.
لدي جميع الدروس التي نشرتها للتو في ملفات .py و .md في:
https://github.com/bgroveben/FCC_Python.
لقد قمت أيضًا بإعداد REPL Classroom على:
https://repl.it/community/classrooms/18388.

يرجى ملاحظة - نحن بصدد نقل مناقشة تحديات ترميز Python إلى هذا المستودع الجديد: https://github.com/freeCodeCamp/python-coding-challenges/issues

النشر هنا كمرجع:
أعتقد أن Max و Min قد يرغبان في كليهما:

  1. استخدم الأرقام للتوضيح - قد لا يعرف المستخدمون كيف أن الحرف هو عدد صحيح
  2. تأكد من استخدام مثيلات متعددة لرقم واحد - للقيادة حقًا في السلوك
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات