hpprc/jawiki-books huggingface dataset:
ラテン語の時代区分

ラテン語>
下の表に、Wikipedia 英語版・仏語版・独語版・羅語版におけるラテン語の時代区分を掲げる。
※後世の人々から模範とされている古典ラテン語(前75年頃~後1世紀頃)が成立するより前のラテン語は、早期ラテン語(Early Latin)または古ラテン語(Old Latin, Archaic Latin)などと呼ばれているが、ここでは Wikipedia 独語版などに依拠して、早期ラテン語(前7世紀頃~前240年頃)と古ラテン語(前240年頃~前75年頃)の二つに区分する。
ラテン語 (Lingua Latina)は、インド・ヨーロッパ語族 (印欧語族:南ロシアの黒海・カスピ海の北岸で話されていたと想定される印欧祖語を共通のルーツと仮定する仮説上の言語グループ) のイタリック語派 に分類される言語である。印欧語系諸族 は、チャリオット(二頭立て戦闘用馬車)の拡がりと呼応するかのように各地に拡散した。イタリック語派は西暦 紀元前1千年紀にはイタリア半島に南下して、半島の中部・南部に定着したが、南部に入植していたギリシア人の植民市と北部の先住民エトルリア人(エトルスキ) に挟まれていた。
アペニン山脈
ティベリス川(テベレ川)
カルキディア文字 (西ギリシア文字)
エトルリア文字
(編集中)

早期ラテン語(ドイツ語 Frühlatein :前7世紀頃~前240年)は、古典ラテン語が成立する前の時期のうち、文字で記されたラテン語の文献資料が ごくわずかな刻文などに限定される 前7世紀頃から前3世紀中葉までを指す狭義の時代区分である。
前・文学期ラテン語(フランス語 Latin prélittéraire 「プレ文学期ラテン語」)とも呼ばれる。
プラエネステのフィーブラ(留め金)(前7世紀頃)に記された早期ラテン語の刻文とその解釈を下の表に示す。
(編集中)

(編集中)
古ラテン語(ドイツ語 Altlatein :前240年~前75年頃)は、古典ラテン語が成立する前の時期のうち、ラテン語の文学が現われてから、洗練された文章語としての古典ラテン語が確立される前までの 前3世紀中葉から前1世紀初頭まで を指す狭義の時代区分である。
前・古典期ラテン語(フランス語 Latin préclassique 「プレ古典期ラテン語」)とも呼ばれる。この時代を 前・古典期(フランス語 période préclassique 「プレ古典期」)といい、古代ローマ人がイタリア半島を統一してから地中海世界の覇者となって行った時代である。
前3世紀になると、都市国家ローマがイタリア半島を統一して、半島南部に入植していたギリシア人を通じてギリシア語とギリシア人の文化・文学を吸収することによって、ラテン語の文学「ラテン文学」が発生した。
前272年にローマ軍がタレントゥムを征服すると、捕虜となったギリシア人リウィウス・アンドロニクス (L. Livius Andronicus)は、奴隷としてローマ市でギリシア語とラテン語の教師となり、『オデュッセイア』などのギリシア文学をラテン語に翻訳したり、前240年にはギリシア演劇をラテン語に翻案して上演したため、「ラテン文学の創始者」と見なされている。
ギリシア系の詩人・劇作家 エンニウス(Q. Ennius)は、叙事詩『年代記』でローマ史をうたって、ウェルギリウスら後世の詩人に大きな影響を与え、「ラテン文学の父」と呼ばれた。
また、ギリシアのメナンドロスらの喜劇を翻案したプラウトゥス (T. Maccius Plautus)や テレンティウス (P. Terentius Afer)が喜劇作家として活躍した。
(編集中)
(編集中)
(編集中)

(編集中)

(編集中)

(編集中)
(編集中)
(編集中)
(編集中)
(編集中)
(編集中)
(編集中)
Python/基本事項

Pythonは、Unix、GNU/Linuxのディストリビューション、およびmacOSでは通常最初からインストールされていますが、他のオペレーティングシステムでは初めて利用する際には手動でのインストールが必要です。
GNU/Linuxデスクトップ環境では、コマンドターミナルを開き、以下のコマンドを実行することでPythonのインタープリタを起動できます。コマンド名はpythonの様にバージョンを含んでいないかもしれません。
これにより、Pythonの対話モードが開始され、プロンプトが「>>>」に変わります。ここでPythonコードを実行したり、インタラクティブに作業することができます。終了するには、「exit()」と入力します。
これらの方法でPythonをWindowsに導入することができます。インストールが完了したら、コマンドプロンプトやPowerShellからPythonを実行できるようになります。Pythonのバージョンや依存関係などについては、公式ドキュメントを参照することができます。
Pythonを実行する方法には、主に2つのアプローチがあります。
インタラクティブモード(REPL: Read-Eval-Print Loop)では、Pythonのコマンドを1行ずつ入力して実行することができます。以下は、インタラクティブモードでの実行手順です。

