Freecodecamp: 将来のPythonカリキュラム[ディスカッション]

作成日 2017年04月25日  ·  56コメント  ·  ソース: freeCodeCamp/freeCodeCamp

Pythonカリキュラム

この号は、将来のFCCPythonカリキュラムを計画および開発するためのメインスレッドになります。

REPL.it Classroomの統合に関するディスカッションについては、代わりにhttps://github.com/freeCodeCamp/freeCodeCamp/issues/14736にアクセスして

現在、iframeRepl.itウィジェットで検証可能なPythonテストスイートの実行に取り組んでいます。 それが機能するようになったら、このスレッドで定義されているレイアウトされたカリキュラムの実装を開始します。 FCC Pythonカリキュラムのこの部分の開発に興味がある場合は、Gitterについて自分自身(Ethan Arrowood)にメッセージを送るか、以下にコメントしてください。

バージョン3.6ですべてのPythonチャレンジを書くことに注意してください



FCC Pythonカリキュラムの現在の構造は、初級セクション、中級セクション、および特別トピックセクションです。

初心者セクション:

  • [] Pythonの紹介
  • []出力

    • 印刷

    • エスケープ文字

    • 入力

  • []データ型

    • 整数、フロート

    • 文字列

    • タプル

    • リスト

    • セット

    • 辞書

  • []演算子

    • +、-、、 /、%、*

    • <、>、<=、> =、==、!=

    • =

    • True、False、および、または、not

    • で、ではなく

    • です、ありません

  • [x]数学-@ bgroveben

    • 足し算、引き算、掛け算、割り算

    • パワー、sqrt()、abs()、round()、sum()、max()、min()

  • []変数
  • []条件付き

    • if、elif、else

  • []ループ

    • while、for(範囲内)、for(リスト内)、for(文字列内)

  • [ ] 関数
  • [ ] クラス

中間セクション:

  • []ファイルI / O
  • []イテレータとジェネレータ
  • [x]ラムダ-@ robbiemu
  • []条件付き
  • [] OOP
  • []モジュール、ライブラリ、パッケージ
  • []ファイルとエラー処理
  • []高度なオブジェクトとデータ型
  • []印刷フォーマット
  • []リスト内包
  • []デコレータ

特別トピックセクション:

  • []機械学習
  • []ゲーム開発
  • []ウェブスクレイピング(BeautifulSoup)
  • [] GIS(リーフレット/フォリウム)
  • [] Flask / Django(両方ではなく一方に焦点を当てた方がよい)
  • []データ分析(パンダ/ナンピー)
  • []データの視覚化(ボケ)
  • [] GUI(tkinter)
  • []ジオコーディング(geopy)
  • [] Natural Language Toolkit(NLTK)

セクションレッスンのアイデアがありますか?

以下にコメントし、追加するセクションとその理由を指定してください。

レッスンのカリキュラムを開発してみませんか?

次の詳細の下にコメントしてください。

  • 題名
  • 説明/説明/レッスン
  • コードプロンプト/チャレンジ
  • 事前定義されたコード
  • 解決
  • テスト

既存のレッスンに変更を加えたいですか?

特定の変更を行う理由の詳細な説明を更新に提供します。



近日公開

-

Pythonチャレンジを提案する方法

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

Pythonチャレンジを提案しますか?

learn

最も参考になるコメント

こんにちは、私はRepl.itの創設者/最高経営責任者です。 FCCは私たちの心の近くにあり、大切な存在です。私たちはここでサポートできるように、できることは何でもします。 このためにRepl.itクラスルームを採用する際の主なハードルは何ですか?

全てのコメント56件

追加できるものは次のとおりです::
初心者

  • 条件付き

中級:

  • イテレータとジェネレータ
  • ラムダ
  • 条件付き
  • OOP
  • モジュール、ライブラリ、パッケージ
  • ファイルとエラー処理
  • 高度なオブジェクトとデータ型
  • 印刷フォーマット

上級:

  • ウェブスクレイピング(BeautifulSoup)
  • GIS(リーフレット/フォリウム)
  • Flask / Django(私はDjangoにもっと傾くでしょう)
  • データ分析(パンダ/ナンピー)
  • データの視覚化(ボケ)
  • GUI(tkinter)
  • ジオコーディング(geopy)

@mstellalunaお勧めありがとうございます。 初級条件セクションと中級条件セクションの違いは何ですか?

