1 つの記事で Python を使いこなす (30,000 ワードの詳細な説明!!!)

全文には合計 31554 ワード、18 個のディレクトリ、n 個のサブディレクトリがあります。

1 はじめに

記事を作るのは大変ですが、いいね、お気に入り、フォローしていただけるととても嬉しいです。

 この記事では多くの偉人のブログ投稿を参照しましたが、時間が限られていたため、1つずつまとめることはできませんでした。ここに感謝の意を表します

 記事内で明確に説明されていない点がある場合は、プライベートメッセージを送っていただければ、改善するために必ず教えてください。

この記事は特に初心者向けであり、Python をすぐにマスターするのに役立ちます。記事ではそれぞれの知識ポイントを初心者にもわかりやすい言葉で解説していきます。さて、これ以上話しても無駄です。学習の旅を始めましょう!

2. Python とは何ですか? Python を学習すると何の役に立つのですか? (流し読み)

2.1 Python の概要

Python は、ABC と呼ばれる言語の代替 として、オランダ数学コンピューターサイエンス研究所のGuido van Rossumによって1990 年代初頭に設計されました。 Python は効率的な高レベルのデータ構造を提供し、シンプルかつ効果的なオブジェクト指向プログラミングを可能にします。Python の構文と動的型付け、およびインタープリタ型言語の性質により、Python は、ほとんどのプラットフォームでのスクリプト作成と迅速なアプリケーション開発のためのプログラミング言語となっています。バージョンの継続的な更新と新しい言語機能の追加により、Python は徐々に使用されています。独立した大規模プロジェクト開発向け。   

Python はさまざまなプログラミング言語の中で初心者が学習するのに適しており、Pythonインタプリタは拡張が容易であり、C 言語またはC++ (または C を通じて呼び出すことができる他の言語) を使用して新しい関数やデータ型を拡張できます。Python は、カスタマイズ可能なソフトウェアの拡張プログラミング言語としても使用できます。Python の豊富な標準ライブラリは、各主要なシステム プラットフォームに適したソース コードまたはマシン コードを提供します。 

 2.2 Python の起源

  Python の前世は、その創始者である「カメおじさん」に由来します。1989 年、Guido van Rossum は、アムステルダムの退屈なクリスマスを終わらせるために新しいスクリプト インタプリタの開発を決意し、それ以来、Python とその創設者「Uncle Turtle」が世間の注目を集めるようになりました。彼は、Python と呼ばれるこの新しい言語が、C とシェルの間で包括的で、学習しやすく、使いやすく、スケーラブルな言語を作成するという彼の理想を満たすことを望んでいます。

グイド・ヴァン・ロッサムの写真_百度百科事典

  1991 年に、最初の Python コンパイラーが誕生しました。C言語をベースに実装されており、C言語のライブラリファイルを呼び出すことができます。継続的なバージョンと革新を経て、Python は非常にマイルストーンのノードに達しました。つまり、2004 年のバージョン 2.4 で最も人気のある WEB フレームワーク Django が誕生しました。6 年後、Python はバージョン 2.7 に発展しました。これは、これまでの 2.x バージョンの最新かつより広く使用されているバージョンです。

  バージョン 2.7 の誕生は、以前のバージョン 2.x の垂直置換ロジックとは異なり、バージョン 2.x とバージョン 3.x の間の橋渡しとして、バージョン 3.x の新機能を最大限に継承します。 2.x との互換性を維持しようとしながら。

  そのため、バージョン 2.7 よりも前にバージョン 3.x が提供されていましたが、2008 年のバージョン 3.0 から python3.x シリーズは急速に発展し、活発なバージョン更新が行われ、最新のバージョン 3.11 まで開発されました。現在の 3.x シリーズではバージョン 3.8 ~ 11 が主流で広く使用されており、以降の関連プログラムのデモはデフォルトですべてバージョン 3.11 に基づいています。

2.3 Python の利点

シンプルさ: Python はシンプルさの概念を表す言語です優れた Python プログラムを読むのは、英語を読んでいるような気分になります。これにより、言語自体を理解するのではなく、問題を解決することに集中できます。

学習が簡単: Python には非常にシンプルなドキュメントがあるため、Python を始めるのは非常に簡単です [8]   。

読みやすく維持しやすい: 明確で一貫したスタイル、強制インデント

多くの用途があります

高速化: Python の最下層は C 言語で書かれており、多くの標準ライブラリやサードパーティ ライブラリも C で書かれているため、非常に高速に実行されます。[7] 

無料かつオープンソース: Python は FLOSS (Free/Open Source Software) の 1 つです。ユーザーは、このソフトウェアのコピーを自由に配布し、そのソース コードを読み、変更を加え、新しいフリー ソフトウェアでその一部を使用することができます。FLOSS は、知識を共有するグループの概念に基づいています。

高級言語: Python でプログラムを作成する場合、プログラムで使用されるメモリの管理方法などの低レベルの詳細について心配する必要はありません。

移植性: オープン ソースの性質により、Python は多くのプラットフォームに移植されています (さまざまなプラットフォームで動作できるようにするための変更が加えられています)。これらのプラットフォームには、Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian 、および Linux ベースの Google の Android プラットフォーム。

解釈性: C や C++ などのコンパイル済み言語で書かれたプログラムは、ソース ファイル (C 言語または C++ 言語) からコンピュータで使用される言語 (バイナリ コード、つまり 0 と 1) に変換できます。このプロセスは、コンパイラとさまざまなフラグおよびオプションを通じて実行されます。

プログラムを実行すると、リンカ/再プリンタ ソフトウェアはプログラムをハード ドライブからメモリにコピーして実行します。Python で書かれたプログラムは、バイナリ コードにコンパイルする必要はありませんソース コードから直接プログラムを実行できます。

コンピューター内部では、Python インタープリターがソース コードをバイトコードと呼ばれる中間形式に変換し、その後コンピューターで使用される機械語に翻訳されて実行されます。これにより、Python の使用がはるかに簡単になります。また、Python プログラムの移植性も高まります。

オブジェクト指向: Python は手続き型プログラミングとオブジェクト指向プログラミングの両方をサポートします。「手続き指向」言語では、プログラムは手続きまたは再利用可能なコードである単なる関数から構築されます。「オブジェクト指向」言語では、プログラムはデータと機能を組み合わせたオブジェクトから構築されます。

Python は完全なオブジェクト指向言語です。関数、モジュール、数値、文字列はすべてオブジェクトです。また、継承、オーバーロード、派生、多重継承を完全にサポートしているため、ソース コードの再利用性を高めることができます。Python は、オーバーロードされた演算子と動的型付けをサポートしています。従来の関数型プログラミング言語であるLispと比較すると、Python は関数型設計に対して限定的なサポートしか提供しません。Haskell および Standard ML で実証済みの関数型プログラミング ツールを提供する 2 つの標準ライブラリ (functools、itertools) があります。

スケーラビリティと拡張性: コードの重要な部分を高速に実行する必要がある場合、または一部のアルゴリズムを公開したくない場合は、プログラムの一部を C または C++ で作成し、Python プログラムで使用できます。

Python 自体は拡張可能に設計されています。すべての機能が言語コアに統合されているわけではありません。Python は、プログラマーがC 言語C++ 、および Cythonを使用して拡張モジュールを簡単に作成できるように、豊富なAPIとツールを提供します。Python コンパイラー自体を、スクリプト言語を必要とする他のプログラムに統合することもできます。そのため、Python を「接着言語」として使用する人も多くいます。Python を使用して、他の言語で書かれたプログラムを統合し、カプセル化します。Google エンジンなど、Google 内の多くのプロジェクトは、C++ を使用して非常に高いパフォーマンス要件を持つパーツを作成し、Python または Java/Go を使用して対応するモジュールを呼び出します。「Python Technical Manual」の著者である Alex Martelli 氏は、「言うのは難しいですが、2004 年に Python はすでに Google 社内で使用されていました。Google は多くの Python 専門家を採用しましたが、その前にすでに Python を使用することを決定していました。」と述べています。可能な場合は Python を使用し、必要な場合は C++ を使用し、ハードウェアを制御する場合はC++を使用し、迅速な開発の場合は Python を使用します。」

埋め込み性: Python をC / C++プログラムに埋め込んで、プログラム ユーザーにスクリプト機能を提供できます。

豊富なライブラリ: Python の標準ライブラリは実に膨大です。正規表現、ドキュメント生成、単体テスト、スレッド、データベース、Web ブラウザ、CGI、FTP、電子メール、XML、XML-RPC、HTML、WAV ファイル、暗号化、GUI (グラフィカル ユーザー インターフェイス) など、さまざまなタスクに役立ちます。 )、Tk、およびその他のシステム関連の操作。これは、Python の「フル機能」の哲学と呼ばれます。標準ライブラリに加えて、wxPython、Twisted、Python イメージング ライブラリなど、他にも多くの高品質ライブラリがあります。