ソースファイルを作成して実行する場合は、以下の手順を参考にしてください。
Pythonのソースファイルの拡張子は ".py" です。これらの手順を踏むことで、Pythonのプログラムを作成し、実行することができます。
さきほどの「Hello World!」と表示するプログラムを実行した後、ソースコードを書き換えるとどうなるのでしょうか。
以下に具体的な手順を示します。
つまり、ソースコードを書き換えてから再度実行すると、新しいソースコードが反映されてプログラムが実行されます。
Pythonはインタプリタ言語であるため、プログラムを実行するたびにソースコードを解釈し直す特性があります。これにより、柔軟かつ効果的にプログラムを開発・実行することが可能となります。
Pythonでは、数値の四則演算が簡単に行えます。以下に、基本的な数値計算の例を示します。
インタラクティブ モードでは、コマンドターミナルでPythonを起動し、コマンドラインで1行ずつコードを入力することができます。数値の計算も同様に行えます。
また、整数と浮動小数点数を足したり引いたりする場合、Pythonは自動的に浮動小数点数に変換して計算します。例えば、「2 + 1.5」という計算では、整数の2が自動的に浮動小数点数の2.0に変換されて計算されます。
Pythonでは、割り算の商だけを求めたい場合、「//」演算子を使用します。これにより、小数点以下を切り捨てて整数部分の商を得ることができます。
実数の割り算を行う場合は、「/」演算子を使用します。
べき乗演算を行うための「**」演算子もあります。例えば、「2**3」という計算は2の3乗を表し、結果として「8」が得られます。
また、「2**-3」という計算は2の-3乗を表し、逆数の計算をして「0.125」が得られます。
さらに、「(-2)**0.5」という計算は-2の0.5乗を表し虚数項を含んだ複素数が得られます。
この計算結果に見られる 8.659560562354934e-17 は、計算誤差によるものです。Pythonの浮動小数点数演算は、厳密な数値表現が難しいため、微小な誤差が生じることがあります。
ここでの e-17 は、10のマイナス17乗を表しています。つまり、非常に小さな値であることを示しています。この誤差は計算機が二進数で浮動小数点数を表現する都合上生じるもので、数学的な理想値と実際の計算結果が微妙に異なることがあります。
これは浮動小数点数の特性であり、計算機が十進法ではなく二進法で数値を表現するために生じるものです。通常、このような微小な誤差は考慮範囲内とされ、数値計算において許容される範囲です。
これらの演算子を活用することで、様々な数値計算をPythonで効率的に行うことができます。
Pythonでは、3項以上の計算も可能です。複雑な計算式を書く場合は、演算の優先順位に注意が必要です。たとえば、「2 + 3 * 4」という式を計算する場合、「3 * 4」が先に計算されてから、「2 + 12」が計算されます。結果として、「14」という値が得られます。
演算子には、優先順位を決める規則がありますが、括弧を使用することで、明示的に優先順位を指定することもできます。例えば、「(2 + 3) * 4」では、括弧内が先に計算されてから全体が掛け算されます。
このように、括弧を使用することで計算の順序を明確にし、意図した結果を得ることができます。複雑な式や優先順位のわからない場合は、括弧を使用して計算順序を明示的に指定すると良いでしょう。
同じ優先度の演算子が連続して使用される場合、Pythonでは左結合(左から右に結合)が行われます。これは多くのプログラミング言語で採用されている結合方向の一つです。
例えば、次のような計算を考えます。
この場合、掛け算と割り算の演算子の優先度は同じですが、左結合のため、左から順に計算されます。具体的には、まず「5 * 3」が計算されてからその結果を「2」で割ります。結果として 7.5 が得られます。
同様に、次の例では加算と減算が同じ優先度の演算子ですが、左結合により左から順に計算されます。
具体的には、まず「10 - 5」が計算されてからその結果に「3」が加算されます。結果として 8 が得られます。
左結合は一般的な動作であり、数学的な式の記述と一致しているため、多くの場面で直感的に使える結合方向です。
C++/例外処理

例外処理(Exception handling)とは、プログラムに異常が発生したときに、現在の処理を中断してエラーメッセージを表示する処理のことです。
C++の例外処理のコードは、次のようになる。
throwによって、強制的にcatchに制御が移動するため、throw後に書かれたコードは実行されない。
throwによって、catchにエラーが送出される。tryからcatchへのエラーの送出は、変数データや文字列データなど1つのオブジェクトを値として渡す。上記のコードの例の場合では、数値「2」がtryからcatchへと渡される。 tryから渡されるデータの型と、catch()の丸カッコ内に記述されたデータの型が一致した場合、そのcatch文に記述された処理内容が実行される。 上記のコードの場合なら、tryから数値「2」が渡されたので、catch()の丸カッコ内には、int型が書かれている。
tryブロック内にif文がなくても、throwさえあれば、catchブロックにエラーを送出できる。 if文のない場合、次のような文例になる。
なお、さらにif文を実際の例外処理では使用するので、if文とtry,throw,catchの例外処理は、次のように組み合わされる事が多いだろう。
なお、上記のコードでは、エラー時の挙動を確認するために、if文の条件を1にすることで、わざとエラーを起こしている。

C++言語では、tryキーワードは、エラー判断を行わない。(他のプログラミング言語では、try構文がエラー判断を行うプログラミング言語もある。しかしC++言語では、tryキーワードはエラー判断を行わない。)
そのためC++言語で、次のような割り算のプログラムで、0で割り算をすることになるようなエラーになる数値を代入しても、 コード中にthrowがないので、catchブロック内のコードは、なにも実行されない。
読者は、上記のコードを実行してみて、数値入力を求められるので、0を入力してみよう。すると、catchブロック内にある「エラーが発生しました。」は表示されない。いっぽう、tryブロック内にある「計算が終わりました。」は表示され、計算が終わるとともにプログラムも終わる。

今までの話をまとめると、例外処理の構文は、次のようになる。
shared_ptrや一時的なオブジェクトのデストラクタを使ってJavaのfinally相当の機能を実現することができるので、構文を追加するまでもない。
Python/数値入力と文字入力と出力表示