@ Ethan-Arrowoodにとって、基本は最小限の知識(if、else、for、which)である必要があります。 中間体の「条件付き」のエントリは、ユーザー入力または3値ステートメントに基づく条件付きです。印刷フォーマットの場合も同じです。基本は単純な印刷ステートメントですが、中間体では変数%sを使用して印刷ステートメントを導入できます。など

Repl.itには、カスタム教室を作成するための新しい領域があります。 指示に従って課題を作成できます。

Repl.it教室
https://repl.it/site/classrooms

コミュニティ教室のリスト
https://repl.it/community

基本、中級、および高度なアルゴリズムセクションを追加することをお勧めします(FCCフロントエンドカリキュラムのJavaScriptと同様)。

与えられたFCC-Python-Variable-Challengeの例を見てきましたが、チャレンジには少しの「前提条件」の知識が必要であることに気づきました。 まるでキャンピングカーが以前に変数に紹介されたかのように。

変数チャレンジの説明/説明は、変数が何であるかを説明していません。 JavaScriptのDeclareJavaScript Variablesチャレンジとは異なり、変数とは何かについて少し紹介します。

これは単なる例ですが、念のために言っておきますが、キャンパーはPythonカリキュラムの作成中にJavaScriptカリキュラムをすでに完了していると想定しますか?

@jamesperrinはい、調査しましたが、ユーザーをFCCのサイトに留めようとしているため、課題を組み込む必要があります。 さらに、ReplClassroomsのユニットテストの結果にアクセスする方法はありません。

@ U-waysうんそれは私の間違いだった。 目標は、これが独立したカリキュラムになることです。そのため、実際の説明ははるかに詳細になります(JSバージョンのように)。 これを強調していただきありがとうございます:)

@AnikaErcegこれらは素晴らしい練習セクションになります。 間違いなくそれを覚えておくでしょう。 ありがとうございました!

@ Ethan-Arrowood Natural LanguageToolkitを含めることをお勧めします。

中間にリスト内包表記を追加しました

高度なデコレータはどうですか? ファイル処理中にコンテキストマネージャーが表示されると思いますか?

@ t3h2masデコレータを中間に配置しました。

for (in list)を追加した場合、おそらくfor (in string)も追加できますか?
また、 in演算子の紹介も良いでしょう( forループ:smiley:だけで使用する必要がないことを発見したとき、私の生活が楽になったことがわかりました)。

@AnikaErceg良い提案。 完了。 私が付け加えたのは、そうではありません。

@ginoskotheonループの下にfor (in string)を追加するのを忘れましたか、それを導入しても意味がありませんか? :スマイリー:

私はPythonを母国語とする開発者です...私はすでに地元のFCCの章を手伝っていますが、主催者は新しいカリキュラムを手伝いたいと提案しました。 貢献を始める方法が100%わからないのですが、絶対にやりたいと思います。 私はPythonコミュニティでもローカルでも全体でも非常に活発に活動しているので、必要なときに多くの知識のある目を得ることができます。