標準化されたコード: Python はコードを読みやすくするために強制インデントを使用します。Python で書かれたプログラムは、バイナリ コードにコンパイルする必要はありません。Python の作成者は、プログラミングの悪い習慣 (if ステートメントで右の次の行をインデントしないなど) がコンパイルできないように、非常に制限的な構文を設計しました。最も重要なものの 1 つは、Python のインデント規則です。他のほとんどの言語 (C など) との違いの 1 つは、モジュールの境界がこの行の各行の最初の文字の位置によって完全に決定されることです (一方、C 言語では、一対の中括弧を使用してモジュールの境界を明確に定義します)。モジュールの境界は文字の位置とは関係がありません)。Python は、プログラマにインデントを強制することにより (モジュールが使用される if、for、および関数の定義を含む)、プログラムをより明確で美しくします。

高度な動的プログラミング: Python は大まかに「スクリプト言語」(スクリプト言語) に分類されるかもしれませんが、実際にはZope 、Mnet、 BitTorrentなどの大規模なソフトウェア開発プロジェクトやGoogleなどで広く使用されています。Python の支持者は、Python を高水準動的プログラミング言語と呼ぶことを好みます。その理由は、「スクリプト言語」とは一般に、シェルスクリプト、VBScript、その他のプログラミング言語など、単純なプログラミング タスクのみを実行する言語を指すためです。単純なタスクのみを処理するため、Python と比較することはできませんが、Python は同等です。

科学計算を行うことには多くの利点があります。科学計算について話すとき、最初に名前が挙がるのは MATLAB かもしれません。代替できない MATLAB の一部の高度に専門的なツールボックスを除いて、MATLABの一般的な関数のほとんどは、Python 世界の対応する拡張ライブラリにあります。MATLAB と比較して、科学計算に Python を使用することには次の利点があります。

●まず、MATLABは商用ソフトウェアなので高価です。Python は完全に無料であり、多くのオープンソース科学計算ライブラリが Python 呼び出しインターフェイスを提供しています。ユーザーは、Python とその拡張ライブラリのほとんどを任意のコンピュータに無料でインストールできます。

●第二に、MATLABと比較して、Python は学習が容易で、より厳密なプログラミング言語です。これにより、ユーザーは読みやすく保守しやすいコードを作成できるようになります。

●最後に、MATLAB は主にエンジニアリングと科学コンピューティングに焦点を当てています。しかし、コンピューティング分野においても、ファイル管理、インターフェイス設計、ネットワーク通信など、さまざまなニーズが頻繁に発生します。Python には、さまざまな高度なタスクを簡単に実行できる豊富な拡張ライブラリがあり、開発者は Python を使用して、完全なアプリケーションに必要なさまざまな機能を実装できます。

2.4 Python の欠点

単一行ステートメントとコマンド ライン出力の問題: 多くの場合、import sys; for i in sys.path: print i のように、プログラムを 1 行で記述することはできません。Perl と awk にはこの制限がなく、シェルの下で簡単なプログラムを簡単に完成させることができ、Python のようにプログラムを .py ファイルに書き込む必要がありません。

初心者を混乱させる:独特の構文は制限とは言えないかもしれませんが、インデントを使用してステートメントの関係を区別する方法は、依然として多くの初心者に混乱をもたらしています。経験豊富な Python プログラマーでも罠に陥る可能性があります。

実行速度が遅い: C および C++ と比較して。Python 開発者は、未熟な最適化や重要でない最適化を避けようとします。コードの重要ではない部分を高速化するパッチは、通常、Python には組み込まれません。非常に多くの人が Python は遅いと考えています。ただし、80/20 ルールによれば、ほとんどのプログラムには高速性の要件はありません。実行速度が非常に高い状況では、Python 設計者は JIT テクノロジを使用するか、プログラムのこの部分をC / C++言語で書き直す傾向があります。利用可能な JIT テクノロジはPyPyです。

他の言語との違い

特定の問題を解決する最善の方法がある限り