Pythonで文字列の入力は、input() 関数を使用します。以下は、文字列を入力して表示する簡単な例です。
このコードでは、input() 関数を使ってユーザーに文字列の入力を求め、その結果を変数 user_input に格納しています。そして、print() 関数を使ってその入力を表示しています。
上記のコードを実行すると、プログラムはユーザーに対話的に文字列を尋ね、入力された文字列を表示します。
もしユーザーが Ctrl + D(UNIX系システム)または Ctrl + Z(Windows)を入力してEOFを発生させると、EOFError が発生します。
EOF(End of File)をハンドルするためには、try-except ブロックを使用して、EOFError をキャッチすることができます。以下はその例です。
このコードでは、try ブロック内で input() 関数を使ってユーザーに文字列の入力を求めています。もし EOFError が発生すると、それを except ブロックでキャッチして処理します。
これにより、ユーザーが入力を終了させたときにエラーが発生する代わりに、プログラムが graceful に終了します。
では、数値を入力させて、計算をさせたい場合、どうすればい良いのでしょうか?
文字列から整数への変換と計算を行うためには、int() 関数を使って文字列を整数に変換し、その後に計算を行います。以下はその例です。
このコードでは、まず input() 関数を使ってユーザーに整数の入力を求め、int() 関数でその文字列を整数に変換します。変換が成功すれば、計算と結果の表示を行います。もし "abc" のような整数以外の文字列が入力された場合は、ValueError が発生し、それを except ブロックでキャッチしてエラーメッセージを表示します。また、EOFが発生した場合も except EOFError ブロックで処理しています。
文字列から浮動小数点数への変換と計算を行うためには、float() 関数を使って文字列を浮動小数点数に変換し、その後に計算を行います。以下はその例です。
このコードでは、まず input() 関数を使ってユーザーに浮動小数点数の入力を求め、float() 関数でその文字列を浮動小数点数に変換します。変換が成功すれば、計算と結果の表示を行います。もし数値以外の文字列が入力された場合は、ValueError が発生し、それを except ブロックでキャッチしてエラーメッセージを表示します。また、EOFが発生した場合も except EOFError ブロックで処理しています。
Pythonでは、複数の変数や文字列を同時に表示するためには、print() 関数に複数の引数を渡すことができます。以下はその例です。
このコードでは、print() 関数に複数の引数を渡しています。各引数は,(カンマ)で区切られており、それぞれが表示される際にはスペースで区切られます。このようにして複数の変数や文字列を同時に表示することができます。
Python には文字列の中に式を埋込み文字列化する「フォーマット済み文字列リテラル(Formatted string literals; F文字列とも)」があります。
のように、fを引用符の前につける事で利用できます。 引用符は二重引用符でも一重引用符でも、どちらでも構いません(ただし、引用符の開始と終始における引用符の種類は一致している必要があります。)。 JavaScriptなどの「テンプレート・リテラル」に相当する機能です。
F文字列は Pyhon3.6 から導入されました。Python2.x系では利用できません。
場合によってはテンプレートリテラルを使いつつも '{' や '}' 自身を文字列中で使用したい場合があります。 その場合は、'{' は '{{'、'}' は '}}' と二重にします。
式の後に等号'='を付けることで式のテキストと評価後の値の両方を文字列化することができます。
最初に、文字列の % 演算子がありました。
次に、文字列のformatメソッドができました。
Python/変数と代入

Pythonにおける変数は、値に対して名前(または識別子)を付けたものです。変数を定義するには、単に変数名を使って値を代入します。以下は例です:
この例では、my_variable という変数に整数の値 42 が代入されています。変数は値を格納するだけでなく、後でその値を変更することもできます。
Pythonの変数には型がありません。つまり、変数自体には整数、文字列、リストなどの特定の型が割り当てられるのではなく、変数が保持する値がその型を持っています。これにより、同じ変数が異なる型の値になることが可能です。
このように、同じ変数が異なる型の値に変わることを「動的型付け」と呼びます。変数が保持する値の型は、実行時に決定されます。
変数を使うことで、データや計算結果を記憶し、再利用することができます。変数名は意味を持たせ、コードの可読性を向上させるために工夫されることが一般的です。
変数と参照について理解するためには、Pythonにおける変数の動作について知ることが重要です。
理解の鍵は、変数は値を持たず、値への参照を持つという点です。これにより、変数同士が同じオブジェクトを共有することができ、一方の変数を通じてオブジェクトが変更されると他方の変数にも変更が反映される可能性があります。
Pythonにはさまざまなデータ型が組み込まれています。以下は主なデータ型の一部です:
type()関数を使用すると、変数や値の型を取得できます。これを使って先程の例を確認してみましょう。
ここでtype()関数は、変数や値の型を返します。xは整数型 (int)、yは文字列型 (str)、zは浮動小数点数型 (float) です。
同じ変数に異なる型の値を代入する場合にも、type()を使用して型の変化を確認できます。
ここでzは最初にfloat型を持ち、後でstr型に変化しています。
Pythonにおける代入は、左辺の識別子に右辺のオブジェクトをバインド(結びつけ)する操作です。これは、変数が特定の値やオブジェクトを参照する仕組みを表しています。
例えば、以下のコードを考えましょう:
この場合、xという識別子(変数)に整数型のオブジェクト 5 がバインドされています。このバインディングにより、xを通じて 5 にアクセスできます。
また、代入によって同じオブジェクトが複数の識別子にバインドされることもあります。例えば:
ここで、aとbは同じリストオブジェクトを参照しています。これは、リストなどの変更可能な(mutable)オブジェクトが変数を介して変更されると、その変更が他の変数にも反映されるためです。
変数には意味のある名前を付けることは、コードの可読性を向上させ、保守性を高めます。意味のある名前を使うことで、コードを読んだりメンテナンスしたりする際に変数が表す内容や目的が明確になります。 例えば:
これらの変数名は、それぞれの変数が何を表しているかをわかりやすく示しています。コードが複雑になると、意味のある名前が特に重要です。
ただし、名前があまりにも長すぎたり複雑すぎたりすると、逆にコードの読みやすさを損なうことがあります。バランスを取りながら、適切な名前を選ぶことが重要です。
識別子(Identifiers)は、Pythonで変数、関数、クラス、モジュールなどに付ける名前を指します。Pythonの識別子にはいくつかのルールがあります:
以下は、識別子の例です:
これらの例では、それぞれ変数、変数、関数に使用されている識別子です。適切で意味のある名前を使い、コードを読みやすくするために、識別子には十分な注意が払われるべきです。
Python 3.0からはASCII範囲外の文字の一部も識別子に使用できるようになりました。これにはUnicode文字も含まれます。具体的には、以下の種類の文字が使えます:
ただし、この拡張を使用する際には、表示や編集の問題、正規化に関する問題に注意する必要があります。通常、ASCIIの範囲内に収める方が適切ですが、国際化や特定の文脈で必要な場合にはこの機能を活用することができます。
キーワード(Keywords)は、Pythonの構文規則の中に現れる特別なトークンで、識別子の様式に合致するにも関わらず、識別子には使用できない単語の集合です。 次に示すキーワードは識別子には使用できません。
Python 3.10 からは "ソフト・キーワード"(Soft keywords) として知られる概念が導入されました。ソフト・キーワードは、通常のキーワードと同じく構文上特別な意味を持つが、一般の識別子としても利用できる単語です。Pythonでは、以下の単語がソフト・キーワードとして扱われます:
これらの単語は、通常のキーワードとして特別な文脈で使われる場合にはキーワードとして解釈されますが、一般のコードの中で普通の識別子としても利用できます。これは、特にパターン・マッチング関連の新しい機能をサポートするために導入されました。
予約済み識別子クラス(Reserved classes of identifiers)は、キーワードやソフト・キーワード以外の識別子で特別な意味を持つものです。 予約済み識別子クラスは、先頭と末尾のアンダースコア文字のパターンによって識別されます。
アトムは、式の最も基本的な要素です。最も単純なアトムは、識別子またはリテラルです。括弧や大括弧、中括弧で囲まれた形式も、構文上はアトムに分類されます。
アトムとして出現する識別子は名前です。
名前がオブジェクトにバインドされている場合、アトムを評価するとそのオブジェクトが得られます。名前がバインドされていない場合、評価しようとすると NameError という例外が発生します。
組込み関数(例えば print)や、組込み型(例えば int)はキーワードではありません。 キーワードではありませんが、迂闊に組込み関数や組込み型と同じ名前の変数や関数を定義すると、次から関数が使えなくなります。 回避方法はあります。
回避方法はあるものの、読んだヒトが混乱するので組込み関数や型と重複した識別子は使わないように心がけましょう。
Python/リスト