私の最初の提案:

  • []すべての例をPEP8に準拠させる
  • []ブール値のレッスンは、「truthy」および「falsy」の値とともに「datatypes」に含める必要があります
  • []標準ライブラリの一部をどこかに含める必要があります( itertoolscollections
  • []いくつかの基本的なライブラリを含めることができます( requestsscrapyなど)
  • []「出力」で「エスケープシーケンス」が何を意味するのかわかりませんが、 %sスタイルの文字列をf.format()スタイルの文字列を教えるだけです。
  • []ループセクションでは、 rangelist 、および 'string'がすべて異なるように言及されていますが、Pythonではすべて反復可能であるため、同じものでループすることができますキーワード。 たぶん、それは「イテレータとジェネレータ」セクションで触れることができます。

    • [] enumerate()

  • []コンテキストマネージャーはどこかで言及されるべきです。
  • [] asyncio高度なセクションがある可能性があります
  • []伝統的に、 PEP 20は、いくつかのspamおよびeggs例とともに、最初のどこかで教えられています。
  • []テスト
  • [] virtualenvs
  • []インストール
  • []コメント
    このプロジェクトをできる限りお手伝いさせていただきます。 私はかなり前からこのようなものが必要だと考えていました。

@cldershemたくさんの素晴らしい提案をありがとう! あなたの経験では、あなたができる最善の貢献は、レッスン/チャレンジを自分で書くことです。 あなたが書くことに興味があるものを教えてください😄

@cldershem

貢献を始める方法が100%わからないのですが、絶対にやりたいと思います。

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

あなたを正しい方向に向けるかもしれません。

たぶん@ Ethan-ArrowoodはGithubのコメントからも投稿を受け付けますか?

@ t3h2masはい、一番上のレッスン/チャレンジで言ったように、このスレッドでコメントとして送信できます😄

@cldershemあなたが助けることができるもう一つの方法は、実際にテストできる(unittestで)ブラウザ内チャレンジを作成する良い方法を知っているかどうかです。 REPL.itからcodeMirror、Skulptまでのあらゆる種類のオプションを検討しています。

@cldershemおそらく「エスケープ文字」を書く必要があります。 それらは '\ n'、 '\ t'などのようなものです。

そして、私はそれらが反復可能であることを知っていますが、私は個々の一口サイズのレッスンの観点から物事を分割し始めています。

ちなみに、すべての提案とすべての助けに感謝します。 私は週末にサンプルレッスン/チャレンジに取り組むことを計画しています、そしてうまくいけばそれは他の人のための一種のテンプレートになることができます。 Free Code Campチャレンジの仕組みと同じように機能するレッスン/チャレンジに取り組みたい場合は、コードを投稿してください。 私はそれを見たいです。

@ Ethan-Arrowood @ginoskotheon @cldershem
また、FCC-Pythonコースのレッスンと課題の作成を支援したいと思います。
以前のコメントから、Repl.it Classroomsは最良の選択ではないことがわかりましたが、そこでレッスン(タイトル、説明、テストなど)に取り掛かることができます。 プラットフォーム/フレームワークが決まったら、いつでもコードを変更して移動できます。
私はあなたがここで見つけることができるいくつかのサンプル演習を書きました; それらを見ることができるはずですが、それらをインポートするにはサインインする必要があり、内部を見て変更する必要があります。
コメント、批評、レッスン自体の変更をお気軽にどうぞ。より適切なプラットフォーム/フレームワークが決定されたらお知らせください。
それまでの間、数学から始めて、他に必要なことは何でも始めて、上記の初心者レッスンに取り組むことができます。

こんにちは、私はRepl.itの創設者/最高経営責任者です。 FCCは私たちの心の近くにあり、大切な存在です。私たちはここでサポートできるように、できることは何でもします。 このためにRepl.itクラスルームを採用する際の主なハードルは何ですか?

@amasadこんにちは! ここにお越しいただきありがとうございます😄
Repl.itをFCCPythonコースに採用する際に直面している主なハードルは、Repl.itClassroomの単体テストとのインターフェースです。 単体テストで独立したファイルを実行できるRepl.itClassroomの構造が気に入っています。 ただし、ユーザーがチャレンジを完了した(すべての単体テストに合格した)ことを確認する方法を理解することはできません。 もちろん、この動作はRepl.itに組み込まれていますが、現在のFreeCodeCampの感触を維持するために、ユーザーが完了したら、自動的に次のチャレンジに進む(またはそうするように促す)ことができるようにしたいと思います。現在の課題(つまり、すべてのユニットテストに合格する)。

これをどのように実装できるかについてのアイデアはありますか? FCCはJavaScriptで記述されているため、あらゆる種類のWebAPIまたはnpmモジュールが非常にうまく機能します。

視聴者の多くがJavaScriptのバックグラウンドから来ていると思われる場合は、違いについての入門書が役立つと思います。 例えば

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

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

print(dict["a"])

もう1つの例は、forループを使用して辞書または配列をループすることです。 これはいつも私をつまずかせます。

_タイトル_ラムダの紹介

_説明/説明/レッスン_
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キーワードの代わりに、 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_

このTkinterGUIインターフェースでは、関数を_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_

この使用法のもう1つの重要な機能は、コードも短くなることです。つまり、より大きなソリューションの一部としてツールを探すときに、プログラマーがより簡単に利用できるようになります。

_コードプロンプト/チャレンジ_
上記の主要な機能を備えたラムダ式を記述します。 使用中のすべてのコードを同じ場所に移動することにより、コードを読みやすくします。 その結果、より短く、より自然なコードになります。

_事前定義されたコード_

# 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に取り組んでおり、詳細がわかり次第、このスレッドを更新します。 今のところ良い仕事😄

これは、このスレッドの冒頭にリストされている初心者-数学セクションのコードの課題の1つです。

_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

_コードプロンプト/チャレンジ_-
変数absolute_valueは-42です。
-42の絶対値と等しくなるようにabsolute_valueを変更します。

_事前定義されたコード_-

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 よくできました!

@ Ethan-Arrowoodありがとうございます! 上記の他の基本/数学の課題についてのレッスンも書いています。 よろしければ、このスレッドにそれぞれを投稿できます。 また、数学の基礎レッスンにround()、sum()、max()、min()を含めるのも良い考えだと思います。これらは便利です。

@bgroveben完了としてマークします。はい、お願いします。 それぞれのチャレンジを別々のコメントで行ってください。 変更などを参照する方が簡単です。 あなたの貢献に感謝します!

@イーサン-アロウッド

@amasadこんにちは! ここにお越しいただきありがとうございます😄

ここに来てよかった💃

Repl.itをFCCPythonコースに採用する際に直面している主なハードルは、Repl.itClassroomの単体テストとのインターフェースです。 単体テストで独立したファイルを実行できるRepl.itClassroomの構造が気に入っています。 ただし、ユーザーがチャレンジを完了した(すべての単体テストに合格した)ことを確認する方法を理解することはできません。 もちろん、この動作はRepl.itに組み込まれていますが、現在のFreeCodeCampの感触を維持するために、ユーザーが完了したら、自動的に次のチャレンジに進む(またはそうするように促す)ことができるようにしたいと思います。現在の課題(つまり、すべてのユニットテストに合格する)。

これをどのように実装できるかについてのアイデアはありますか? FCCはJavaScriptで記述されているため、あらゆる種類のWebAPIまたはnpmモジュールが非常にうまく機能します。

最も簡単なのは、それを焼き上げることです。「自動進行」などと言うことを教師側に設定します。 (Webhookなどを追加することに反対しているわけではありませんが、複雑さを軽減するためです)それは機能しますか?

@amasadは「自動進行」機能を使用して、Repl.it教室でFreeCodeCampをエミュレートすることはできますが、FCCの感触にとって非常に重要なFCC側のユーザーの進行状況を追跡することはできません。

「教室」のデータをGET / POSTできる機能についてはどうでしょうか。 このようにして、次のようなことができます。

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のいくつかの行(Teachersポータルを介して定義できます)を実行して、教室をFCCと通信しますか?

Pythonだけでなく他の言語でもREPL教室を使用できるようになることを望んでいます。 FCC Pythonカリキュラムが正常に稼働したら、JavaやC ++などの言語(または文字通りREPLが使用できる任意の言語)の実装に進みます。

これと他の主要なFCC貢献者について、 @ QuincyLarsonの意見を

みなさん、こんにちは。コメントや提案をありがとうございます。

@amasadここであなたの考えやアイデアを共有するために時間を

手始めに、このカリキュラムスレッドの代わりに別のディスカッションでこれを取り上げて、統合自体との関連性を高めることができれば素晴らしいと思います。

@ Ethan-Arrowoodイニシアチブの素晴らしい仕事。 頑張ってくれてありがとう。

@amasad @QuincyLarson私はREPLクラスルームディスカッションをこの問題スレッドに正式に移動しました( @raisedadeadの推奨に従って)。 https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

cldershemによるコメントのフォローアップ(8日前にコメント)、これがcollectionsコメントです-

題名

名前付きtuples

説明/説明/レッスン

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/

タプルは数学で一般的な概念です。 これは、要素の有限順序リストと見なされます。[1] Pythonでは、これらは機能的に辞書に似ており、キーは事前に定義されています。 Namedtuplesを使用すると、あらゆる用途にすばやくプロパティツリーを提供できます。たとえば、アプリで靴下を処理する必要があり、すべての靴下にサイズと価格がある場合は、辞書{size: _size_, price: _price_}に近い2つのフィールドを持つタプルが役立ちます。 。 これらのフィールドを持つタプルを取得するには、フィールドをcollections.namedtupleファクトリ関数に渡します。[2]
collections.namedtuple(Socks, ['size', 'price'])
便宜上、特にプレーンテキストソースからの情報を処理する場合、フィールド名は配列、またはコンマ区切りやスペース区切りの値を持つ単一の文字列にすることができます。[3]
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
アンダースコアで始まる名前を除いて、任意の有効なPython識別子を_fieldname_に使用できます。 有効な識別子は、文字、数字、およびアンダースコアで構成されますが、数字またはアンダースコアで始まらず、class、for、return、global、pass、raiseなどのキーワードにすることはできません。[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)

_from_ [3]

コードプロンプト/チャレンジ

名前付きタプルの適切な使用法は、データベースからのcsvエクスポートなど、データの取り込みを容易にすることです。 次のコードで、このCSVインポートをタプルで修正します。

事前定義されたコード

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:

題名

namedtuples._make

説明/説明/レッスン

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

__make_と呼ばれるNamedTuplesのメソッドは、イテレータ関数内でのインスタンスの生成を容易にします。これにより、前のレッスンの問題がさらに簡潔になります。
これは次のように使用されます:

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

コードプロンプト/チャレンジ

前のレッスンに戻り、コードを改訂します。 もうすぐですが、仕事は未完成です。 便宜上、一部のレコードは、レコードを処理する必要がある場所に印刷されます。 EmployeeRecordを作成し、それをコード内の他の場所の関数に渡す必要があることを忘れないでください。

        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など)、データベーストランザクション、ネットワークトランザクション、POJOの促進(または..POPOはPythonのものですか?笑)