これは、Tim Peters によって書かれた Python の格言 (The Zen of Python と呼ばれます) で表現されています。それを行うための明白な方法は 1 つ、できれば 1 つだけあるべきです。これは、Perl 言語 (同様の機能を持つ別の高水準動的言語) の TMTOWTDI (There's More Than One Way To Do It) の中心的な考え方とはまったく逆です。

Python の設計哲学は「エレガント」、「明確」、「シンプル」です。したがって、 「同じことを行うには常に複数の方法がある」というPerl の哲学は、Python 開発者にとって耐えられないことがよくあります。Python 開発者の哲学は、「1 つのことを 1 つの方法で、できれば 1 つの方法のみで実行する」です。Python 言語を設計する際、複数の選択肢に直面した場合、Python 開発者は通常、複雑な構文を拒否し、曖昧さがほとんどまたはまったくない明確な構文を選択します。この設計概念の違いにより、一般に Python ソース コードは Perl よりも読みやすく、大規模なソフトウェア開発をサポートできると考えられています。これらのガイドラインは Python モットーと呼ばれます。完全なリストを取得するには、Python インタープリター内で import this を実行します。

より高度な仮想マシン

Python が実行されると、まず.py ファイル内のソース コードがPython バイト コードにコンパイルされ、次に Python 仮想マシン (Python 仮想マシン) がこれらのコンパイルされたバイト コードを実行します。このメカニズムの基本的な考え方は Java および .NET と一致しています。ただし、Python 仮想マシンと Java または .NET 仮想マシンの違いは、Python 仮想マシンがより高度な仮想マシンであることです。ここでいう高度とは、通常の意味での高度ではなく、Python の仮想マシンが Java や .NET よりも強力であるという意味ではなく、Java や .NET と比較して、Python の仮想マシンが実機からかけ離れていることを意味します。あるいは、Python の Virtual Machine はより抽象度の高い Virtual Machine であるとも言えます。C ベースの Python からコンパイルされたバイトコードファイル(通常は .pyc 形式)。さらに、Python は対話モードでも実行できます。たとえば、主流のオペレーティング システムである Unix/ Linux、Mac、Windows では、Python 対話環境をコマンド モードで直接実行できます。直接操作指示を出すことで対話型の操作が可能です。

2.4 Pythonを学ぶと何ができるようになりますか?

  • ウェブとインターネットの開発

  • 科学計算と統計

  • AI

  • デスクトップインターフェースの開発

  • ソフトウェア開発

  • バックエンド開発

  • ネットワーク インターフェイス: システムのメンテナンスと管理を容易にする Linux の象徴的な言語の 1 つであり、多くのシステム管理者にとって理想的なプログラミング ツールです。

  •  グラフィックス処理: PIL や Tkinter などのグラフィックス ライブラリによってサポートされており、グラフィックス処理を容易にします。
  • 数学処理: NumPy 拡張機能は、多くの標準数学ライブラリへの広範なインターフェイスを提供します。
  • テキスト処理: Python が提供する re モジュールは正規表現をサポートし、SGML および XML 解析モジュールも提供するため、多くのプログラマは Python を使用して XML プログラムを開発しています。
  • データベース プログラミング: プログラマは、Python DB-API (アプリケーション プログラミング インターフェイス) 仕様に準拠したモジュールを通じて、Microsoft SQL Server、Oracle、Sybase、DB2、MySQL、SQLite などのデータベースと通信できます。Python には、完全な SQL 環境を提供する Gadfly モジュールが付属しています。
  • ネットワーク プログラミング: 分散アプリケーションを簡単かつ迅速に開発できるソケット プログラミングをサポートする豊富なモジュールを提供します。Zope、Mnet、BitTorrent などの多くの大規模ソフトウェア開発プロジェクトや Google が広く使用しています。
  • Webプログラミング:最新のXML技術をサポートするアプリケーション開発言語。
  • マルチメディア アプリケーション: Python の PyOpenGL モジュールは、「OpenGL アプリケーション プログラミング インターフェイス」をカプセル化し、2 次元および 3 次元の画像処理を実行できます。PyGame モジュールを使用してゲーム ソフトウェアを作成できます。
  • pymo エンジン: PYMO は、Python メモリー オフの略で、Symbian S60V3、Symbian3、S60V5、Symbian3、および Android システムで実行される AVG ゲーム エンジンです。Python2.0 プラットフォームに基づいて開発されており、メモリーズオフ風の AVG ゲームの作成に適しているため、PYMO と名付けられました。
  • ハッカー プログラミング: Python にはハック ライブラリがあり、使い慣れた関数や馴染みのない関数が組み込まれていますが、達成感に欠けます。

3. 準備

3.1 Python インタプリタのインストール

Python インタプリタのインストールについては、最新バージョンをインストールすることはお勧めしませんが、Python3.9、3.10 をインストールしても問題ありません。

インストールチュートリアルについては、Zhihu の記事を参照してください。

Python の詳細なインストール手順のグラフィック チュートリアル - Zhihu (zhihu.com) https://zhuanlan.zhihu.com/p/231233101インストール後、win+r で実行中のウィンドウが開き、cmd 内でターミナルを開いてcmd を入力する

 python と入力すると以下のように出力され成功します。

 3.2 Pythonエディタの選択

IDE の一般的なオプションには次のものがあります。

  • IDLE (Python に付属していますが、推奨されません)
  • Pycharm (特に Python に推奨)
  • VsCode (推奨)
  • ジュピター (推奨)
  • 崇高なテキスト (推奨されません)
  • テキストドキュメント (絶対に使用しないでください!!!)

IDLE は Python のインストールに付属しており、メニュー内にあるエディターです。

 開いた後のインターフェースは次のとおりです

 これはお勧めしませんので、まだ詳しくは説明しません。

3.3 エディタのインストール

これらのエディタのインストールチュートリアルを以下にまとめました。

PyCharm インストール チュートリアル (Windows) - Zhihu (zhihu.com) https://zhuanlan.zhihu.com/p/359897213 VSCode の詳細なインストール チュートリアル - Zhihu (zhihu.com) https://zhuanlan.zhihu.com/p /264785441複雑さを簡素化し、エレガントにコーディングします。——Jupyter ノートブック_Little Y のプログラミング教室ブログ - CSDN ブログJupyter ノートブックは現在、データ サイエンスと機械学習を記述するための最も人気のあるエディタです。Jutel Notebook は、Web テクノロジーに基づいているという点で、他の主流のエディターとは異なります。Jutel Notebook はインタラクティブな環境を提供し、リッチ テキスト形式 (主流の Markdown、Latex 式などを含む) でコンテンツを編集できるため、ドキュメントの編集が非常に便利です。Jutel Notebook は当初 Python 言語専用でしたが、現在では 40 以上の言語に拡張されています。https://blog.csdn.net/m0_73552311/article/details/131510757 Sublime Text 4 のインストールと使用 (完全なチュートリアル)_sublime test4_Jinjian_swift のブログ - CSDN ブログhttps://blog.csdn.net/weixin_45013646/article/details/119879183You自分で選択できますが、これら 4 つは私のコンピュータにインストールされています。結局のところ、良いものをあまりにも多く持つことはできません。

4. Python の予備調査

4.1 異なる HelloWorld

準備期間を経て、いよいよ業務開始です!言語に慣れる最も早い方法は、例を通してその言語を使用することです。今日は古典的な Hello World を使用せず、別の Hello World を作成します。

 この写真では、Python の父親が「Life is short, Python is the shore」という文字がプリントされた T シャツを着ています。最初のプログラミング作業として、Python を使用してこの文を印刷してみましょう。

print(’人生苦短,Python是岸‘)

ターミナルに Python と入力して、自分でステートメントを入力してみましょう

 ああ!エラーが報告されました。よく見てみると、入力方法に問題があるはずです。

 今度は二重引用符が再び消えてしまいました

 これで完了です。コードは次のとおりです。皆さんも自分で入力することをお勧めします。

print('人生苦短,Python是岸')

皆さんがこれらの構文についてもっと学ぶことができるように、コードに間違いを犯しましたが、皆さんは二度とそのような間違いをしないと信じています。

おめでとうございます。あなたはプログラミングの世界に入りました。

4.2 最初の Python プログラムの構造

「4.1 さまざまな HelloWorld」レッスンでは、最初の Python プログラムを作成しました。最初の手順を詳しく見てみましょう。コードは以下のように表示されます

print('人生苦短,Python是岸')

 コード内の黄色でマークされた部分は、受信した値をターミナルに出力するために使用される Python の組み込み関数であり、ヘルプ関数を通じて詳細なヘルプを取得できます。

help(print)

出力は次のとおりです

 参考翻訳

关于模块内置的内置函数打印的帮助:



print(…)

print(value,…,sep='',end='n',file=sys.stdout,flush=False)



将值打印到流,或者默认情况下打印到sys.stdout。

可选关键字参数:

file:类似文件的对象(流);默认为当前sys.stdout。

sep:插入值之间的字符串,默认为空格。

end:附加在最后一个值后面的字符串,默认为换行符。

flush:是否强制冲洗流。

複数の値を出力する場合、カンマで区切ることで、すべてのパラメータを渡す関数がスペースで区切られて出力されます。例えば

print('人生苦短,', 'Python是岸')

もちろん数字も使えます

または、プラス記号を使用して文字列を連結します。

 

 文字列と数値のみを追加する方法については後ほど説明します。

 他のパラメータを自分で試すこともできます

 内部の文字列については後ほど詳しく説明します。

4.3 出力はあるが入力がない場合はどうなりますか?

Pythonではprint関数を使って出力しますが、入力せずに出力するにはどうすればよいでしょうか?

Pythonでの入力は当然input関数を使います。

入力機能の使用に関しては、内蔵のヘルプ機能も使用します。

help(input)

 参考翻訳

关于模块内置中内置函数输入的帮助:



input(提示=无,/)

从标准输入中读取字符串。尾部换行符被剥去。



提示字符串(如果给定)将打印到标准输出,而不带

在读取输入之前尾随换行。



如果用户点击EOF(*nix:Ctrl-D,Windows:Ctrl-Z+Return),则引发EOFError。

在*nix系统上,如果可用,则使用readline。

input 関数を使用して入力を取得できます

入力後の行を変更するだけで、関数は入力値を返します。これを使用して変数に値を割り当てることができます。入力関数にはパラメーター プロンプト パラメーターもあり、入力前にプロンプ​​トを追加するために使用されます。入力例は次のとおりです。

input('请输入: ')

入力の前に追加のプロンプトがあることがわかります: 入力してください:

5.変数

Python 変数は、データを保存するために使用される識別子です。変数には、数値、文字列、リスト、辞書など、さまざまな種類のデータを格納できます。Python では、変数の定義、割り当て、変更、削除などの操作が非常に簡単です。

以下は、変数の定義、代入、変更、削除、その他の操作を含む Python 変数に関するチュートリアルです。

5.1 変数の定義

Python では、次の条件が満たされる限り、変数は任意の名前で定義できます。

  • 変数名には文字、数字、アンダースコアのみを含めることができます。
  • 変数名は文字またはアンダースコアで始める必要があります。
  • 変数名に、if、while、for などの Python キーワードを使用することはできません。

変数の定義は非常に簡単で、変数名を指定し、等号を使用して値を代入するだけです。例えば:

x = 5
y = "Hello, world!"

上の例では、変数 x には値 5 が割り当てられ、変数 y には文字列「Hello, world!」が割り当てられます。

5.2 変数の代入

変数の値は、変数に値を割り当てるだけで変更できます。例えば:

x = 5
x = 6

上記の例では、変数 x の値が 5 から 6 に変更されます。

5.3 変数の変更

Python の変数は可変です。これは、変数の値を変更できることを意味します。例えば:

x = [1, 2, 3]
x[0] = 4

上記の例では、変数 x の値が [1, 2, 3] から [4, 2, 3] に変化します。

5.4 変数の削除

変数は del ステートメントを使用して削除できます。例えば:

x = 5
del x

上の例では、変数 x が削除されます。

5.5 変数の種類

Python の変数は、事前に型を宣言する必要はなく、動的に型付けされます。これは、プログラムの実行中に変数に任意のタイプの値を割り当てることができることを意味します。type() 関数を使用して変数の型を取得できます。例えば:

x = 5
y = "Hello, world!"
print(type(x))
print(type(y))

上記の例では、出力は次のようになります。

<class 'int'>
<class 'str'>

これは、変数 x が整数型であり、変数 y が文字列型であることを意味します。

Python には次の 5 つの標準型があります。

(1) Numbers (数値)
  数値データ型は、数値を格納するために使用されます。これらは不変のデータ型であり、単純に次の 4 つの型に分類できます。 (ここでの 16 進数と 8 進数は int 整数型であることに注意してください。)
int (整数型):

var = 520
print(type(var))          # <class 'int'>

float(浮動小数点型):

var = 5.20
print(type(var))          # 输出:<class 'float'>

bool (ブール型):

var = True
print(type(var))          # 输出:<class 'bool'>


複雑な:

var = complex(13,14)
print(type(var))            # 输出:<class 'complex'>



(2) 文字列(string)
  文字列または文字列は、数字、文字、およびアンダースコアで構成される文字列であり、''、""、または "' '" で表すことができます。3つの使い方についてはこちらの記事を参照してください: Pythonの文字列のいろいろな表現
  以下のコードにあるように、取得される型はstr型です。ちなみに、ちょっとした豆知識ですが、文字列にアクセスするには、順方向でも逆方向でもアクセスできます。つまり、順方向の場合は、 var[0] = 'p '、var[1] = 'i'、var[2] = 'g'、逆に、var[-1] = 'g'、var[-2] = 'i'、var[-3] = 「ぷ」。

var = “pig”
print(type(var))            # 输出:<class 'str'>
print(var[0:3])          # 正向访问,输出:'pig'
print(var[-1])           # 反向访问,输出:'g'


(3) リスト
  リストは Python で最も頻繁に使用されるデータ型であり、[ ] でマークされています。リストは、ほとんどのコレクション クラスのデータ構造の実装を完了できます。文字、数字、文字列、さらにはリスト (つまり、ネスト) を同時に含めることができます。以下のコードに示すように、リストは文字列と同様に処理されます。

var = [ 'pig' , 1 , 2.2 ]
print(type(var))            # 输出:<class 'list'>
print(var[0])            # 获得第一个元素,输出:'pig'
print(var+var)           # 打印组合的列表,输出:[ 'pig', 1 , 2.2,'pig', 1 , 2.2 ]



(4) タプル
  タプルはリストと似ています。タプルは () でマークされます。内部要素はカンマで区切られます。ただし、タプルには値を 2 回割り当てることはできず、読み取り専用のリストと同等です。

var = ( 'pig', 1 , 2.2 )
print(type(var))            # 输出:<class 'tuple'>
print(var[0])            # 获得第一个元素,输出:'pig'
print(var+var)           # 打印组合的元组,输出:( 'pig', 1 , 2.2,'pig', 1 , 2.2 )
var[0] = 'dog'             # 出错!不能被二次赋值


(5) 辞書
  リストと比較すると、リストは順序付けられたオブジェクトの集合ですが、辞書は順序付けされていないオブジェクトの集合です。2 つの違いは、ディクショナリ内の要素がオフセットではなくキーによってアクセスされることです。辞書は「{ }」でマークされており、辞書はインデックスキーとそれに対応する値の値で構成されます。

dic = {'name':'张三','age':18}
print(dic ['name'])       # 得到键为'name' 的值,输出:'张三'
print(dic [age])          # 得到键为'age' 的值,输出:18
print(dic)                # 得到完整的字典,输出:{'name':'张三','age':18}
print(dic.keys())         # 得到所有键,输出:dict_keys:(['name','age'])
print(dic.values())       # 输出所有值,输出:dict_values:(['张三',18])

Python の 5 つの標準型のうち最後の 2 つについては、後で詳しく説明します。
 

5.6 変数の命名規則

Python では、従う必要のある命名規則がいくつかあります。

  • 変数名はわかりやすいものにする必要があります。
  • 変数名には小文字とアンダースコアを使用する必要があります。
  • 変数名は、キャメルケースを使用するのではなく、単語の間をアンダースコアで区切る必要があります。
  • 略語が広く理解されている場合を除き、変数名では略語を使用しないでください。

5.7 変数の範囲

Python では、変数のスコープは、その変数にアクセスできるコードのブロックを指します。Python には 3 種類の変数スコープがあります。

  • ローカル変数: 関数内で定義され、関数内でのみアクセスできます。
  • グローバル変数: 関数の外部で定義され、プログラム全体からアクセスできます。
  • ネストされたスコープ変数: 関数内の関数で定義され、この関数およびネストされた関数内でのみアクセスできます。

ローカル変数とグローバル変数を使用した例を次に示します。

python
x = 5  # 全局变量

def my_func():
    x = 10  # 局部变量
    print("x = ", x)

my_func()
print("x = ", x)

上記の例では、関数 my_func() 内の変数 x はローカル変数です。関数が呼び出されると、Python は関数内に x という新しい変数を作成し、その値を 10 に設定します。この変数は、関数が返されるときに破棄されます。関数の外では、変数 x は依然としてグローバル変数であり、その値は 5 のままです。

5.8 変数の多重代入

Pythonでは、複数の変数に同時に値を割り当てることができます。例えば:

x, y = 1, 2

上の例では、変数 x には値 1 が割り当てられ、変数 y には値 2 が割り当てられます。これは次のコードで動作します

効果は同じです:

x = 1
y = 2

複数の変数間で値を交換することが可能です。例えば:

x, y = y, x

上記の例では、変数xと変数yの値が交換されます。

5.9 変数の命名規則

Python では、従う必要のある命名規則がいくつかあります。

  • 変数名はできるだけ短く、ただしわかりやすいものにする必要があります。
  • 変数名には小文字とアンダースコアを使用する必要があります。
  • 変数名は、キャメルケースを使用するのではなく、単語の間をアンダースコアで区切る必要があります。
  • 変数名は、ループ カウンタやその他の単純な目的の変数でない限り、単一文字の使用を避ける必要があります。
  • 変数名には、Python の組み込み関数やキーワードの名前を使用しないでください。

たとえば、以下に適切な変数名をいくつか示します。

name = "John"
age = 30
is_valid = True

以下に、不適切な変数名をいくつか示します。

n = "John"  # 变量名过短,缺少描述性
a = 30  # 变量名过短,缺少描述性
valid = 1  # 变量名不够描述性
if = True  # 变量名使用了Python关键字

5.10 変数の保存 

高級言語では、変数はメモリとそのアドレスを抽象化したものです。

Python の場合、Python のすべての変数はオブジェクトです。変数は参照セマンティクスを使用して保存されます。保存されるのは変数の値が配置されているメモリ アドレスのみであり、変数自体ではありません。

参照セマンティクス: Python では、変数はオブジェクト (値) への参照を保持します。これを参照セマンティクスと呼びます。このように、変数は参照のみを保持するため、変数に必要な記憶領域は一貫しています。オブジェクト セマンティクスおよびポインタ セマンティクスとも呼ばれます。

値セマンティクス: 一部の言語ではこの方法を使用せず、変数の値を変数の記憶領域に直接格納します。この方法を値セマンティクスと呼びます。たとえば、C言語ではこの格納方法が使用されます。各変数変数の記憶領域に格納されますが、メモリに占有されるスペースは変数の実際のサイズに依存し、固定することはできません。

Python の変数は参照セマンティクスを採用しているため、データ構造には基本的なデータ型を含めることができ、その結果、値そのものではなく変数のアドレスが Python の各変数に格納されます。

複雑なデータ構造の場合、各要素のアドレスのみが内部に格納されます。

抽象的に言えば、変数は数値を格納する箱ではなく、データ上の変数ラベルです。

5.10.1 ID関数

id 関数は変数データのアドレスを取得します。

x = 3.14
print(id(x))

id 関数を通じて変数がどのように保存されているかを確認できます。

5.10.2 変数の保存 

 変数には参照が格納されているだけであることがわかります。 

6.Pythonリスト

6.1 リストの作成

Pythonでリストを作成するには2つの方法があります

#第一种方式,直接创建, 用方括号括起来,元素用逗号隔开
l1 = [] #创建一个空列表
l2 = [666, '1024程序员节', True] #创建一个包含3个元素的列表
l3 = [[1, 2, 3]] #创建一个包含一个列表的列表

#第二种方式,使用内置函数 list()
l4 = list() #创建一个空列表
l5 = list([1, 2, 3]) #创建一个包含3个元素的列表

リストの作成方法を選択できます

6.2 アクセスリストの要素

添え字インデックスを使用してリスト内の値にアクセスします。以下に示すように、角括弧を使用して文字をインターセプトすることもできます

list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print("list1[0]: ", list1[0])
print("list2[1:5]: ", list2[1:5])

上記のコードの出力は次のとおりです

list1[0]:  physics
list2[1:5]:  [2, 3, 4, 5]

6.3 リストの追加

Python では、リストに関数を追加するには、組み込み関数 append() を使用してリスト関数を追加できます。リストの最後に要素を追加するために使用できます。

l1 = [1]
l1.append(2) #在列表末尾添加元素 2,l1现在是[1, 2]。

指定した場所に関数を追加する場合は、組み込み関数 insert(index, value) を使用できます。

l1 = [1, 2, 3]
l1.insert(1, 0) #l1现在是[1, 0, 2, 3]

6.4 要素の変更

l1 = [1, 2, 3]
l1[0] = 3
l1[2] = 1 #现在列表里是 [3, 2, 1]

6.5 リスト操作関数

7.Python辞書

辞書は Python が提供する一般的に使用されるデータ構造です。キーと値のペアで構成されます。キーと値はコロンで区切られ、項目はカンマで区切られます。辞書全体は中括弧 {} で囲まれています。

形式は次のとおりです。

dic = {key1 : value1, key2 : value2 }

7.1 辞書の作成

辞書は、連想配列またはハッシュ テーブルとも呼ばれます。辞書を作成する一般的な方法は次のとおりです。

# 方法1
dic1 = { 'Author' : 'Python当打之年' , 'age' : 99 , 'sex' : '男' }

# 方法2
lst = [('Author', 'Python当打之年'), ('age', 99), ('sex', '男')]
dic2 = dict(lst)

# 方法3
dic3 = dict( Author = 'Python当打之年', age = 99, sex = '男')

# 方法4
list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', 99, '男']
dic4 = dict(zip(list1, list2))

辞書を作成するにはさまざまな方法があるため、ここでは詳しく説明しません。

辞書は dict クラスで表されます。dir(dict)を使用すると、クラスに含まれるメソッドを確認できます。コマンドを入力すると、次の出力が表示されます。

methods = dir(dict)
print('methods = ',methods)

methods = ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

7.2 辞書操作 

辞書のメソッドや属性は数多くありますが、ここでは以下の 11 個のメソッドに焦点を当てます

['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

1、dict.clear()

clear() は、辞書内のすべての要素 (キーと値のペア) をクリアするために使用されます。辞書に対して clear() メソッドを実行すると、辞書は空の辞書になります。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', 99, '男']
dic1 = dict(zip(list1, list2))
# dic1 = {'Author': 'Python当打之年', 'age': 99, 'sex': '男'}

dic1.clear()
# dic1 = {}

2、dict.copy()

copy() は辞書の浅いコピーを返します。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', 99, '男']
dic1 = dict(zip(list1, list2))

dic2 = dic1 # 浅拷贝: 引用对象
dic3 = dic1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dic1['age'] = 18

# dic1 = {'Author': 'Python当打之年', 'age': 18, 'sex': '男'}
# dic2 = {'Author': 'Python当打之年', 'age': 18, 'sex': '男'}
# dic3 = {'Author': 'Python当打之年', 'age': 99, 'sex': '男'}

このうち、dic2 は dic1 への参照なので、出力結果は一致しています dic3 の親オブジェクトは深くコピーされており、dic1 が変更されても変更されません 子オブジェクトは浅いコピーなので、dic1 が変更されたときに変更されます親子関係に注目してください。

ディープコピーを拡張します: copy.deepcopy()

import copy

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))