リストの要素は、文字列だけ、あるいは数値だけでも、かまいません。
文字列だけのリストの場合、たとえば
また、リストは数値と文字が下記のように混在することも、別々の項なら可能です。
他のプログラミング言語だと、数値と文字列とが混在するデータ構造をつくるのにクラスを使わないといけない言語もありますが、しかしPythonではクラスを使わずとも、リストだけで数値との共存が可能です。
リストは、for文の対象となるコレクションとして使えます。

リストの要素に、あとから追加することもできます。
python のリストを希望の数だけ予め確保するには、myList = [0] * 100 の様に、初期値を持った配列に乗算演算子を作用し、所望の個数を指定した式の値を与えます。
勿論、律儀に要素を1つづつ追加する方法も有効です。
リストの要素を、あとから削除することもできます。次のコードのようにpop()を使うと、リスト末尾の要素を削除できます。
要素の末尾を削除したいリストのうしろに「.pop()」をつけ、ることで、要素の末尾を削除していけます。
なお、この.pop()のような、操作したい対象物のうしろにドット記号(.)と操作内容のキーワードをつける特別な関数のことをpythonでは、「メソッド」といいます。
myList.pop()をくりかえすと、さらに末尾から、削除していきます。

リスト( list )は、任意のオブジェクトをゼロ個以上、順次付けて保持できるコレクションです。
リストは、要素を ,(カンマ) で区切り全体を [ ] で囲みます。 要素の型は同じである必要はありません。
リストの各要素を、代入・置き換えすることもできます。
リストの中にリストを入れることも出来ます。ただし、下記のように入れたリストの項目数が等しくなるようにする必要があります。
リストの中にリストを入れたものを2次元リスト(または2重リスト)といい、
リストの中にリストを入れたもののなかに、さらにリストを入れたものを3次元リストと言います。
組込み関数mapを使うと、iterableオブジェクトの全ての要素に、一括で何かの関数を適用する事ができます。
abs のような組込み関数だけでなく、ユーザー定義関数やlambdaもmap関数の第一引数にすることができます。
組込み関数filterは、iterableオブジェクトの要素の中から、条件に適合するものだけを選び出して、新たなリストを作ります、
上記のmap関数とfilter関数の使用例はリスト内包表記をつかうと
と表現できます。 for式やif式、if-else式(条件演算子)はリスト内包表記と組合わせると関数呼出しを使わないでもイテレーションやケース分けができます。
絶対値を求める部分も、
とインラインで表現できます。
他のプログラミング言語とPythonの類似点と差異をリストを中心に比較します。
宣言と初期化の部分に注目し様々な差異がありましたが、要素の参照は、
の構文で、この部分はどの言語でもほぼ同じですが、FortranとBASICでは、
のように丸括弧になります。
Pythonに「配列」というデータ型は存在しません。C言語などに、配列というデータ型があります。
言語によっては、「配列」データ型と「リスト」データ型とが別個に存在するものもあります(たとえば Kotlin という言語には、配列(array)データ型と、リスト list データ型とが別々に存在します) なお、kotlin は現在では、Android スマートホンのアプリケーションプログラムの開発などで、よく使われる言語です。
また、Goには「リスト」はなく「スライス」slice があります(Goのスライスの機能はPythonやkotlinの「リスト」と一見似ていますが、Goのスライスは「要素の型が一致している必要がある」ので本質的に「リスト」とは違い、異種リストの実装には interface{} を使います)。
Goには、配列型と「スライス」slice の2つのデータ型がありよく混同されますが、スライスは要素のアクセスは線形時間 O(n)、配列の要素のアクセスは定数時間 O(1)であることが大きな違いです。
リストや配列に類似した型は、要素の参照にかかる時間によって
Python/ファイルの書き込みと読み込み