初心者の数学の残りの課題は次のとおりです。

__タイトル:__ Pythonの追加

__説明/説明/レッスン:__

Pythonでは、整数(int)は3つの異なる数値タイプの1つです。
この演習では、プラス(+)演算子を使用して2つの整数を追加します。

>>> 2 + 2
4

__コードプロンプト/チャレンジ:__

合計が20になるように0を変更します。

__事前定義されたコード:__

total = 10 + 0

__解決:__

total = 10 + 10

__テスト:__

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

__題名:__
divmod()関数を使用して商と剰余を計算します。

__説明/説明/レッスン:__

Divmodは、引数として2つの(複素数ではない)数値を取り、整数除算を使用する場合、商と剰余で構成される数値のペアを返します。
整数の場合、結果は(a // b、a%b)と同じです。

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

__コードプロンプト/チャレンジ:__

この演習では、変数aとbを定義します。
変数aとbでdivmod関数を(この順序で)呼び出すresultという名前の変数を定義します。

__事前定義されたコード:__

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))

__タイトル:__ Python指数

__説明/説明/レッスン:__

Pythonは、べき乗を処理するために二重アスタリスク(**)演算子を使用します。
アスタリスクの前の数字がベースで、後の数字が指数です。
Pythonでは、組み込み関数pow(x、y)を使用することもできます。これにより、xがyの累乗になります。

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