dic2 = dic1
dic3 = dic1.copy()
dic4 = copy.deepcopy(dic1)
dic1['age'].remove(18)
dic1['age'] = 20

# dic1 = {'Author': 'Python当打之年', 'age': 20, 'sex': '男'}
# dic2 = {'Author': 'Python当打之年', 'age': 20, 'sex': '男'}
# dic3 = {'Author': 'Python当打之年', 'age': [99], 'sex': '男'}
# dic4 = {'Author': 'Python当打之年', 'age': [18, 99], 'sex': '男'}

dic2 は dic1 への参照であるため、出力結果は一貫しています。dic3 の親オブジェクトは深くコピーされており、dic1 の変更によって変更されません。子オブジェクトは浅いコピーであるため、変更によって変更されます。 dic1 の dic1; dic4 は深くコピーされ、再帰的にコピーされています。すべてのデータは別のメモリに新しいオリジナルの辞書を作成するのと同じなので、dic1 を変更しても dic4 のデータには影響しません。

3、dict.fromkeys()

fromkeys() は、指定された複数のキーを使用して新しい辞書を作成します。デフォルト値は None です。デフォルト値としてパラメータを渡すこともできます。

list1 = ['Author', 'age', 'sex']
dic1 = dict.fromkeys(list1)
dic2 = dict.fromkeys(list1, 'Python当打之年')