ファイルを書くにも読むにも、まず、そのファイルを開く必要があります。 ファイルを開くには、組込み関数 open() を使います。 もしopen()をするときにその名前のファイルがなければ、ファイルを作成されます。
open()の2番目の引数にある「"w"」は、「書込みモード」という意味です。 open()の戻り値は f に保持されます(f の型は _io.TextIOWrapper クラスです)。
ファイルに書込むには open() の戻り値 f を組込み関数 print() のキーワード引数 file に与えます。 組込み関数 print() は今まで何度も出てきましたが、キーワード引数 file には何も指定していなかったのでディフォルトの sys.stdout (標準出力)が仮定されていました。
オープンしたファイルは必ずクローズする必要があります。 この例では、with文を使っているのでブロックを抜けると自動的にクローズされます。
カレントディレクトリを見ると、「create.txt」という名のファイルが作成されており、開くと「hello」と書かれているはずです。
ここでは組込み関数 open() の第二引数『モード』を与えていませんので、ディフォルトのモード "r"(読込み)になります。 open() の戻り値 f をレシーバーにメソッド readline() を呼び出すと、ファイルから1行ずつ読み込むことができます。
上の例では、ファイルから一行だけ読み込み表示していましたが、全ての行を表示するには
のように for文 を使います。 print() 関数のキーワード引数 end に を渡しているのは s には改行が含まれているため、 print() のディフォルトの動作「改行を追加する」をキャンセルするためです。
Python/例外処理

例外処理(れいがいしょり、exception handling)とは、プログラム実行中に予期せぬ異常が発生した場合に、通常の実行フローを中断し、エラーメッセージの表示や適切な処理を行うプログラムの手法です。
raise文は、プログラムの実行中に発生したエラーや問題を示し、その場で例外を引き起こします。例えば、条件に合致しない場合や予期せぬ状況であれば、raise文を使って例外を発生させることができます。
後述のtry/except ブロックなしで raise を実行すると、エラーが現在のコンテキストから伝播し、エラーが発生したポイントからコードの実行が停止されます。これにより、通常の実行フローが中断され、エラーがコンソールに表示されたり、上位の呼び出し元でエラーがキャッチされるまで、エラーが伝播します。
tryとexceptは、Pythonにおける例外処理を行うための構文です。tryブロック内のコードを実行し、もし例外が発生した場合に備えてそれをキャッチするためのものです。
基本的な構文は以下のようになります。
例外が発生する可能性があるコードをtryブロックに記述し、もし例外が発生した場合、その種類に応じたexceptブロックが実行されます。exceptブロックでは例外の種類を指定し、その例外が発生した際に実行するコードを記述します。
例えば:
この例では、ゼロ除算の例外が発生する可能性があるため、tryブロックで計算を行っています。もしゼロ除算のエラーが発生すれば、exceptブロックが実行され、エラーメッセージが表示されます。
Pythonの例外処理には、tryやexceptに加えてelse節とfinally節もあります。else節は、tryブロック内で例外が発生しなかった場合に実行される部分です。
基本的な構文は次のようになります:
else節は、tryブロック内で例外が発生せず、正常に処理が完了した場合に実行されます。例外が発生した場合はexceptブロックが実行され、例外が発生しなかった場合はelseブロックが実行されるという流れです。
例えば:
この例では、tryブロック内でゼロ除算が行われていないため、exceptブロックは実行されず、代わりにelseブロックが実行され、計算結果が表示されます。最後にfinallyブロックが実行され、"処理が完了しました"というメッセージが表示されます。
Pythonにおける例外の場合分けは、tryとexceptを使用して行います。exceptブロックは、特定の例外が発生した場合にそれをキャッチして処理するために使用されます。また、exceptブロックは複数指定することもできます。
例えば:
上記の例では、tryブロック内でゼロ除算が行われています。しかし、ZeroDivisionError以外のエラーが発生する可能性もあるため、複数のexceptブロックで異なる例外をキャッチするようにしています。exceptブロックの最後にExceptionを指定することで、すべての予期せぬ例外をキャッチすることができます。
また、exceptブロックで例外をキャッチするだけでなく、例外の情報を取得したり、適切な処理を行ったりすることもできます。
この例では、ユーザーから整数の入力を受け取り、その入力に応じて計算を行います。ValueErrorやZeroDivisionErrorなどの特定の例外に応じてメッセージを表示し、それぞれの状況に適した対処を行っています。elseブロックは例外が発生しなかった場合に実行され、finallyブロックは最後に必ず実行されます。
__builtins__ の要素のうち BaseExceptionのサブクラスを例外とし、例外と例外の __doc__ を表にしました。
このコードは、Pythonの__builtins__モジュール内の組み込み例外クラスを取得しています。具体的には、BaseExceptionクラスを継承している例外クラスを収集してリストに追加しています。
以下、このコードの動作を詳しく説明します。
つまり、このコードは組み込みの例外クラスを調べ、BaseExceptionクラスを継承しているものをリストexに追加するものです。例外ハンドリングや特定の例外クラスに対する処理を行う際に、組み込みの例外クラスを動的に取得する際に役立ちます。
Python/モジュールのインポート

モジュール化(modularization / modularize)は、全体をいくつかの構成単位に分割し、問題の規模と質を低減する分割統治法(divide-and-conquer method)の一つです。 Pythonでは、パッケージ(package)とモジュール(module)がモジュール化の実現に用いられます。 このうち、パッケージはモジュールの構造的な整理手段と考えられ、まずモジュールの用途・用法について解説し、モジュールをユーザーが定義する具体的な例も示します。
平方根などの数学に関する関数を使用したい場合は、モジュールmathをインポートします。
また、インポートされた関数をつかうときは、どのモジュールに由来する関数かを、pythonが判断できるようにするために、「math.sqrt()」のように、関数の前にモジュール名を書きます。 「.」はドット記号です。つまり、「モジュール名.関数名」のような書式になります。
モジュールmathでは、三角関数や指数関数なども、使えます。三角関数の単位は、ラジアンです。
サイコロの目のような、乱数をつかうには、モジュールrandomをインポートします。
たとえばモジュールmathから、sqrtだけをローカル名前空間へインポートしたい場合、コードが次のようになります。
ここまでは、標準ライブラリーのモジュールを紹介してきましたが、モジュールはユーザー自身で定義することもできます。
ここでは、与えられた数が素数か否かを判定するモジュール isprime を作ってみましょう。
Python/関数