__コードプロンプト/チャレンジ:__

コンソールでは、aとbの2つの変数が与えられます。
このレッスンで説明するいずれかの方法を使用して、aとbの累乗に等しいpowerという名前の変数を定義します。

__事前定義されたコード:__

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)

__タイトル:__ Pythonフロート部門

__説明/説明/レッスン:__

Python 3は、整数(床)除算と浮動小数点(真)除算を区別します。
Pythonは、浮動小数点除算に単一のスラッシュ(/)演算子を使用します。
浮動小数点除算を使用する場合、商(結果)が1や2のような整数であっても、intではなく浮動小数点数が返されます。

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

__コードプロンプト/チャレンジ:__

既存のコードを実行すると、quotientという名前の変数の値は1.0になります。
商の値が2.5になるように、2番目の数値(分母)を変更します。

__事前定義されたコード:__

quotient = 5 / 5

__解決:__

quotient = 5 / 2

__テスト:__

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

__タイトル:__ Python整数除算

__説明/説明/レッスン:__

Python 3は、整数(床)除算と浮動小数点(真)除算を区別します。
Pythonは、整数の除算にダブルスラッシュ(//)演算子を使用します。
整数除算を使用する場合、Pythonは商を最も近い整数に切り捨てます。

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

__コードプロンプト/チャレンジ:__

既存のコードを実行すると、quotientという名前の変数の値は1になります。
商の値が2になるように、2番目の数値(分母)を変更します。

__事前定義されたコード:__

quotient = 5 // 5

__解決:__

quotient = 5 // 2

__テスト:__

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

__タイトル:__ Pythonの最大値

__説明/説明/レッスン:__

関数max()は、反復可能オブジェクト内の最大の項目(リストや文字列など)、または2つ以上の引数の最大のものを返します。
iterableを引数として指定するときは、iterable内のすべての要素が同じタイプであることを確認する必要があります。
iterableが空で、デフォルトが指定されていない場合、ValueErrorが発生します。

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

__コードプロンプト/チャレンジ:__

スターターコードには、numbersという名前の番号のリストがあります。
変数highestは数値に初期化されます。
最高の値を数字の最大数と等しくします。

__事前定義されたコード:__

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)