# dic1 = {'Author': None, 'age': None, 'sex': None}
# dic2 = {'Author': 'Python当打之年', 'age': 'Python当打之年', 'sex': 'Python当打之年'}

4、dict.get()

get() は、指定されたキーの値を返す、つまりキーに基づいて値を取得するために使用されます。キーが存在しない場合は None を返すか、戻り値を指定できます。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))

Author = dic1.get('Author')
# Author = Python当打之年
phone = dic1.get('phone')
# phone = None
phone = dic1.get('phone','12345678')
# phone = 12345678

5、dict.items()

items() は辞書内のすべてのキーと値のペアを取得します。通常、結果は後続の処理のためにリストに変換できます。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))
items = dic1.items()
print('items = ', items)
print(type(items))
print('items = ', list(items))

# items = dict_items([('Author', 'Python当打之年'), ('age', [18, 99]), ('sex', '男')])
# <class 'dict_items'>
# items = [('Author', 'Python当打之年'), ('age', [18, 99]), ('sex', '男')]

6、dict.keys()

key() は辞書のすべてのキーを返します。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))
keys = dic1.keys()
print('keys = ', keys)
print(type(keys))
print('keys = ', list(keys))

# keys = dict_keys(['Author', 'age', 'sex'])
# <class 'dict_keys'>
# keys = ['Author', 'age', 'sex']

7、dict.pop()

Pop() は、指定されたキーに対応する値を返し、元の辞書内のキーと値のペアを削除します。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))
sex = dic1.pop('sex')
print('sex = ', sex)
print('dic1 = ',dic1)

# sex = 男
# dic1 = {'Author': 'Python当打之年', 'age': [18, 99]}

8、dict.popitem()

Popitem() は、辞書から最後のキーと値のペアを削除します。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))
dic1.popitem()
print('dic1 = ',dic1)

# dic1 = {'Author': 'Python当打之年', 'age': [18, 99]}

9、dict.setdefault()

setdefault() は get() に似ていますが、キーが辞書に存在しない場合、キーが追加され、値がデフォルトに設定されます。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))
dic1.setdefault('Author', '当打之年')
print('dic1 = ',dic1)
# dic1 = {'Author': 'Python当打之年', 'age': [18, 99], 'sex': '男'}
dic1.setdefault('name', '当打之年')
print('dic1 = ',dic1)
# dic1 = {'Author': 'Python当打之年', 'age': [18, 99], 'sex': '男', 'name': '当打之年'}

10、dict.update(dict1)

update() 辞書の更新、辞書 dict1 のキーと値のペアを dict に更新します。更新された辞書に対応するキーと値のペアがすでに含まれている場合、元のキーと値のペアは上書きされます。更新された辞書に対応するキーがすでに含まれている場合は、 -value ペアの場合、元のキーと値のペアは上書きされます。対応するキーと値のペアが含まれていない場合は、キーと値のペアを追加します。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))
print('dic1 = ',dic1)
# dic1 = {'Author': 'Python当打之年', 'age': [18, 99], 'sex': '男'}

list3 = ['Author', 'phone' ]
list4 = ['当打之年', 12345678]
dic2 = dict(zip(list3, list4))
print('dic2 = ',dic2)
# dic2 = {'Author': '当打之年', 'phone': 12345678}

dic1.update(dic2)
print('dic1 = ',dic1)
# dic1 = {'Author': '当打之年', 'age': [18, 99], 'sex': '男', 'phone': 12345678}

11、dict.values()

value() は辞書のすべての値を返します。

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))
values = dic1.values()
print('values = ', values)
print(type(values))
print('values = ', list(values))

# values = dict_values(['Python当打之年', [18, 99], '男'])
# <class 'dict_values'>
# values = ['Python当打之年', [18, 99], '男']

8.Pythonタプル 

Python のタプルはリストとよく似ていますが、作成方法が異なります。したがって、タプルの作成のみに焦点を当て、残りについては説明しません。

tuple1 = 1, 2, 3
tuple2 = (1, 2, 3)

9.Pythonの条件判断

条件付き判断とは何ですか?

つまり、条件に基づいて真か偽かを判断し、コインを投げるのと同じように、条件は表か裏かのどちらかになります。

以下は、判決を理解するのに役立つ、旧正月によく発生する殺人事件の写真です(写真はインターネットからのものです)

 

9.1 場合の判断 

Pythonでは条件判断を実装するために一般的にif文が使われます。

if 条件表达式:
    如果为真这执行

 あなたが成人かどうかを判断するための例をあげましょう。

age = 18

if age >= 18:
    print('成年')

if age < 18:
    print('未成年')

9.1 もし...そうでなければ...

if...else...ステートメントの一般的な構造は次のとおりです。

if 条件表达式:
    为真代码
else:
    上面的条件表达式不为真执行

if...else ステートメントを使用して上記の例を改善できます。

age = 18

if age >= 18:
    print('成年')
else:
    print('未成年')

9.2 if...elif...else...

if...elif..else ステートメントの一般的な構造は次のとおりです。

if 条件表达式1:
    ...
elif 条件表达式2: # elif 可以无限叠加
    ...
elif 条件表达式3:
    ...
else:
    ...

これと同じ式は、上記の例を改善するのにも役立ちます


age = 18

if age >= 18:
    print('成年')
elif age < 18:
    print('未成年')
else:
    print('未知年龄')

9.3 三項式

三項演算子とは何ですか

ほとんどのプログラミング言語には三項演算 (三項演算とも呼ばれます) があり、Python 言語にも Python 2.5 から三項演算子が導入されました。

Python では、三項演算は条件式とも呼ばれ、構文は次のとおりです。

true_expression if 条件 else false_expression
条件は判定条件で、true_expression と false_expression は if...else.... で結ばれた 2 つの式です。
条件が true (結果が true) の場合、true_expression が実行され、true_expression の結果が式全体の結果として使用されます。
条件が成立しない場合 (結果が false)、false_expression が実行され、false_expression の結果が式全体の結果として使用されます。

Python の三項演算子は、疑問符やコロンを使用して接続する Java や他の言語とは異なり、if と else で接続されます。

例えば:

num1 = int(input('请输入第一个数字:'))
num2 = int(input('请输入第二个数字:'))
# 三元运算
max_num = num1 if num1 >= num2 else num2
print(f'最大值是:{max_num}')

出力:

请输入第一个数字:15646
请输入第二个数字:464665
最大值是:464665

上記の例では、num1 が num2 以上の場合、max_num は num1 に等しく、それ以外の場合、max_num は num2 に等しく、2 つの数値の最大値は三項演算子によって求められます。

三項演算文と条件文の違い

1.三項演算文

numa = 100
numb = 10
max_num = numa if numa >= numb else numb
print(f'最大值是:{max_num}')

2.条件文

numa = 100
numb = 10
if numa >= numb:
    max_num = numa
else:
    max_num = numb
print(f'最大值是:{max_num}')

上記の比較から、三項演算ステートメントと条件ステートメントの機能はまったく同じですが、三項演算ステートメントに必要なコードは 1 行だけであるのに対し、条件ステートメントには 4 行のコードが必要です。三項演算文はコードが少なくて読みやすいため、ほとんどの場合、三項演算文は条件文の省略形であると言えます。

入れ子になった三項式

num = int(input('请输入数字:'))
print('负数') if str(num)[0] == '-' else print('大于等于100') if num >= 100 else print('小于100的正数')

上記のコード行はネストされた三項演算式で、最初の else の後のステートメントは完全な三項演算ステートメントであり、次のように全体が外側の三項演算式の false_expression として扱われます。 。

この式は、次の条件判定コードと等価です。

num = int(input('请输入数字:'))
if str(num)[0] == '-':
    print('负数')
else:
    if num >= 100:
        print('大于等于100')
    else:
        print('小于100的正数')