関数は、プログラミングにおいて再利用可能なコードのブロックです。特定のタスクや処理を実行するために設計されています。関数は、特定の入力(引数)を受け取り、それを処理し、結果を出力(戻り値)として返すことができます。
関数の主な利点は次の通りです:
プログラミング言語によって関数の使い方や書き方は異なりますが、基本的な構造は似ています。関数は通常、次のような形式で定義されます:
例えば、Pythonでの関数定義はこのようになります。
この例では、add_numbersという関数が定義されており、aとbという2つの引数を受け取ります。これらの引数を使ってsumを計算し、その結果をreturn文で返します。
関数はその他にも多くの機能を持ち、異なる言語においても様々な特性を持っています。
(実行結果↓)
ある処理を繰返し行いたい場合、関数をつかうことで、記述をへらせます。 関数に作業させる際、関数外で定義された値を、上記のように利用する事ができ、そのような変数を「引数」(ひきすう)といいます。
上記のコードのうち、関数の定義部分は、
↑ この範囲が、関数の定義部分です。
引数のある関数の定義の書式は、
というふうになります。
「引数」は「ひきすう」と読みます。


下記のように、呼び出し時に引数の値を「menseki(3,5)」のように指定することもできます。


このようにpythonでは、関数内で数を置きかえる動作は、原則として、関数外の動作に影響を与えません。
組込み関数idを使うとオブジェクトのidを得ることができます。 2つの変数同士のidが同じ場合、2つの変数は同じオブジェクトにバインドされています。 大概の型のオブジェクトのidはメモリー上のアドレスですが、整数のようにそうではない型も少数ながらあります。
関数の戻り値(return value;返り値・返却値とも)は、return 文で返します。
return文があると、その行で関数が終了します。
関数の仮引数には名前(識別子)がありますが、仮引数を明示して関数の実引数を渡し呼出すことができます。 このような識別子を明示して呼びされた実引数をキーワード引数と言います。
関数の引数には、既定値(ディフォルト)を設けることができます。
関数の引数は可変長にできます。
関数の定義で固定された引数とともに、可変長引数を持つことができます。 ここで、残余引数は、可変長引数の後ろに定義される一連の引数です。 残余引数のために、アスタリスク(*)を使用します。
これで、my_func()関数は少なくともaとbの2つの引数を取り、残りの引数を可変長引数として扱います。
Pythonには、厳密な意味での多値返却はありませんが、タプルやリストを返すことで多値返しに近いことができます。
「多値返却風な処理」や「多値返しに近いこと」と歯切れが悪いのは、型アノテーションを
としたいのですが、
としなければならず、タプルを返していることを明確に意識する必要があるからです。
デコレーター(decorator)は、関数の内容を書き換えずに修飾するための仕組みです。 関数の引数に関数を指定します。既存の関数の前に@{デコレーター名}を付けることで、その関数を修飾することができます。
デコレターの文法は、以下のような糖衣構文です。
ローカル変数や仮引数にグローバル変数がシャドーイングされた場合、 関数の中でも、
と変数宣言することにより、その変数をグローバル変数として取り扱えます。
C言語には、このような機能(関数内で変数をグローバル宣言する機能)は、ありません。 C++では、グローバル変数の参照に :: を前置することでシャドーイングを回避できます。

nonlocal文は、内包関数から、自分を呼び出した関数のローカル変数にアクセスする仕組みです。 global文と違い、新たな変数を作ることはできません。
クロージャ(関数クロージャ)は、外側の変数を格納する関数です。
この絵柄に見覚えがある人もいると思います。デコレーターの引数(デコレート対象の関数)はラッパー関数は格納した変数です。
C++/初心者むけ/クラス

クラス( Classes )は、オブジェクト指向ブログラミング言語の分類の一つ「クラスベースのオブジェクト指向ブログラミング言語」の主要な概念の1つです。 C++もクラスベースのオブジェクト指向ブログラミング言語の1つです。
クラスは、データーやデーターへの参照変更を含む操作をまとめる手段です。 新しいクラスを定義することは、新しい型を定義することを意味し、その型を使って、インスタンスを作成することができるようになります。 各クラスのインスタンスには、その状態を維持するためのデーター メンバーを持つことができます。 また、クラスには、そのクラスに属するインスタンスの(あるいはクラスそのものの)状態を参照および変更するためのメンバー関数を持つことができます。
コンストラクターは、クラスをインスタンス化するための特別なメンバー関数で、クラス名が関数名になります。
一様初期化は、配列の初期化をよりスマートにかけます。
クラスにはインスタンスの持つメンバーとして関数も持つことができます。この関数のメンバーのことをメンバー関数と言います。 メンバー関数を定義するには、関数を定義したようにクラス定義中に定義します。する方法とクラス定義中ではメンバー関数の宣言だけ行い、クラス定義の外で実装する方法があります。
カプセル化の結果、クラスのデーターメンバーへのアクセスが制限されましたが、様々な事情でデーターメンバーを参照あるいは変更する必要が出てきます。 このような時のために、セッター・ゲッターあるいはアクセサーと呼ばれるメンバー関数セットを用意しておくことが多く行われます。
アクセサーが返す値・設定する値が必ずしもデーターメンバーと対応している必要はありません。
[TODO:コピーコンストラクター・代入演算子のオーバーロード]
C++では、coutやcinなどのオブジェクトも、名前空間で分類されています。
たとえばオブジェクトcoutは、正式にはstd::coutというオブジェクトです。つまり、coutはstd名前空間に所属しています。 『C++/はじめに』では説明を省略していました。 using namespace std; とは、「名前空間が省略された場合、グローバル名前空間に識別子がなかったら std 名前空間の中から識別子を探す」という意味の宣言だったのです。
stdとは、標準ライブラリ(standard library)を意味する略語です。
cinも同様に、std::cinというオブジェクトです。つまり、cinはstd名前空間に所属しています。
スコープ演算子::をつかうことから分かるように、std名前空間に含まれるオブジェクトとして、coutやcinを扱っています。
書式は、
です。
プログラミング言語に用意されている 標準ライブラリのオブジェクトは、膨大にあるので、名前空間によって分類する必要があり、使用時には本来、その名前空間名をつける必要があるのです。 なぜなら、そうしないと、もし、自分で新しく関数を定義しようと思ったときに、名前につけようと思ってた識別子が、すでに標準ライブラリで使われている可能性があるからです。
このような工夫を、(使いたい名前が既に他の用途で使われてしまっているような事態をふせぐための工夫を)「名前の衝突をふせぐ」などと、言います。
名前空間は、ユーザープログラムからも定義できます。
名前空間は、入れ子に出来ます。
C++14 から、入れ子名前空間の簡略表記が使えるようになりました。
既存のクラスをベースに新しいクラスを作成することをクラス継承( class inheritance )といいます。
組合せ的にプロテクテッド継承もありますが、派生クラスの定義での基底クラスのアクセス修飾子は「派生クラスのインスタンス経由でアクセスできるか?」の違いなのでプライベート継承との違いはありません。
また、継承先の派生クラスで望ましくないアクセスやオーバーライドが行われないことを「期待」するのではなく、final でクラスかメンバーを保護する「防衛的」な実装が望まれます。
C++の継承では、複数のクラスを基底クラスとし派生クラスは作成することが可能です。
複数のクラスからの継承を多重継承といいます。
多重継承は、多重継承でないと実現できない命題が想定しにくい上に、2つの継承元に同じ名前のメンバーがあった場合(衝突があった場合)の解消法方法に一般則がないこと、さらに継承元の2つのクラスが共通するクラスから派生していた場合の問題(ダイヤモンド継承問題)など、多くの問題が多重継承にはあるので、「多重継承が設計上の最適な選択か?」を自問してから使うようにしましょう。
C++に、「Go/メソッドとインターフェース」の「都市間の大圏距離を求めるメソッドを追加した例」を移植してみました。
C++/構造体・共用体