__タイトル:__ Pythonの最小値

__説明/説明/レッスン:__

関数min()は、反復可能オブジェクト内の最小の項目(リストや文字列など)、または2つ以上の引数の最小のものを返します。
iterableを引数として指定するときは、iterable内のすべての要素が同じタイプであることを確認する必要があります。
iterableが空で、デフォルトが指定されていない場合、ValueErrorが発生します。

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

__コードプロンプト/チャレンジ:__

スターターコードには、文字という名前の文字のリストがあります。
変数lowestは文字に初期化されます。
最小の値を、文字の「最小」(アルファベット順で最初)の文字と等しくします。

__事前定義されたコード:__

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乗算

__説明/説明/レッスン:__

Pythonは、乗算にアスタリスク(*)演算子を使用します。

>>> 3 * 3
9

__コードプロンプト/チャレンジ:__

製品が80になるように0を変更します。

__事前定義されたコード:__

product = 8 * 0

__解決:__

product = 8 * 10

__テスト:__

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

__タイトル:__ Pythonの残り

__説明/説明/レッスン:__

%(モジュロ)演算子は、最初の引数を2番目の引数で除算した余りを返します。
モジュロ演算子は常に、第2オペランドと同じ符号(またはゼロ)の結果を生成します。

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

数値が奇数か偶数かを判断する簡単な方法は、その数値を2で割ったときの余りを確認することです。
奇数の場合、余りは1です。
偶数の場合、余りは0です。

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

__コードプロンプト/チャレンジ:__

モジュロ(%)演算子を使用して、11の余りを3で割った値に等しい変数の余りを設定します。

__事前定義されたコード:__

remainder = "Solution goes here"

__解決:__

remainder = 11 % 3

__テスト:__

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

__タイトル:__ Pythonの丸め

__説明/説明/レッスン:__

関数round(number、n-digits)は、小数点以下のn桁の精度に丸められた特定の数値を返します。
n桁が省略されているか、Noneの場合、入力に最も近い整数が返されます。
1つの引数で呼び出された場合、戻り値は整数です。それ以外の場合は、指定された数値と同じタイプです。

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

__コードプロンプト/チャレンジ:__

変数longer_piの小数点以下の桁数が多すぎます。
代わりに使用できるshorter_piという名前の変数を作成します。
round()関数を使用して、小数点以下の最初の2桁だけを表示し、その値を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)

__タイトル:__ Python平方根

__説明/説明/レッスン:__

math.sqrt()関数は、Pythonの数学モジュールの一部です。このモジュールは常に使用できますが、インポートする必要があります。
Math.sqrt(x)は、xの平方根を浮動小数点数として返します。

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

__コードプロンプト/チャレンジ:__

変数square_rootは、数値81として定義されています。
平方根が81になるようにsquare_rootを変更します。
数学モジュールがインポートされました。

__事前定義されたコード:__

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)

__タイトル:__ Python減算

__説明/説明/レッスン:__

Pythonでは、整数(int)は3つの異なる数値タイプの1つです。
この演習では、マイナス(-)演算子を使用して2つの整数を減算します。

>>> 2 - 1
1

__コードプロンプト/チャレンジ:__

合計が10になるように0を変更します。

__事前定義されたコード:__

total = 20 - 0

__解決:__

total = 20 - 10

__テスト:__

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

__タイトル:__ Python合計

__説明/説明/レッスン:__

関数sum(iterable)は、Python iterableのすべての項目(リスト、タプルなど)を左から右に追加し、合計を返します。
オプションの2番目の引数startがあり、デフォルトは0で、合計に追加されます。
iterableの項目は通常数値であり、開始値を文字列にすることはできません。

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

__コードプロンプト/チャレンジ:__

番号のリストは2つあります。
両方のリストのすべての項目の合計を見つけて、その値をtotalという名前の変数に割り当てます。

__事前定義されたコード:__

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クラスルームを次の場所に設置しました。
https://repl.it/community/classrooms/18388。

注意してください-Pythonコーディングの課題に関する議論をこの新しいリポジトリに移動しています: https

参考のためにここに投稿:
MaxとMinは両方をしたいと思うかもしれません:

  1. わかりやすくするために数字を使用してください-ユーザーは文字が整数である方法を知らない場合があります
  2. 必ず1つの番号の複数のインスタンスを使用してください-実際に動作を促進するために
このページは役に立ちましたか?
0 / 5 - 0 評価