同じ方法を使用してさらに多くの層をネストすることもできますが、個人的にはあまり多くのネストを書かないことをお勧めします。そうしないと、コードの可読性は向上せず、逆効果になります。

三項算術式とリスト内包表記の組み合わせ

s = [i if i % 2 == 0 else 10*i for i in range(10)]
print(s)

出力:

[0, 10, 2, 30, 4, 50, 6, 70, 8, 90]

三項算術式は、リスト内包表記と組み合わせてよく使用されます。これら 2 つの方法の組み合わせは、Python の 2 つの高度な機能を強力に組み合わせたものであり、記述されたコードは非常にエレガントです。

もちろん、三項演算式と辞書導出を組み合わせたり、類推による集合導出も可能です。詳しい導出については、Python リスト導出を参照してください。

三項式の利点

Python の 3 項算術式には、次の 2 つの主な利点があります。

1. 単純な条件文を 1 行の三項演算式に置き換えて、コードの行数を減らすことができます。

2. 単純な三項演算式によりコードの可読性が向上し、コードがより Python 的で洗練されたものになります。

 9.4 式の比較記号

シンボル 意味
== 等しい
!= 等しくない
< 未満
> 以上
<= 以下
>= 以上
アドレスが同じかどうかを確認する

上記の式記号の一部に加えて、特別なキーワードもいくつかあります。

キーワード 意義
そして および の前後の式が true の場合にのみ true を返し、それ以外の場合は false を返します。
または or の前後の式は、いずれか 1 つが true である限り true を返します。

 10.数字当てゲーム

一定期間の学習が終わったら、小さなテストを受ける時間です。

ここでは、数字を推測する簡単な入門ケースを選択しました。

num = 66

guess = int(input('请输入你猜的数字'))

if guess == num:
    print('你猜对了')
elif guess < num:
    print('你猜小了')
else:
    print('你猜大了')

この例では、最初に num 変数を定義し、その変数に数値 66 を答えとして格納します。

次に、input 関数を使用してプレーヤーに推測する数値を入力させ、int 関数を使用して入力型を int 型に変換し、最後にそれを変数guessに渡します。

その後、推測が判断されます。

ぜひ皆さんも試してみることをお勧めします。

こうして最初に作ったゲームが出来上がったのですが、やってみるとわかるのですが、このゲームは一度しか当てることができず、実は最初に答えが決まっているんです。ただし、後で徐々に改善していきます。

11.Pythonループ

11.1 while ループ

while ループは、コードを繰り返し実行するために使用されます。次は while ステートメントです (画像はインターネットから取得したものです)

Python プログラミングの while ステートメントは、プログラムをループで実行するために使用されます。つまり、特定の条件下で、繰り返し処理する必要がある同じタスクを処理するために、特定のプログラムをループで実行します。その基本的な形式は次のとおりです。

while 条件表达式:
    代码块

実行ステートメントは、単一のステートメントまたはステートメントのブロックにすることができます。判定条件には任意の式を指定でき、ゼロ以外または null 以外の値が true となります。

判定条件が偽の場合はループを終了する。

実行フローチャートは次のとおりです (インターネットから入手)。

Python の while ステートメントの実行プロセスを示す GIF

もう少し複雑です:

 ここに例が示されています

count = 0

while count < 10:
    print("Hello while")
    count += 1

画面に「Hello while」が 10 回表示されていることがわかります。

注: Python では、ループ条件が false の場合、while ...else は else ステートメント ブロックを実行します。

11.2 for ループ

Python では、for ループを使用してシーケンス項目を反復処理できます。

for ループの基本構造は次のとおりです。

for 变量名 in 遍历对象:
    ...

フローチャート(インターネットより)

上の while の例を覚えていますか? for ループを使用して 10 を出力することもできます

for i in range(10):
    print('Hello for')

range 関数を使用してシーケンス オブジェクトを作成できます。Python での説明は次のとおりです。

 参考訳:

关于模块内置类范围的帮助:



类范围(对象)

|范围(停止)->范围对象

|range(start,stop[,step])->range对象

|

|返回一个对象,该对象从开始(包括开始)生成一系列整数

|逐步停止(排他)。范围(i,j)产生i,i+1,i+2。。。,j-1。

|start默认为0,省略stop!范围(4)产生0、1、2、3。

|这些正是4个元素列表的有效索引。

|当给出步长时,它指定增量(或减量)。

|

|此处定义的方法:

|

|__bool__(self,/)

|如果self-else则为True False

|

|__contains__(self,key,/)

|自行返回钥匙。

|

|__eq__(self、value、/)

|返回self-==值。

|

|__ge__(自我、价值、/)

|返回self>=值。

|

|__getattribute__(自我、姓名、/)

|返回getattr(self,name)。

11.3 休憩と継続 

Python の Break ステートメントは、C と同様に、囲まれている最小の for ループまたは while ループを中断します。

Break ステートメントはループ ステートメントを終了するために使用されます。つまり、ループ条件に False 条件がない場合、またはシーケンスが完全に再帰されていない場合、ループ ステートメントの実行も停止されます。

Break ステートメントは while ループと for ループで使用されます。

ネストされたループを使用する場合、break ステートメントは最も深いループの実行を停止し、コードの次の行の実行を開始します。

Python 言語のブレーク ステートメントの構文:

break

フローチャート:

Python continue ステートメントはこのループから飛び出し、break はループ全体から飛び出します。

continue ステートメントは、現在のループの残りのステートメントをスキップして次のサイクルを続行するように Python に指示するために使用されます。

continue ステートメントは while ループと for ループで使用されます。

Python 言語の continue ステートメントの構文形式は次のとおりです。

continue

フローチャート:

12. 完全数当てゲーム 

Python ループを学習し終えた後、誰もがこのような改善を考えたはずです。

これが私の個人的な改善計画です

import random


ran = random.randint(1, 100) # python内置库random的randint函数可以生成a~b之间的随机整数