C++の構造体(struct)は、メンバーがディフォルトのアクセス指定子が public な class です。 class のディフォルトのアクセス指定子は private です。 class と struct の違いはこれだけです。
C++の共用体(union)は、基本的にC言語の共用体と同じです。 ただし、C++では構造体がほぼクラスのように扱われるようになったので、ほとんどの共用体もクラスとして扱われます。 つまり、アクセス制限を指定したり、メンバー関数を持つことができるのです。 一方で、当然ながら、共用体には固有の制限があります。
C++の共用体は以下の制限を持ちます。
有機化学/有機化学とは

有機化学とは、有機化合物を取り扱う、化学の一分野である。 有機化合物とは、炭素Cを含む化合物のうち、炭素の単体・炭素の酸化物・炭酸塩などを除く化合物のことである。 有機化合物は主に炭素C、水素H、酸素O、窒素N、ハロゲンなどの元素から成り立っている。 有機化合物のほとんどは分子として存在し、融点や沸点が低い。
有機化合物は、炭素原子の共有結合を主な骨格としている。 炭素は4本の価標をもつので、単結合・二重結合・三重結合を作る。 炭素原子間に単結合のみを持つ有機化合物を飽和化合物、二重結合や三重結合を含む化合物を不飽和化合物という。
一方、有機化合物は炭素原子が輪を作る環式化合物と輪を作らない鎖式化合物(脂肪族化合物)とに分類することも出来る。 環式化合物はさらにベンゼン環を含む芳香族化合物と脂環式化合物に分類出来る。
まとめると次のようになる。
官能基とは、有機化合物のおおよその特徴を決める原子団であり、同じ官能基を持つ化合物は特徴が似通っている。 炭化水素基は炭素と水素のみで構成される基である。 有機化合物を化学式で表す場合、炭酸水素基と官能基を合わせた示性式で表す。
官能基や炭化水素基をまとめてみた。有機化学_基 (2005-05-31)
C言語/開発環境

環境構築はプログラミング学習で最大の難関です。 環境構築がうまくいかず、プログラムを書き始める前に諦めてしまうことも少なくありません。
現在はオンライン実行環境 (Playground)が提供されており、環境構築をせずにC言語を試せるようになりました。 これらはインストールが必要なく、OSに関わらず利用できるため、PCはもちろんスマートフォンやタブレットでもC言語を学べます。 本格的なプログラムを書くには機能不足ですが、C言語の文法や意味を学ぶには十分でしょう。
この項目では、簡易的なオンライン実行環境や簡易コンパイラのほか、加えて本格的なコンパイラとビルドツールを使った開発手法や統合開発環境についても概説します。

オンライン実行環境は、Webブラウザを介してアクセスし、プログラムの作成や実行が可能な環境です。通常、プログラミング言語やコードエディタが組み込まれており、ユーザーはブラウザ上でコードを書いて実行できます。
オンライン実行環境の利点はいくつかあります:
一部のオンライン実行環境では、コンパイラやランタイム環境が実際の開発環境と同じであることが保証されています。そのため、ローカル環境での実行と同じ結果が得られることが期待されます。
オンライン実行環境には、さまざまなものがあります。以下にいくつか代表的な例を挙げます:
C言語プログラムの開発は、以下の手順で行われる。
なおC++の場合、ソースファイルの拡張子が「.cc」「 .cpp」「 .cxx」あるいは「 .C」となる。
C言語での開発には、主に以下の要素が必要です。
これらの要素を組み合わせて、効率的なC言語の開発環境を構築することができます。
Visual Studio Community をインストールする手順は以下の通りです。
これで Visual Studio Community のインストール手順が完了しました。必要に応じて、追加の拡張機能やパッケージをインストールして、開発環境をカスタマイズすることもできます。
Visual Studio Community を効果的に利用するためには、これらの手順を熟知しておくことが重要です。開発環境の設定や使い方をマスターし、効率的なプログラミング作業を行いましょう。
Visual Studio Community を使用する際に、デバッグ セッションの終了時にコンソールが自動的に閉じてしまう場合があります。この問題を解決するためには、次の手順を行います。
これにより、デバッグ セッションの終了時にコンソールが自動的に閉じなくなります。これは、プログラムがエラーで終了した場合などにデバッグ情報を確認するために便利です。
Visual Studio Community を使用する際には、この設定を適切に行うことで、よりスムーズな開発作業が行えるようになります。
C言語でのプログラムのビルド手順は、一般的に以下のような流れになります。
これらの手順を順番に実行することで、C言語で作成したプログラムをビルドして実行することができます。 また、ビルド手順を自動化するために、ビルドツール(例: make)を使用することもあります。
異なるコンパイラには、それぞれ独自の特徴があります。
以下に、いくつかの主要なコンパイラの特徴を示します。
これらのコンパイラはそれぞれ異なる使用シナリオや特性を持ち、開発者はプロジェクトの要件や目標に応じて適切なコンパイラを選択することが重要です。