while True:
    guess = int(input('请输入1~100的整数: ')
    
    if guess == ran:
        print('猜对了')
        break # 猜对了就退出循环
    elif guess < ran:
        print('猜小了')
    else:
        print('猜大了')

ここではこれ以上の説明は行いません。皆さん、おめでとうございます。最初のゲームが完了しました。

13.Pythonのアノテーション

注釈の説明がなぜこんなに遅れたのかは聞かないでください。単に忘れていただけです。

コメントはコードの可読性の向上に役立ちます

13.1 単一行のコメント

Python の単一行コメントでは # 記号を使用します

#这是注释

a = "#"
print(a) # Ouput:#

13.2 複数行のコメント

Pythonでは複数行のコメントを「"」で囲むことができます。

""" 这是注释 """

s = """
1024
程序员节
""" #这样没有问题

14.Pythonインポート

Python インポートにより、コードの可読性が向上します。大きなコードが複数のファイルに分割されると、可読性が向上します。

14.1 インポート インポート

インポートの一般的な形式は次のとおりです。

import 库名

import は、現在のパス内のファイルとサードパーティのライブラリ、および Python の組み込みライブラリを検索します。存在する場合は、次のメソッドでそれらを呼び出すことができます。

import 库名

库名.变量或函数、类

複数の組み込みライブラリをインポートするときに使用できます

import 库1, 库2

これによりコードの量は減りますが、Python ではこの方法でインポートすることはお勧めしません。Python で複数のライブラリをインポートする場合は、次のように 1 つずつインポートすることをお勧めします。

import 库1
import 库2

14.2...としてインポート...

このインポート方法は、ライブラリ名が長すぎることを避けるためのもので、ライブラリに小さな名前を付けるのと比較して、

import 库名 as 小名

小名.元素

14.3 から ... 改良 ...

このメソッドを使用して、1 つだけの関数または複数の関数をライブラリにインポートします。

form 库1 import 函数1

from 库2 import 函数1, 类1

from 库3 import * # 在库3里导入所有元素

15. 機能

1. Python 関数とは何か、関数の定義

関数は、単一の関数または関連する関数を実装するために使用される、編成された再利用可能なコード セグメントです。

関数により、アプリケーションのモジュール性とコードの再利用が向上します。Python には print() などの多くの組み込み関数が用意されていることはすでにご存知でしょう。ただし、ユーザー定義関数と呼ばれる独自の関数を作成することもできます。

# 函数
def function(param):
    pass
    return 'this is function'
result = function('param')
print(result)

2. 機能の使い方

パラメータの説明: パラメータ関数のパラメータ: 行パラメータ 呼び出し関数のパラメータ: 実際のパラメータ

関数は複数の結果を返し、パラメーターをエレガントに受け入れます

# 函数返回多个结果,优雅的接受参数
def function1(param1, param2):
    param1 = param1 * 3
    param2 = param2 * 2 + 20
    return param1, param2
param1, param2 = function1(2, 3)
print(param1)
print(param2)

パラメータを指定します(パラメータなし、必須パラメータ、指定された実際のパラメータ、デフォルトパラメータ、可変パラメータ)

# 无参
def function1():
    print(' 没有参数 ')
print('无参无return返回结果:' ,function1())
# 指定实参
param1,param2 = function1(param2 = 4, param1 = 2)
print(param1, param2)
# 行参默认值  
# 行参顺序:默认参数在后
def function1(param1=4, param2=4):
    param1 = param1 * 3
    param2 = param2 * 2 + 20
    return param1, param2
param1,param2 = function1()
print(param1, param2)
# 可变参数
def function2(*param):
    print(param)
# 没有*输出结果:((1, 2, 3),)
function2((1,2,3))
function2(*(1,2,3))
# 关键字可变参数
def function3(**param):
    # 返回结果:{'x': 1, 'y': 2, 'z': 3}
    print(param)
    # dict
    print(type(param))
function3(x=1, y=2, z=3)
# 什么都不传返回 {}
function3()

ここでのピットを避ける必要があります

# 避坑 必须参数 > 可变参数 > 默认参数
def function3(param1, *param3, param2=2):
    print('必须参数:', param1)
    print('可变参数:', param3)
    print('默认参数:', param2)
# param1 = str,param3 = 1,2,3,param2 = param
function3('str', 1, 2, 3, 'param')
# 输出结果:必须参数: str ,可变参数: (1, 2, 3, 'param') ,默认参数: 2 不符合预期
function3('str', 1, 2, 3, param2='param')

3.Python関数プログラミング

関数自体を変数に割り当てることができます (つまり、変数が関数を指すことができます)。実際、関数名自体は関数を指す変数です。

関数は別の関数をパラメータとして受け入れることができます。このような関数は、次の例のように高階関数と呼ばれます。

3.1 ラムダ式 - 無名関数

# 匿名函数
function = lambda x, y: x + y
print(function(1,2))

3.2 マップとラムダ

マップ関数は 2 つのパラメータを受け取り、1 つは関数、もう 1 つは関数 でIterablemap渡された関数をシーケンスの各要素に順番に適用し、結果を新しいものとして返しますIterator

# map 使用
# 求arr每个元素平方
arr = [1, 2, 3, 4, 5, 6, 7, 8]
def square(x):
    return x * x
result = map(square, arr)
print(list(result))
# lambda 与 map 一起使用
result1 = map(lambda x: x * x, arr)
print(list(result1))
# lambda 与 map 一起使用 多个参数; 如果arr与arr1个数不同,只计算到最少个数,如下arr1个数比arr少 只会返回 5个元素,反之 arr个数比arr1少 只会计算到arr个数位
arr1 = [1, 2, 3, 4, 5, 6]
result2 = map(lambda x, y: x * x + y, arr, arr1)
print(list(result2))

リスト プッシュダウン メソッド。リスト、辞書、タプル、セットに適しています。

# 列表推导式 - list
arr = [1, 2, 3, 4, 5, 6, 7, 8]
result = [x * x for x in arr]
print(result)
# 添加条件判断(x指下标)
result1 = [x * x for x in arr if x >=4]
print(result1)
# 列表推导式 - dict
sex = {
    0 : '男',
    1 : '女',
    2 : '中性'
}
result2 = {value:key for key,value in sex.items()}
print(result2)

3.3 データを継続的に計算して削減する

Reduce を使用して functools ライブラリを導入する

from functools import reduce
# reduce 使用:必须有两个参数
# reduce 作用:连续的计算,只会得到一个结果
arr = [1, 2, 3, 4, 5, 6, 7, 8]
result = reduce(lambda x, y: x + y, arr)
# 计算如下:((((1 + 2) + 3) + 4) + 5)... + 6 + 7 + 8
print(result)
# reduce 第三个参数,起始值
result1 = reduce(lambda x, y: x + y, arr, 14)
# 计算如下:14 +((((1 + 2) + 3) + 4) + 5)... + 6 + 7 + 8
print(result1)

3.4 フィルターフィルターデータ

と同様にmap()filter()も関数とシーケンスを受け入れます。map()と異なる場合は、filter()渡された関数が各要素に順番に適用され、戻り値にTrue基づいてFalse要素が保持または破棄されます。

# filter 使用 第一参数必须返回bool
arr = [1, 0, 0, 1, 1, 4, 0, 5]
result = filter(lambda x:True if x==1 else False, arr)
print(list(result))

3.5. デコレータ

デコレーターは本質的には、コードを変更せずに他の関数が機能を追加できるようにする Python 関数です。デコレータを使用すると、関数自体とは関係のない類似したコードを多数抽出し、再利用し続けることができます。ログ挿入、パフォーマンス テスト、トランザクション処理、キャッシュ、権限の検証など、横断的な要件を持つシナリオでよく使用されます。

# 装饰器
# func指函数
def decorator(func):
    def wrapper(*args, **kwargs):
        # 执行函数内部逻辑 打印时间
        print(time.time(), args, kwargs)
        # 执行调用函数中逻辑 打印不同参数
        func(*args, **kwargs)
    return wrapper
# 一个参数
@decorator
def function(param):
    print('function : this is decorator ' + param)
# 两个参数
@decorator
def function1(param1, param2):
    print('function1 : this is decorator ' + param1)
    print('function1 : this is decorator ' + param2)
# 三个参数(可变参数)
@decorator
def function2(param1, param2, **kwargs):
    print('function2 : this is decorator ' + param1)
    print('function2 : this is decorator ' + param2)
    print(kwargs)
function('param')
function1('param1' , 'param2')
function2('param1' , 'param2', x=1,y=2,z=3)

 16.Pythonクラス

多くの初心者は、「カテゴリー」を学ぶときに混乱し始めます。「クラス」とは正確には何で、何に使用されるのでしょうか? そこで百度で必死に検索したところ、たくさん見つかりました。回答を見ると、その多くはオブジェクト指向や奇妙な概念について話していて、私はさらに混乱しました。

したがって、私の記事は、クラスとは何なのか、何ができるのか、そしてどのように使用するのかを、最も単純で一般的かつ暴力的な方法で理解できるようにすることを目的としています

まず第一に、Python の作者が「クラス」というものを設計したので、プログラミング中にこの必要性があるに違いないことを理解する必要があります。では、いつクラスを使用する必要があるのでしょうか? もちろん、クラスを利用できる場所はたくさんあります。ただし、コーディングの経験があまりない場合は、答えを直接教えます。複数の関数が同じデータ セットを繰り返し使用する必要がある場合、クラスを使用してそれを処理すると非常に便利です

中学校で誰もが遭遇したことがある三角形を解く例を考えてみましょう。

次の関数を実装するモジュールを作成する必要があります。三角形の 3 つの辺の長さ a、b、c を入力し、三角形の 3 つの角の角度、面積と周囲長を計算して返します。三角形。

「これはとても簡単です。通常はこれを行うだけです。入力三角形の辺の長さが 6、7、8 である場合:

def ...:    # 参照公式把五个函数定义出来,就不详细写了
    ...
def ...:
    ...

# 然后调用定义好的函数,传入边长数据
angleA(6,7,8)  # 计算角A
->0.8127555613686607  # 注意返回值为弧度

angleB(6,7,8)  # 计算角B
->1.0107210205683146

angleC(6,7,8)  # 计算角C
->1.318116071652818

square(6,7,8)  # 计算面积
->20.33316256758894

circle(6,7,7)  # 计算周长,额,好像有个数字写错了
->20  # 计算结果当然也就错了

これで終わりではありませんか? 計算に必要な5つの関数を順番に定義し、調整するだけです。しかし、よく見てみると、このように書くことの何が良くないのでしょうか? これが同じ三角形だということは皆さんもお気づきかと思いますが、角度、面積、周囲長を計算するたびに、その三辺の長さを入力しなければならず、非常に面倒な反面、非常に面倒です。 、誰かが注意していない場合、間違って書いた場合、当然結果は間違っています。

三角形の合同条件から、三角形の三辺が決まれば、その三角、面積、周長も決まることが分かります。したがって、同じ三角形の場合は、データを 1 回だけ転送するのが最善です。

これは簡単ではありませんか? それらをすべて 1 つの関数に記述するだけです。

def calculate(a,b,c):
    angleA = ...
    angleB = ...
    angleC = ...
    square = ...
    circle = ...
    return {'角A':angleA, '角B':angleB, '角C':angleC, '面积':square, '周长':circle}

result=calculate(6,7,8)

result['角A']
->0.8127555613686607

result['面积']
->20.33316256758894

さて、やり直しました、問題ないようです。もちろん問題ないようですが、よく考えてみると、上記の方法で「角度A」と「面積」だけを計算すれば、この2つの結果しか返ってこないのですが、実はそれが関数は実行中に、5 つの値すべてが実際に計算されます量が少ないならまだしも、数が多いと確実に効率に大きく影響します。

これについてはどうすればよいでしょうか? 賢明な方であれば、関数に 4 番目のパラメーター d を追加して、どれを計算する必要があるかをマークし、関数に if ステートメントを挿入して決定することを考えたことがあるかもしれません。

はい、もうコードは書きたくないです。元の非常に明確なロジックをこのように台無しにする必要があります。

これは使いやすく、効率的で、論理的に明確である必要があります。そこで考えた結果、関数を分けて書くべきだと考えました。しかし考えてみれば、これらの機能を組み込むには「トライアングルジェネレーター」という「大きなもの」があった方が良いのです。使用すると、パラメーターは三角形ジェネレーターに直接渡され、三角形ジェネレーターは渡された辺の長さに基づいて特定の三角形を生成します。入力された辺の長さのデータに加えて、生成された三角形は独自の 3 つの角度、面積も計算できます。 、周囲つまり、以下のような効果が期待できます。

# 定义一个“大的东西”,名字就叫triangle
...
...
# 一番神奇的操作,然后

tr1=triangle(6,7,8)  # 把三条边长传给这个大的东西,然后就生成一个三角形赋给tr1

このコード行では、辺の長さの値を「三角形ジェネレーター」triangle() に渡し、三角形を生成して、それを変数 tr1 に割り当てます。このとき、tr1は辺の長さが6、7、8の特定の三角形を表します

次に、この三角形 (つまり、渡されたばかりのデータ) の 3 つの辺の長さを簡単に確認できます。

tr1.a
->6

tr1.b
->7

tr1.c
->8

3 つの角度の角度を計算して表示します。

tr1.angleA()
->0.8127555613686607

tr1.angleB()
->1.0107210205683146

tr1.angleC()
->1.318116071652818

その面積と周囲長を計算して表示します。

tr1.square()
->20.33316256758894

tr1.circle()
->21

ここに、辺の長さが 8、9、10 である別の三角形が来ます。

tr2=triangle(8,9,10)  # 生成另外一个三角形

これら 2 つの三角形の面積の差を計算します。

tr2.square()-tr1.square()  # tr2是新生成的三角形,原来的tr1还在呢没删掉
->13.863876777945055

これは大胆なアイデアですね。しかし、それはどのように達成されるべきでしょうか? ここでクラスが使用されます。

しかし考えてみましょう、このアイデアは本当に賢明なのでしょうか?Python ではすべてがオブジェクトであり、文字列、リスト、辞書、ファイル IO などの組み込みオブジェクトを操作する場合、使用するメソッドはまったく同じではありません。ただ、「三角形」は私たちが作ったものです。この時点で、クラスが実際にオブジェクトをカスタマイズする機能を提供していることを理解できたかもしれません

さて、これ以上の話はやめて、上記の「魔法の操作」を詳しく説明しましょう。

import math  # 计算反三角函数要用到
 
class triangle:  # 定义类:三角形生成器
    def __init__(self,a,b,c):  # 成员函数,声明需要与外部交互的参数(类的属性)
        self.a=a  # 先看着
        self.b=b  # 这几个东西是干嘛的后面会讲
        self.c=c

    def angleA(self):  # 计算函数(类的方法)
        agA=math.acos((self.b**2+self.c**2-self.a**2)/(2*self.b*self.c))
        return agA

    def angleB(self):  # 公式看不懂的回去翻课本去
        agB=math.acos((self.c**2+self.a**2-self.b**2)/(2*self.a*self.c))
        return agB

    def angleC(self):
        agC=math.acos((self.a**2+self.b**2-self.c**2)/(2*self.a*self.b))
        return agC

    def square(self):
        p=(self.a+self.b+self.c)/2
        s=math.sqrt(p*(p-self.a)*(p-self.b)*(p-self.c))
        return s

    def circle(self):
        cz=self.a+self.b+self.c
        return cz

実際、これは簡単で、最初に含まれるパラメータを宣言してから、含まれる関数を記述するだけです。具体的な書き方のルールは多くの文献で紹介されているので、ここでは詳しく説明しません。

クラスは自己定義オブジェクトのルールであるため、最初にデータを渡し、ルールに従って特定のオブジェクトを生成します (インスタンス化と呼ばれます)。

tr1=triangle(6,7,8)

このように、三角形生成ルールに基づいて、渡された 3 辺の長さ、特定の三角形が生成され、辺の長さ、角度、面積が意味を持つようになります。

print(tr1.a)
print(tr1.b)
print(tr1.c)
print(tr1.angleA())
print(tr1.angleB())
print(tr1.angleC())
print(tr1.square())
print(tr1.circle())

->
6
7
8
0.8127555613686607
1.0107210205683146
1.318116071652818
20.33316256758894
21

要約すると、すべてのオブジェクトは、Python に組み込まれているものであっても、サードパーティのパッケージからインポートされたものであっても、クラスを使用して自分で定義してインスタンス化したものであっても、観察して要約すると、それらは 2 つの部分で構成されていることがわかります。 a、b、cなどのデータはオブジェクトが何であるかを決定し、残りの部分はangleA()、angleB()、angleC()などの関数であり、これらのデータをどのように扱うかを表現するために使用されます。オブジェクト指向プログラミングでは、オブジェクトのデータをオブジェクトのプロパティと呼び、オブジェクトが持つ関数をオブジェクトのメソッドと呼びますこれら 2 つの用語は、他のプログラミング言語でもよく耳にするかもしれませんが、オブジェクト指向は一種の概念であり、すべて接続されています。

次に、いくつかの質問があるかもしれません。

最初の関数 def __ init() __ は何をするのでしょうか?

名前が示すように、init は初期化を意味します。初期化関数とも呼ばれる init 関数は、クラスがインスタンス化されるときに、自動的に実行される関数です。インスタンス化するときにクラスにパラメータを渡すと、パラメータもこの関数に送信されて処理されます。したがって、init 関数には、print('instantiation completed') など、インスタンス化時に自動的に実行される任意の関数を記述することができます。

しかし、ほとんどの場合、インスタンス化するときに何をしたいのでしょうか? もちろん、データはクラスの属性に渡されるため、ほとんどの場合、init 関数はコンストラクターとして機能しますが、ここでは、渡されたデータを誰に渡すか、どのような前処理を行うかを指定できます。それは与えられますか?

その三角形を例に挙げると、三角形を生成するとき (インスタンス化)、インスタンス化の後ではなく、3 つの辺の長さを三角形ジェネレーター (クラス) に渡すことを希望します (tr1.a=6, tr1.b Assign) =7 のように値を 1 つずつ指定します。そこで、パラメータを渡すルールを init 関数に直接記述しました。

さらに、受信パラメータがインスタンス化された後は、表示できるだけでなく、再度変更することもできます。

tr1.a
->6

tr1.a=7
tr1.a
->7

その self とは何ですか? なぜ self.a と書く必要があるのでしょうか?

オブジェクトのプロパティを使用する場合、記述方法は上記のtr1.aと同様に「オブジェクト名.プロパティ名」となります。クラスを定義する場合も、一貫性を保つためにこの書き方を使用する必要があります。ただし、定義時にクラスがインスタンス化されていないため、オブジェクト名が不明であるため、任意の名前を記述できます (ただし、一貫性がある必要があります)。通常は self と記述します。

 17. ペナルティキックゲーム

コードに直接行きましょう

from random import choice


class PenaltyShootout:
    score = [0, 0]
    rest = [5, 5]
    direction = ['左', '中', '右']

    def kick(self):
        print('==== 玩家罚球 ====')
        you = input('选择你要踢的方向:(左、中、右)')
        print('你踢向了' + you)

        com = choice(self.direction)
        print('电脑扑向了' + com)

        if you != com:
            print('进球得分!')
            self.score[0] += 1
        else:
            print('被扑出去了...')
        print('比分: %d(you) - %d(com)\n' % (self.score[0], self.score[1]))

        if self.rest[0] > 0:
            self.rest[0] -= 1
            if self.score[0] < self.score[1] and self.score[0] + self.rest[0] < self.score[1]:
                return True
            if self.score[1] < self.score[0] and self.score[1] + self.rest[1] < self.score[0]:
                return True

        print('==== 玩家扑救! ====')
        you = input('选择你要扑的方向:(左、中、右)')
        print('你扑向了' + you)

        com = choice(self.direction)
        print('电脑踢向了' + com)

        if you == com:
            print('扑出去了!')
        else:
            print('丢球了...')
            self.score[1] += 1
        print('比分: %d(you) - %d(com)\n' % (self.score[0], self.score[1]))

        if self.rest[1] > 0:
            self.rest[1] -= 1
            if self.score[0] < self.score[1] and self.score[0] + self.rest[0] < self.score[1]:
                return True
            if self.score[1] < self.score[0] and self.score[1] + self.rest[1] < self.score[0]:
                return True
        return False

    def play(self):
        i = 0
        end = False
        while i < 5 and not end:
            print('==== 第 %d 轮 ====' % (i + 1))
            end = self.kick()
            i += 1

        while self.score[0] == self.score[1]:
            i += 1
            print('==== 第 %d 轮 ====' % (i + 1))
            self.kick()

        if self.score[0] > self.score[1]:
            print('玩家获胜!')
        else:
            print('玩家落败.')


PenaltyShootout = PenaltyShootout()
PenaltyShootout.play()

このコードには、学習したばかりの関数とクラスが使用されていることがわかります。コードについてはあまり説明する必要はありませんが、ビルダーはすでにロジックを理解していると思います。

18.次に何をすればいいですか? 

一定の学習期間を経て、正式にプログラミングの世界への扉を開き、次に学ぶ内容を広げました。この記事は終わりです。

ウェブ クローラー

~~続く~~

ゲーム開発

pygame_Little Y のプログラミング教室のブログ - CSDN ブログhttps://blog.csdn.net/m0_73552311/category_12139557.html?spm=1001.2014.3001.5482 cocos2d_Little Y のプログラミング教室のブログ - CSDN ブログhttps://blog .csdn.net/m0_73552311/category_12 174133 .html?spm=1001.2014.3001.5482データ分析

~~続く~~

ディープラーニング

~~続く~~

おすすめ

転載: blog.csdn.net/m0_73552311/article/details/132358768