ChatGPT
福島大対策

本項は、福島大学の入学試験対策に関する事項である。 福島大学は、福島県福島市にある国立大学である。
福島大は国立大学である為、5教科7科目のセンター試験を受験することになる。福島大ではどの学群、クラスもセンター試験の配点が高い。そのためセンター試験対策の勉強を中心に力を入れること。2次試験は学群、クラスによって学科試験1科目のみの場合や、小論文または実技または面接のみが課される。小論文や2次試験の学科試験対策において過去問(赤本)をしっかりやっておこう。

前期試験について記述する。 英語 人文社会学群・人間発達文化類・文化探究=言語文化クラス(国語とどちらか1科目)と人文社会学群経済経営類(小論文とどちらか1科目)で課される。 人文社会学群・人間発達文化類・文化探究=言語文化クラス 120分で長文読解3題、和文英訳1題の計4題が出題される。長文読解問題は主に英文和訳、内容説明問題が出題され、記述量が多いのが特徴であるので過去問で研究することが肝要である。和文英訳問題は本文の英文に沿って英作文を作る必要があるので過去問で研究すること。高校の先生、予備校講師に添削してもらうと良い。 人文社会学群経済経営類 70分で長文読解1題、会話文の適語挿入問題1題、整序英作文1題、自由英作文1題の計4題が出題される。長文読解問題は主に英文和訳、内容説明問題が出題される。過去問で研究するとともに、人文社会学群・人間発達文化類・文化探究=言語文化クラスの長文読解問題も解くと良い。会話文の適語挿入問題と整序英作文問題は一般的な国公立大2次試験問題であるので、学校で配布される会話文、英文法・整序英作文の問題集等をマスターし、過去問演習をするとよい。自由英作文は2つのテーマから1つのテーマを選択し100語程度で英作文を書く。過去問を研究し、余裕があれば形式、分量が同等の電気通信大の自由英作文の過去問題を解くと良い。高校の先生、予備校講師に添削してもらうと良い。
数学 人文社会学群・人間発達文化類・数理科学クラスと理工学群で課される。 人文社会学群・人間発達文化類・数理科学クラス 120分で大問5題が出題される。試験範囲は数IIIIIIABである。2017年までは数IIIABと数IIIIIIABの2つから選択で出題されていた。ここでは数IIIIIIABについて記述する。小問集合2題、大問3題出題され、数IIIの微積分、極限、複素数平面、2次曲線と満遍なく出題され、数Bの数列との融合問題、2次曲線と微積分との融合問題、ベクトルがよく出題されているので、特に対策しておくとよい。それ以外の分野も小問集合で満遍なく問われているので分野の抜けがないように対策しておくこと。難易度は教科書レベルの問題から入試標準レベルである。 理工学群 数学と理科1科目で120分である。小問集合1題、大問3題の計4題が出題される。数IIIの微積分が必ず出題されるので特に対策しておくとよい。それ以外の分野も小問集合等で満遍なく問われているので分野の抜けがないように対策しておくこと。難易度は教科書本文から教科書の節末、章末、教科書傍用問題集のB問題レベルの問題が中心であるが、理科1科目と合わせて試験時間が120分のため、時間的余裕がなく、できる問題からすばやく正確に解く必要がある。したがって過去問演習の際は特に時間配分に注意し、時間を計って解こう。
理科 理工学群で課される。「基礎物理・物理」、「基礎化学・化学」、「基礎生物・生物」、「基礎地学・地学」から1科目選択し、数学と合わせて120分である。 物理 小問集合1題、力学から1題、力学以外から1題の計3題出題される。典型的なテーマの問題が多いが、説明問題も出際されるので過去問等で研究しておくと良い。また小問集合では「原子物理」も出題されるため、分野の偏りなく満遍なく対策すること。学校で配布される傍用問題集(リードα、セミナー等)をマスターしたら過去問演習にとりかかろう。数学と合わせて120分のため、過去問演習の際は特に時間配分に注意し、時間を計って解こう。 化学 理論分野から1題、理論分野と無機分野の融合問題が1題、有機化学から1題の計3題が出題される。計算問題、知識問題、説明問題がバランスよく出題されている。難易度は教科書本文の問いレベルから標準レベルの出題なので学校で配布される傍用問題集(リードα、セミナー等)をマスターしたら過去問演習にとりかかろう。説明問題がどの大問にも出題される。数学と合わせて120分のため、過去問演習の際は特に時間配分に注意し、時間を計って解こう。 生物 大問3題が出題される。知識問題、図を描く問題、計算問題、説明・論述問題とバリエーションが多い出題である。数学・生物を選択して解く場合、物理、化学選択よりも時間的余裕がないのが特徴である。過去問演習の際は特に時間配分に注意し、時間を計って解こう。
国語 人文社会学群・人間発達文化類・文化探究=言語文化クラス(英語とどちらか1科目)で課される。試験時間は120分である。論説文1題、古典から1題の計2題出題される。古典分野は古文と漢文の両方が出題され実質大問3題分である。 現代文は傍線部説明、内容説明問題で、一般的な国公立大2次試験である。記述量が多いので過去問と併用して説明・論述式の現代文の問題集をやっておくとよい 古文は口語訳、内容説明問題、古典常識を背景にした説明問題が出題されるので国語便覧で古典常識を確認するとよい。記述量が多いので、国公立大の過去問の多い古文の問題集で演習量を増やすと良い。 漢文は傍線部の漢文の書き下し文の作成、口語訳、内容説明問題が出題される。過去問だけでなく国公立大2次試験用の漢文の問題集で演習量を増やすと良い。