tag:crieit.net,2005:https://crieit.net/users/caliglacy/feed caliglacyの投稿 - Crieit Crieitでユーザーcaliglacyによる最近の投稿 2021-03-23T14:51:03+09:00 https://crieit.net/users/caliglacy/feed tag:crieit.net,2005:PublicArticle/16761 2021-03-21T07:36:40+09:00 2021-03-23T14:51:03+09:00 https://crieit.net/posts/HTML-605678f8cb851 【学習ノート】フロントエンド学習 <h1 id="概要"><a href="#%E6%A6%82%E8%A6%81">概要</a></h1> <p>フロントエンドの言語学習におけるメモを残す。</p> <h1 id="言語"><a href="#%E8%A8%80%E8%AA%9E">言語</a></h1> <ul> <li>HTML</li> <li>PHP</li> </ul> <h1 id="学習教材"><a href="#%E5%AD%A6%E7%BF%92%E6%95%99%E6%9D%90">学習教材</a></h1> <ul> <li>TechAcademy フロントエンドコース</li> </ul> <h1 id="参考になるページ"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%AA%E3%82%8B%E3%83%9A%E3%83%BC%E3%82%B8">参考になるページ</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://www.htmq.com/">http://www.htmq.com/</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.colordic.org/">https://www.colordic.org/</a></li> </ul> <h1 id="HTML"><a href="#HTML">HTML</a></h1> <h2 id="最小限の実装"><a href="#%E6%9C%80%E5%B0%8F%E9%99%90%E3%81%AE%E5%AE%9F%E8%A3%85">最小限の実装</a></h2> <pre><code><!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>タイトル</title> </head> <body> <p>本文です。</p> </body> </html> </code></pre> <h2 id="DOCTYPE"><a href="#DOCTYPE">DOCTYPE</a></h2> <p>HTMLのバージョンを示すための宣言であり、必須の要素である。<br /> <code><!DOCTYPE html></code>は、HTML5で記述されていることを示す。<br /> 参考:<a target="_blank" rel="nofollow noopener" href="http://www.htmq.com/html5/doctype.shtml">http://www.htmq.com/html5/doctype.shtml</a></p> <p>その後に続くhtml要素の中に、ページの本文を実装する。</p> <pre><code><!DOCTYPE html> <html> <!-- ここにHTML文書が入ります --> </html> </code></pre> <h2 id="コメント"><a href="#%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88">コメント</a></h2> <p>コメントを記述するには、<code><!--</code>と<code>--></code>の間にコメントの内容を書きます。<br /> Webページで右クリックして[ページのソースを表示]を選択すると、<strong>誰でもコメントを読めてしまう</strong>ことに注意すること。</p> <pre><code><!-- ここにHTML文書が入ります --> </code></pre> <h2 id="終了タグのない要素"><a href="#%E7%B5%82%E4%BA%86%E3%82%BF%E3%82%B0%E3%81%AE%E3%81%AA%E3%81%84%E8%A6%81%E7%B4%A0">終了タグのない要素</a></h2> <p>要素は基本的には開始タグと終了タグで囲まれるが、終了タグのない要素がある。<br /> 例えば以下の要素。</p> <pre><code><meta charset="UTF-8"> </code></pre> <p>他にも、画像を表示するimg要素も終了タグが不要である。</p> <h1 id="タグ説明"><a href="#%E3%82%BF%E3%82%B0%E8%AA%AC%E6%98%8E">タグ説明</a></h1> <h2 id="span要素"><a href="#span%E8%A6%81%E7%B4%A0">span要素</a></h2> <p>divなどと同じ、グループ化する役割を持つ。<br /> divやsectionとの違いは、要素の前後に改行が入らないこと。<br /> 参考:<a target="_blank" rel="nofollow noopener" href="https://html-coding.co.jp/annex/dictionary/html/span/">https://html-coding.co.jp/annex/dictionary/html/span/</a></p> caliglacy tag:crieit.net,2005:PublicArticle/16724 2021-03-08T08:20:39+09:00 2021-03-11T11:51:48+09:00 https://crieit.net/posts/480268aac1f1062ee5a7a655053362e3 下書き保存は使わないこと <h1 id="現象"><a href="#%E7%8F%BE%E8%B1%A1">現象</a></h1> <p>公開済みの記事の追記をする場合は、下書き保存をすると内容が保存されない(復元できない)場合がある。<br /> 下図は、下書き保存したが復元できない状態の様子。</p> <p><a href="https://crieit.now.sh/upload_images/575ecf6f94d2d89881ca72bfc5f1960d60455f4027bbf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/575ecf6f94d2d89881ca72bfc5f1960d60455f4027bbf.png?mw=700" alt="image.png" /></a></p> <h1 id="発生日"><a href="#%E7%99%BA%E7%94%9F%E6%97%A5">発生日</a></h1> <p>2021/03/08 8:15頃</p> <h1 id="原因"><a href="#%E5%8E%9F%E5%9B%A0">原因</a></h1> <p><del>不明。<br /> Crieitの仕様?</del><br /> <strong>Crieitの仕様である</strong>ことが判明。(2021-03-11追記)<br /> →未投稿の記事のみが一覧に表示される。(今回の記事は投稿済み)</p> <h1 id="対策"><a href="#%E5%AF%BE%E7%AD%96">対策</a></h1> <p>投稿の状態についての制約はないので、常に「登録」で記事の編集内容を確定させること。<br /> <del>ただし、詳しい調査は行っていないため、これが最適な対策であるかは未検証。</del><br /> (どの記事を更新中であったか埋もれて放置される場合があるため) 2021-03-11追記</p> <hr /> <h1 id="追記"><a href="#%E8%BF%BD%E8%A8%98">追記</a></h1> <p>記事を再編集すると、エディタに前回の内容が表示された。<br /> 本記事の登録時には前回の編集内容が表示されなかったので、時間差があるかもしれない。<br /> 「Ctrl + S」を忘れたときの絶望感は味わいたくないので(ちゃんと保存されていたとしても)、「更新」ボタンを押すようにすること。<br /> 前向きに考えるなら、一つ一つの事柄がコンパクトにまとまる可能性がある。</p> <p>下図は復元された様子。<br /> 保存前は、学習教材までしか記入していなかった。<br /> <a href="https://crieit.now.sh/upload_images/575ecf6f94d2d89881ca72bfc5f1960d60456148b01ed.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/575ecf6f94d2d89881ca72bfc5f1960d60456148b01ed.png?mw=700" alt="image.png" /></a></p> <h1 id="さらに追記(2021-03-11)"><a href="#%E3%81%95%E3%82%89%E3%81%AB%E8%BF%BD%E8%A8%98%EF%BC%882021-03-11%EF%BC%89">さらに追記(2021-03-11)</a></h1> <ul> <li>下書きの一覧に表示されるのは、未投稿の記事のみである。(Crieitの仕様)</li> <li>したがって、この記事に書いてある動作は仕様どおりであり、不具合ではない。</li> <li>記事投稿画面を開くと、保存された下書きデータを復元することができるため、作業に支障はない。</li> <li>現時点では機能説明やマニュアルは多分ないので、自分のように困った人がこの記事を発掘して解決してくれるといいな。</li> </ul> caliglacy tag:crieit.net,2005:PublicArticle/16722 2021-03-07T20:13:36+09:00 2021-03-17T15:00:36+09:00 https://crieit.net/posts/Python-6044b5609bdde 【学習ノート】Python学習 <h1 id="概要"><a href="#%E6%A6%82%E8%A6%81">概要</a></h1> <p>Pythonの言語学習におけるメモを残す。<br /> 主にC言語との違いが多い。</p> <h1 id="学習教材"><a href="#%E5%AD%A6%E7%BF%92%E6%95%99%E6%9D%90">学習教材</a></h1> <ul> <li>TechAcademy Pythonコース</li> </ul> <h1 id="オブジェクト"><a href="#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88">オブジェクト</a></h1> <h2 id="メソッドと関数の違い"><a href="#%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A8%E9%96%A2%E6%95%B0%E3%81%AE%E9%81%95%E3%81%84">メソッドと関数の違い</a></h2> <p>メソッドと関数の違いは、主に「.」(ドット)の有無。<br /> 「.」(ドット)は、助詞の「の」と読み替えることができる。</p> <pre><code>○○.△△ → ○○ の △△を実行する </code></pre> <ul> <li>関数</li> </ul> <pre><code>関数名(引数) </code></pre> <p>・メソッド</p> <pre><code>データ.メソッド名(引数) </code></pre> <h2 id="標準のメソッド"><a href="#%E6%A8%99%E6%BA%96%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89">標準のメソッド</a></h2> <p>Pythonにあらかじめ備わっているメソッドの例。</p> <h3 id="半角英字の操作"><a href="#%E5%8D%8A%E8%A7%92%E8%8B%B1%E5%AD%97%E3%81%AE%E6%93%8D%E4%BD%9C">半角英字の操作</a></h3> <p>大文字、小文字に変換した文字を出力するメソッド。<br /> メソッドは戻り値として出力するだけなので、コールしただけでは変数のデータは変更されない。(<strong>非破壊的メソッド</strong>)</p> <pre><code>>>> a = "Text" >>> print(a) Text >>> a.lower() 'text' >>> print(a) Text >>> a.upper() 'TEXT' >>> print(a) Text >>> a = a.upper() >>> print(a) TEXT </code></pre> <h1 id="制御文"><a href="#%E5%88%B6%E5%BE%A1%E6%96%87">制御文</a></h1> <p>制御構造(分岐やループ)に関する内容。</p> <h2 id="インデント"><a href="#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88">インデント</a></h2> <p>Pythonはインデントも制御構造の仕組みの一つとなっている。<br /> C言語がブレースでスコープを区切るのに対し、Pythonではインデントでスコープを区切っている。</p> <h3 id="正常なコード"><a href="#%E6%AD%A3%E5%B8%B8%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89">正常なコード</a></h3> <p>以下のコードは、エラーが発生しない正常なコードである。</p> <pre><code>score = int(input("点数を入力してください:")) if score >= 60: print("合格です") print("おめでとうございます!") print("処理を終了します") </code></pre> <h3 id="インデントを忘れた場合"><a href="#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88%E3%82%92%E5%BF%98%E3%82%8C%E3%81%9F%E5%A0%B4%E5%90%88">インデントを忘れた場合</a></h3> <p>if文のあとには、条件を満たした場合に実行する<strong>字下げされた</strong>命令が必要となる。<br /> 字下げをしなかった場合のコードを実行してみる。</p> <pre><code>score = int(input("点数を入力してください:")) if score >= 60: print("合格です") print("おめでとうございます!") print("処理を終了します") </code></pre> <p>字下げをしなかった場合はエラー(Indentationerror)になる。</p> <pre><code> File "<ipython-input-13-31fa8ffec306>", line 3 print("合格です") ^ IndentationError: expected an indented block </code></pre> <h3 id="インデントが不適切な場合"><a href="#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88%E3%81%8C%E4%B8%8D%E9%81%A9%E5%88%87%E3%81%AA%E5%A0%B4%E5%90%88">インデントが不適切な場合</a></h3> <p>また、字下げのレベルが不適切な場合もエラーになる。<br /> たとえば、以下のコードの<code>print("おめでとうございます!")</code>のインデントを、if文でもそれ以外でもないインデントにしてみる。</p> <pre><code>score = int(input("点数を入力してください:")) if score >= 60: print("合格です") print("おめでとうございます!") print("処理を終了します") </code></pre> <p>すると、どこにも当てはまらないインデントレベルの処理がエラーとなる。</p> <pre><code> File "<tokenize>", line 4 print("おめでとうございます!") ^ IndentationError: unindent does not match any outer indentation level </code></pre> <p>これについては、逐次処理においても同様である。</p> <pre><code>print("合格です") print("おめでとうございます!") print("ありがとうございます?") </code></pre> <p>やはり、インデントの必要がないところでインデントした命令がエラーとなる。</p> <pre><code> File "<ipython-input-12-91a21539abf4>", line 2 print("おめでとうございます!") ^ IndentationError: unexpected indent </code></pre> <h2 id="if文"><a href="#if%E6%96%87">if文</a></h2> <p>if文における注意点</p> <h3 id="elif"><a href="#elif">elif</a></h3> <p>C言語では<code>else if ~</code>であったが、Pythonは<code>elif ~</code>となる。(プリプロセスみたい)</p> <p>こんな感じ。</p> <pre><code>season = input("季節を入力してください:") if season == "春": print("春はあけぼの") elif season == "夏": print("夏は夜") elif season == "秋": print("秋は夕暮れ") elif season == "冬": print("冬はつとめて") else: print("エラー") print("処理を終了します") </code></pre> <p><code>else if ~</code>と書くとエラーになってしまう。</p> <pre><code>season = input("季節を入力してください:") if season == "春": print("春はあけぼの") elif season == "夏": print("夏は夜") elif season == "秋": print("秋は夕暮れ") else if season == "冬": print("冬はつとめて") else: print("エラー") print("処理を終了します") </code></pre> <p>実行結果:</p> <pre><code> File "<ipython-input-31-ec4d3fac25a4>", line 9 else if season == "冬": ^ SyntaxError: invalid syntax </code></pre> <h2 id="for文"><a href="#for%E6%96%87">for文</a></h2> <p>繰り返し構造のうち、for文について説明する。</p> <h3 id="in"><a href="#in">in</a></h3> <p>in は、その後ろに続く要素から1件ずつ取り出して変数に格納する。</p> <h4 id="数字の列挙"><a href="#%E6%95%B0%E5%AD%97%E3%81%AE%E5%88%97%E6%8C%99">数字の列挙</a></h4> <p>例えば、数字が並んでいる場合。</p> <pre><code>for i in 0, 1, 2: print(i) </code></pre> <p>数字を1つずつ、iに代入して繰り返している。</p> <pre><code>0 1 2 </code></pre> <h4 id="range()を使った場合(引数が1つ)"><a href="#range%28%29%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%EF%BC%88%E5%BC%95%E6%95%B0%E3%81%8C1%E3%81%A4%EF%BC%89">range()を使った場合(引数が1つ)</a></h4> <p>また、数字の列挙であれば<code>range()</code>が便利である。<br /> ただし、<code>range()</code>は単体で数字の列挙を出力する関数というわけではないので注意。</p> <pre><code>for i in range(5): print(i) </code></pre> <p>引数が1つの場合、<code>range()</code>は0から引数で指定された数値までを列挙する。<br /> また、forループは<code>range()</code>で列挙された数値をすべて使用するまで繰り返される。</p> <pre><code>0 1 2 3 4 </code></pre> <h4 id="range()を使った場合(引数が2つ)"><a href="#range%28%29%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%EF%BC%88%E5%BC%95%E6%95%B0%E3%81%8C%EF%BC%92%E3%81%A4%EF%BC%89">range()を使った場合(引数が2つ)</a></h4> <p>引数が2つの場合、第1引数の数値から、第2引数<strong>未満</strong>の数値を列挙する。</p> <pre><code>for i in range(3, 5): print(i) </code></pre> <p>この場合、列挙する範囲は「3以上5未満」である。</p> <pre><code>3 4 </code></pre> <h4 id="range()を使った場合(引数が3つ)"><a href="#range%28%29%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%EF%BC%88%E5%BC%95%E6%95%B0%E3%81%8C%EF%BC%93%E3%81%A4%EF%BC%89">range()を使った場合(引数が3つ)</a></h4> <p>引数が3つの場合、1つめと2つめは同様で、3つめは増分を示す。</p> <pre><code>for i in range(1, 5, 2): print(i) </code></pre> <p>この場合、列挙する範囲は「3以上5未満で増分2」である。</p> <pre><code>1 3 </code></pre> <p>また、増分を負の数(デクリメント方向)にすることも可能(範囲指定に注意)。</p> <pre><code>for i in range(5, 1, -2): print(i) </code></pre> <p>この場合、列挙する範囲は「5以下1より大きく増分-2」である。</p> <pre><code>5 3 </code></pre> <h2 id="try文"><a href="#try%E6%96%87">try文</a></h2> <p>「例外」が発生した場合に対応するための制御文。</p> <h3 id="エラーの種別"><a href="#%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E7%A8%AE%E5%88%A5">エラーの種別</a></h3> <ol> <li>文法エラー :ソースコードの記述に問題がある。</li> <li>実行エラー(例外) :処理内容に問題がある。(キャストの失敗など)</li> </ol> <h3 id="エラー発生時の対応"><a href="#%E3%82%A8%E3%83%A9%E3%83%BC%E7%99%BA%E7%94%9F%E6%99%82%E3%81%AE%E5%AF%BE%E5%BF%9C">エラー発生時の対応</a></h3> <p>実行エラー(例外)が発生すると、プログラムは処理を終了してしまう。<br /> しかし、try文を用いることで、上記エラーが発生しても処理を継続することができる。(try文が終了したあとの処理も)</p> <h3 id="try文の使い方"><a href="#try%E6%96%87%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9">try文の使い方</a></h3> <p>ざっくり以下のとおりである。</p> <pre><code>try: エラー有無の条件となる処理 except エラー名: 指定したエラーが発生に対する処理 except: それ以外のエラーに対する処理 else: エラー未発生時の処理 finally: エラー有無に関わらず必ず実行する処理 </code></pre> <p>エラー有無の条件となる処理の例:</p> <pre><code>score = int(input("数値を入力してください:")) </code></pre> <p>キーボードから数値以外が入力されると、キャストに失敗し、実行エラー(例外)が発生する。</p> <p>指定のエラーの例:</p> <pre><code>except ValueError: print("エラー:数値を入力してください") </code></pre> <p>値に関するエラーであるValueErrorなどがある。<br /> 参考:<code>https://www.sejuku.net/blog/72383</code><br /> <code>except:</code>よりも前に記述しないと、先に左記に当てはまって実行されないので注意すること。</p> <h1 id="シーケンス"><a href="#%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9">シーケンス</a></h1> <h2 id="テキストシーケンス型"><a href="#%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E5%9E%8B">テキストシーケンス型</a></h2> <p>配列に近いが、それ以上の役割がある。<br /> 参考:<code>https://techacademy.jp/magazine/19204</code></p> <h2 id="文字列のスライス"><a href="#%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9">文字列のスライス</a></h2> <p>文字列のうち、特定の文字や文字列を取り出す操作をスライスという。</p> <h3 id="文字のスライス"><a href="#%E6%96%87%E5%AD%97%E3%81%AE%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9">文字のスライス</a></h3> <p>実際に文字列を用意して、スライスしてみる。</p> <pre><code>s = "abcdefghijklmnopqrstuvwxyz" print(s[0]) print(s[1]) print(s[2]) </code></pre> <p>C言語でいう配列と同じ要領で扱われる。</p> <pre><code>a b c </code></pre> <p>ただし、文字列の持つ領域を超えるとIndexError(インデックスエラー)となる。</p> <pre><code>print(s[25]) print(s[26]) </code></pre> <p>文字数は26字であったため、27番目(<code>s[27]</code>)をスライスするとエラーとなる。</p> <pre><code>z --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-6-7ba20cf8c27e> in <module> 1 print(s[25]) ----> 2 print(s[26]) IndexError: string index out of range </code></pre> <p>C言語は配列の変数にインデックスを付けたものは単なる簡便法であり、変数の持つ領域を超えてもアクセスは可能である。<br /> これに対してPythonのように領域を超えた場合にエラーとなるのはバグを防ぐのに有効である。つまり優秀。</p> <p>マイナスにすると末端から順にアクセスできる。<br /> この辺はスーパーマリオの感覚。(左端は右端とつながっている)<br /> ただし、負方向も存在しない領域にアクセスするとインデックスエラーとなるので注意。</p> <pre><code>print(s[0]) print(s[-1]) print(s[-2]) print(s[-26]) print(s[-27]) print(s[-28]) </code></pre> <pre><code>a z y a --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-8-6bd2365f764f> in <module> 3 print(s[-2]) 4 print(s[-26]) ----> 5 print(s[-27]) 6 print(s[-28]) IndexError: string index out of range </code></pre> <h3 id="文字列のスライス(連続)"><a href="#%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9%EF%BC%88%E9%80%A3%E7%B6%9A%EF%BC%89">文字列のスライス(連続)</a></h3> <p>一部の文字列をスライスする場合は、以下のように記述する。</p> <pre><code>文字列変数名[開始位置:終了位置] </code></pre> <p>このとき、取り出される文字列の位置は <strong>開始位置</strong> から <strong>終了位置 - 1</strong> である。(終了位置が紛らわしいけど)<br /> このあたりは <code>range()</code> と同じ要領。</p> <pre><code>print(s[0:7]) print(s[7:14]) print(s[14:7]) print(s[-5:-1]) print(s[-1:-5]) </code></pre> <p>ただし、開始位置と終了位置の<strong>大小関係</strong>を間違えると、文字列はスライスされないため注意。<br /> 正の数、負の数のいずれも、取り出せる方向は同じ(左から右)であると考えれば良い。</p> <pre><code>abcdefg hijklmn vwxy </code></pre> <p>また、開始位置や終了位置は省略が可能。<br /> このときも、文字列を取り出す方向は同じであることをイメージすること。</p> <pre><code>print(s[:10]) print(s[10:]) print(s[-5:]) print(s[:-20]) </code></pre> <pre><code>abcdefghij klmnopqrstuvwxyz vwxyz abcdef </code></pre> <p>開始位置と終了位置の両方を省略すると、すべての文字列が出力される。</p> <pre><code>print(s[:]) </code></pre> <pre><code>abcdefghijklmnopqrstuvwxyz </code></pre> <h3 id="文字列のスライス(増分指定)"><a href="#%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9%EF%BC%88%E5%A2%97%E5%88%86%E6%8C%87%E5%AE%9A%EF%BC%89">文字列のスライス(増分指定)</a></h3> <p>増分を指定することで、「何個おきに」取り出すといった操作ができるようになる。</p> <pre><code>print(s[0:10:2]) print(s[1:20:3]) </code></pre> <pre><code>acegi behknqt </code></pre> <p>なんと、増分を負方向に指定することで、逆方向の取り出しが可能。</p> <pre><code>print(s[-1:-6:-1]) print(s[-1:-10:-2]) </code></pre> <pre><code>zyxwv zxvtr </code></pre> <p>増分を指定する記法の場合も、開始位置・終了位置・増分量の省略が可能である。</p> <pre><code>print(s[::-1]) print(s[::]) </code></pre> <pre><code>zyxwvutsrqponmlkjihgfedcba abcdefghijklmnopqrstuvwxyz </code></pre> <h1 id="リスト"><a href="#%E3%83%AA%E3%82%B9%E3%83%88">リスト</a></h1> <p>シーケンスと似ているけど、違うもの。<br /> この辺も見とくと良い:<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.python.org/ja/3.8/tutorial/datastructures.html#more-on-lists">https://docs.python.org/ja/3.8/tutorial/datastructures.html#more-on-lists</a></p> <h2 id="リスト型"><a href="#%E3%83%AA%E3%82%B9%E3%83%88%E5%9E%8B">リスト型</a></h2> <p>リスト型の変数の値は [ と ] で囲んで表現される。</p> <pre><code>a = [2, 3, 4] print(type(a)) print(a) </code></pre> <p>どうやらリスト型というものがあるらしく、[ と ] を使って表現される。</p> <pre><code><class 'list'> [2, 3, 4] </code></pre> <p>数値と文字(文字列)の混在もできるみたいだが、明確な意図がない限りは 数値だけ、文字列だけ、のように1種類のみで要素を構成させることが推奨されるらしい。</p> <pre><code>b = [3, "test", 7, "hoge", "fuga", 10] print(b) </code></pre> <pre><code>[3, 'test', 7, 'hoge', 'fuga', 10] </code></pre> <p>空のリストも作成できる。(メリットがあるかはしらんけど)</p> <pre><code>c = [] print(c) </code></pre> <pre><code>[] </code></pre> <h2 id="list()を使った宣言"><a href="#list%28%29%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E5%AE%A3%E8%A8%80">list()を使った宣言</a></h2> <p>シーケンスを使用してリスト変数を作成する場合は、list()を使うと楽みたい。</p> <pre><code>d = list("Test") e = list(range(3)) print(d) print(e) </code></pre> <p>文字列やrange()がシーケンスであることは「シーケンス」の章を参照。</p> <pre><code>['T', 'e', 's', 't'] [0, 1, 2] </code></pre> <h2 id="リストのスライス"><a href="#%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9">リストのスライス</a></h2> <p>シーケンスのスライスと同様に、リストも要素を取り出すことをスライスするという。<br /> リスト変数内の要素の取り出しかた(アクセス方法)は、シーケンスの場合と同様である。</p> <pre><code>リスト変数名[番号] リスト変数名[開始位置:終了位置] リスト変数名[開始位置:終了位置:増分] </code></pre> <p>こんなかんじ。</p> <pre><code>b = [3, "test", 7, "hoge", "fuga", 10] b[0:5:2] </code></pre> <pre><code><br />[3, 7, 'fuga'] </code></pre> <p>ただし、空のリストには要素がないため、スライスはできない。</p> <pre><code>c = [] c[] </code></pre> <pre><code> File "<ipython-input-36-763d39ca79da>", line 2 c[] ^ SyntaxError: invalid syntax </code></pre> <h2 id="内包表記"><a href="#%E5%86%85%E5%8C%85%E8%A1%A8%E8%A8%98">内包表記</a></h2> <p>リスト作成時に、制御文を組み合わせることができる。</p> <h3 id="for文"><a href="#for%E6%96%87">for文</a></h3> <p>for文を使ってリストを作成することができる。</p> <pre><code>list1 = [i for i in range(11)] list2 = [(i * 2) for i in range(11)] print(list1) print(list2) </code></pre> <p><code>for i in range(11)</code>で繰り返すときの<code>i</code>の値を作成し、<code>i</code>または<code>(i * 2)</code>に代入したものを要素としてリストを作成している。</p> <pre><code>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] </code></pre> <h3 id="for文+if文"><a href="#for%E6%96%87%EF%BC%8Bif%E6%96%87">for文+if文</a></h3> <p>for文とif文を組み合わせたリスト作成も可能。<br /> if文はfor文よりも後に記述すること。</p> <pre><code>list3 = [i for i in range(11) if i % 3 == 0] list4 = [i for i in range(11) if i % 2 == 0 and i % 3 == 0] print(list3) print(list4) </code></pre> <p>for文の繰り返しに対し、if文の条件を満たす場合だけ、最初の式<code>i</code>に代入してリストを作成する処理である。<br /> 論理演算式も使用できる。</p> <pre><code>[0, 3, 6, 9] [0, 6] </code></pre> <h3 id="for文+if-else文"><a href="#for%E6%96%87%EF%BC%8Bif-else%E6%96%87">for文+if-else文</a></h3> <p>if-else文を使用する場合だけ特殊で、for文よりも前に書く必要がある。</p> <pre><code>list5 = ["even" if i % 2 == 0 else "odd" for i in range(11)] print(list5) </code></pre> <p>条件を満たす場合は<code>even</code>、そうでないときは<code>odd</code>であり、for文の条件に従って繰り返す。</p> <pre><code>['even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even'] </code></pre> <p><code>elif</code>は内包することができない。<br /> 3つ以上の条件を指定する場合は、以下のような書き方となる。</p> <pre><code>list6 = ["low" if i < 3 else "mid" if i < 8 else "hi" for i in range(11)] print(list6) </code></pre> <pre><code>['low', 'low', 'low', 'mid', 'mid', 'mid', 'mid', 'mid', 'hi', 'hi', 'hi']~~~~ </code></pre> <h2 id="リストの管理(CRUD )"><a href="#%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E7%AE%A1%E7%90%86%EF%BC%88CRUD+%EF%BC%89">リストの管理(CRUD )</a></h2> <p>リストは作りっぱなしじゃなく、データの変更が可能。<br /> CRUDは、以下の言葉からなる。</p> <ul> <li><strong>C</strong>reate:新規追加</li> <li><strong>R</strong>ead:参照</li> <li><strong>U</strong>pdate:更新</li> <li><strong>D</strong>elete:削除</li> </ul> <h3><strong>C</strong>reate:新規追加</h3> <p>リストの最後尾に要素を追加するには、リストがもつメソッドのひとつ<code>append()</code>を使う。<br /> 参考:<a target="_blank" rel="nofollow noopener" href="https://www.tech-teacher.jp/blog/python-append/">https://www.tech-teacher.jp/blog/python-append/</a></p> <p>リストの途中に要素を追加するには、<code>insert()</code>メソッドを使う。<br /> 参考:<a target="_blank" rel="nofollow noopener" href="https://techacademy.jp/magazine/22300">https://techacademy.jp/magazine/22300</a></p> <p>リストを結合する場合は、<code>+</code>や<code>+=</code>を使う。<br /> 繰り返しの場合は、<code>*</code>や<code>*=</code>を使う。<br /> このあたりは、文字列の結合や繰り返しと同じイメージ。<br /> 参考:<a target="_blank" rel="nofollow noopener" href="https://techacademy.jp/magazine/29364">https://techacademy.jp/magazine/29364</a><br /> 参考:<a target="_blank" rel="nofollow noopener" href="https://www.javadrive.jp/python/list/index6.html#section5">https://www.javadrive.jp/python/list/index6.html#section5</a></p> <h3><strong>R</strong>ead:参照</h3> <p>要素を参照する方法として、以下の2つがある。</p> <ol> <li>スライス:省略</li> <li>アンパック<br /> アンパックは以下のページを参考。<br /> 要素数と変数の数が一致していない場合、エラー(ValueError)が発生するので注意。<br /> 参考:https://techacademy.jp/magazine/30050</li> </ol> <h3><strong>U</strong>pdate:更新</h3> <p>スライスを使用して、要素を上書きします。(専用のメソッドはない)<br /> 詳細な手順は省略。</p> <h3><strong>D</strong>elete:削除</h3> <p>リストの要素は以下の方法で削除できる。(いずれも<strong>破壊的メソッド</strong>)</p> <ol> <li><p><code>pop()</code>メソッドを使用<br /> 引数なし:一番最後の要素を削除し、メソッドの戻り値として出力する。<br /> 引数あり:指定した要素の削除と出力を行う。(もちろん0から開始)</p></li> <li><p><code>clear()</code>メソッドを使用<br /> すべての要素を削除します。メソッドの戻り値はなし。</p></li> </ol> <h2 id="リストの探索"><a href="#%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E6%8E%A2%E7%B4%A2">リストの探索</a></h2> <p>リストの中に指定の文字があるかどうか<strong>など</strong>を調べる。<br /> 探索の仕方として、<code>count()</code>メソッド、<code>index()</code>メソッド、<code>in</code>がある。<br /> 参考:<a target="_blank" rel="nofollow noopener" href="https://techacademy.jp/magazine/18930">https://techacademy.jp/magazine/18930</a></p> <h2 id="リストの並び替え"><a href="#%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E4%B8%A6%E3%81%B3%E6%9B%BF%E3%81%88">リストの並び替え</a></h2> <p>並び替えは<code>sort()</code>メソッド、<code>reverse()</code>メソッドが簡単。(破壊的メソッド)<br /> <strong>非破壊的に</strong>リストを扱うには<code>sorted()</code>関数を使用すること。</p> <h2 id="2次元リスト"><a href="#2%E6%AC%A1%E5%85%83%E3%83%AA%E3%82%B9%E3%83%88">2次元リスト</a></h2> <p>C言語の2次元配列と同じように考えてよい。<br /> C言語でいう<code>{ }</code>は、Pythonでは<code>[ ]</code>で表現される。<br /> 行、列といったスコープ概念も、C言語とPythonで同じである。<br /> ★「行、列」と覚えるよりも、シンタックスのスコープ順で参照する認識にしておいたほうが、多次元配列において理解がしやすい。</p> <p><code>append()</code>メソッドの引数をリスト型のデータにすれば、二次元配列としてリスト要素が追加されていく。<br /> また、C言語と違って<strong>要素数の異なるリスト</strong>を扱うことができる。</p> <h1 id="タプル"><a href="#%E3%82%BF%E3%83%97%E3%83%AB">タプル</a></h1> <p>型を変更できないリストのようなもの。<br /> スライスしてアクセスする場合にその効果が発揮されるのかも。</p> <h2 id="宣言"><a href="#%E5%AE%A3%E8%A8%80">宣言</a></h2> <p>リスト:<code>[ ]</code>で囲む<br /> タプル:<code>( )</code>で囲む</p> <p>ただし、要素数が1つの場合は注意が必要。</p> <pre><code>a = (1) # int型 a = (1,) # tuple型 </code></pre> <h2 id="tuple()"><a href="#tuple%28%29">tuple()</a></h2> <p>リストでは<code>list()</code>を使っていたが、タプルでは<code>tuple()</code>を使う。<br /> 引数はシーケンス(同じ)。</p> <h2 id="タプル変数のアクセス"><a href="#%E3%82%BF%E3%83%97%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9">タプル変数のアクセス</a></h2> <h3 id="参照"><a href="#%E5%8F%82%E7%85%A7">参照</a></h3> <p>リストと同様、スライスを使う。</p> <h3 id="変更"><a href="#%E5%A4%89%E6%9B%B4">変更</a></h3> <p>要素の追加・消去などはできないが、値を代入して変数の値を変更することは可能。<br /> 値の代入については、タプル型の値を代入するとその値で上書きが可能であるが、スライスによる代入はエラーとなる。</p> <pre><code>a = (0, 1, 2, 3, 4) print(a) a = (0, 3, 5) print(a) a[0] = 10 </code></pre> <pre><code>(0, 1, 2, 3, 4) (0, 3, 5) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-12-5072b42910db> in <module> 4 print(a) 5 ----> 6 a[0] = 10 TypeError: 'tuple' object does not support item assignment </code></pre> <h3 id="探索"><a href="#%E6%8E%A2%E7%B4%A2">探索</a></h3> <p>リストと同様に<code>count()</code>、<code>index()</code>、<code>in</code>が使用可能。</p> <h2 id="zip()"><a href="#zip%28%29">zip()</a></h2> <p>複数のリストから1つのタプルを作成する。<br /> 戻り値はタプル型。<br /> 行と列の関係が特殊なので注意。(単なる連結ではない)</p> <h2 id="list()の引数にすると"><a href="#list%28%29%E3%81%AE%E5%BC%95%E6%95%B0%E3%81%AB%E3%81%99%E3%82%8B%E3%81%A8">list()の引数にすると</a></h2> <p>そのリストがタプル型になるみたい。(タプルを格納したリスト)<br /> 構造的には以下のような感じ。</p> <pre><code>[ ( ), ( ), ( )] </code></pre> <h2 id="enumerate()"><a href="#enumerate%28%29">enumerate()</a></h2> <p>リストを引数に、タプルを格納したリストを生成することができるみたい。</p> <h1 id="Pythonのオブジェクト認識"><a href="#Python%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E8%AA%8D%E8%AD%98">Pythonのオブジェクト認識</a></h1> <h2 id="オブジェクトのID"><a href="#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AEID">オブジェクトのID</a></h2> <p>変数等のオブジェクトにはIDが割り振られている。<br /> これはC言語のような変数自体を識別するものではなく、値の識別と考えたほうが良い。<br /> 値が同じ変数は、異なる変数でもあっても同じIDとなる。<br /> ただし、タプルは同じ要素であったとしても異なるIDを持つ。<br /> 調べ方:</p> <pre><code>id(オブジェクト名) </code></pre> <h2 id="オブジェクトのハッシュ値"><a href="#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4">オブジェクトのハッシュ値</a></h2> <p>オブジェクトの値の重複は、オブジェクトのハッシュ値で判断される。<br /> オブジェクトが異なるものでも、中身のデータが完全に一致していれば同じハッシュ値になる 。<br /> 調べ方:</p> <pre><code>hash(オブジェクト名) </code></pre> <p>セット変数を作成する際に、<code>set()</code>に同じ値のタプルを引数にした場合には、作成される要素は一つとなる。<br /> このときになぜ異なるIDであるのに同じ値であるかを判断できるかというと、ハッシュ値で判断されていたから。<br /> ハッシュ値はデータの値に応じて決まるもので、タプルであっても同じ値であれば、同じハッシュ値を持つ。</p> <h2 id="==とis"><a href="#%3D%3D%E3%81%A8is">==とis</a></h2> <p>2つの変数を比較する場合、<code>==</code>と<code>is</code>で比較結果が異なる場合がある。</p> <div class="table-responsive"><table> <thead> <tr> <th>演算子</th> <th>比較する値</th> <th>比較の内容</th> </tr> </thead> <tbody> <tr> <td>==</td> <td>ハッシュ値</td> <td>データが同じかどうか</td> </tr> <tr> <td>is</td> <td>ID</td> <td>同じオブジェクトかどうか</td> </tr> </tbody> </table></div> <p>オブジェクトと値は異なる存在であると認識したほうが良いのかも。(確認すること)</p> <h1 id="辞書"><a href="#%E8%BE%9E%E6%9B%B8">辞書</a></h1> <h2 id="値の参照"><a href="#%E5%80%A4%E3%81%AE%E5%8F%82%E7%85%A7">値の参照</a></h2> <p>インデックス(数字)ではなく、キー名(要素につける名前)を指定してアクセスする。</p> <h2 id="辞書の作成"><a href="#%E8%BE%9E%E6%9B%B8%E3%81%AE%E4%BD%9C%E6%88%90">辞書の作成</a></h2> <p>要素は<code>キー:値</code>で記述し、<code>{ }</code>で囲む。<br /> キー名は文字列以外にも、数字で定義しても良い。</p> <pre><code>d = {"foo": 1, "foo": 3, "bar": 5, "hoge": 7} print(d) </code></pre> <p>キーが重複する場合、そのキーの値は上書きされてしまうことに注意すること。</p> <pre><code>{'foo': 3, 'bar': 5, 'hoge': 7} </code></pre> <p>タプルも要素として定義できるみたい。<br /> タプルは、要素の値が変化しないからである。<br /> 一方、値が変化するリストはキーにすることができない。</p> <h2 id="キーの追加"><a href="#%E3%82%AD%E3%83%BC%E3%81%AE%E8%BF%BD%E5%8A%A0">キーの追加</a></h2> <p>以下の形式で記述することで、要素を追加することができる。</p> <pre><code>変数[キー] = 値 </code></pre> <p>例えばこんなかんじ。</p> <pre><code>dic={} print(type(dic)) print(dic) dic["test"] = 1 dic["hoge"] = "hogege" dic[5] = "日本語" print(type(dic)) print(dic) dic["test"] = "OK" print(dic) </code></pre> <p>定義済みのキーがある場合は、上書きされる。</p> <pre><code><class 'dict'> {} <class 'dict'> {'test': 1, 'hoge': 'hogege', 5: '日本語'} {'test': 'OK', 'hoge': 'hogege', 5: '日本語'} </code></pre> <h2 id="キーの参照"><a href="#%E3%82%AD%E3%83%BC%E3%81%AE%E5%8F%82%E7%85%A7">キーの参照</a></h2> <p>2つの方法がある。<br /> どちらにするかは、例外処理の要否で決めれば良い。<br /> キーがタプルの場合も、タプルを渡せばよい。</p> <h3 id="①スライス"><a href="#%E2%91%A0%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9">①スライス</a></h3> <pre><code>print(dic["hoge"]) print(dic["super"]) </code></pre> <p>キーが存在しない場合は「KeyError」となる。</p> <pre><code>hogege --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-5-0cb8b3fad786> in <module> 1 print(dic["hoge"]) ----> 2 print(dic["super"]) KeyError: 'super' </code></pre> <h3>②<code>get()</code>メソッド</h3> <pre><code>print(dic.get("hoge")) print(dic.get("fuga")) </code></pre> <p>キーが存在しない場合には何も起こらず、エラーにもならない。(<code>print()</code>では<code>None</code>と出力される)</p> <pre><code>hogege None </code></pre> <h2 id="キーの削除"><a href="#%E3%82%AD%E3%83%BC%E3%81%AE%E5%89%8A%E9%99%A4">キーの削除</a></h2> <p>2つの方法がある。</p> <h3><code>pop()</code>メソッド</h3> <p>引数にキーを渡すこと。</p> <pre><code>dic={} dic["test"] = 1 dic["hoge"] = "hogege" dic[5] = "日本語" print(dic) dic_p = dic.pop("hoge") print(dic_p) print(dic) </code></pre> <pre><code>{'test': 1, 'hoge': 'hogege', 5: '日本語'} hogege {'test': 1, 5: '日本語'} </code></pre> <p>引数を渡さなかった場合は、TypeErrorとなる。</p> <pre><code>dic_p = dic.pop() </code></pre> <pre><code>--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-12-040e53f5bd46> in <module> ----> 1 dic_p = dic.pop() TypeError: pop expected at least 1 argument, got 0 </code></pre> <h3><code>clear()</code>メソッド</h3> <p>他の型と同じで、すべての要素をクリアする。</p> <pre><code>dic={} dic["test"] = 1 dic["hoge"] = "hogege" dic[5] = "日本語" print(dic) dic.clear() print(dic) </code></pre> <pre><code>{'test': 1, 'hoge': 'hogege', 5: '日本語'} {} </code></pre> <h3 id="キーの検索"><a href="#%E3%82%AD%E3%83%BC%E3%81%AE%E6%A4%9C%E7%B4%A2">キーの検索</a></h3> <p><code>in</code>を使用する。(省略)</p> <h3 id="繰り返し処理への利用"><a href="#%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E5%87%A6%E7%90%86%E3%81%B8%E3%81%AE%E5%88%A9%E7%94%A8">繰り返し処理への利用</a></h3> <p>辞書型には以下のメソッドがある。(詳細は省略)</p> <ul> <li><code>keys()</code></li> <li><code>values()</code></li> <li><code>items()</code></li> </ul> <p>これらのメソッドは、返し値をシーケンスとして扱うことができる。</p> <pre><code>dic = {'Hokkaido': 1, 'Aomori': 2, 'Tokyo': 13, 'Osaka': 27} print(dic.items()) for key, value in dic.items(): print(f"{key} : {value}") </code></pre> <p><code>dic.items()</code>では、各要素をタプルとして出力している。<br /> そのため、forで使用する場合は、タプルの形式と合うように2つの変数を用いていることに注意する。</p> <pre><code>dict_items([('Hokkaido', 1), ('Aomori', 2), ('Tokyo', 13), ('Osaka', 27)]) Hokkaido : 1 Aomori : 2 Tokyo : 13 Osaka : 27 </code></pre> <h1 id="関数"><a href="#%E9%96%A2%E6%95%B0">関数</a></h1> <h2 id="他のファイルの関数を使う"><a href="#%E4%BB%96%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%BF%E3%81%86">他のファイルの関数を使う</a></h2> <p>ファイルの先頭でインポートする。<br /> ただし、拡張子までは必要なく、<code>ファイル名.py</code>をインクルードする場合は、以下のとおりでよい。</p> <pre><code>import ファイル名 </code></pre> <p>C言語はソース(<em>.c)とヘッダ(</em>.h)が存在するが、この時点でPythonは「*.pyのみ」と考えてよい。</p> <p>ファイルをインポートした場合、インポートしたファイルはオブジェクトとして扱われる。<br /> つまり、以下のように扱われる。<br /> * ファイル → オブジェクト<br /> * 関数 → メソッド</p> <p>C言語とは勝手が異なるので、このあたりは気をつけること。</p> <h2 id="一部の関数だけインポートする"><a href="#%E4%B8%80%E9%83%A8%E3%81%AE%E9%96%A2%E6%95%B0%E3%81%A0%E3%81%91%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B">一部の関数だけインポートする</a></h2> <p>他のファイルの関数をメソッドではなく、関数として扱う場合は、以下の記述でインポートする。</p> <pre><code>from ファイル名 import 関数名 </code></pre> <p>メソッドではなくなるため、関数コールを直接記述することができる。</p> <h2 id="モジュール名や関数名に別名をつける"><a href="#%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E5%90%8D%E3%82%84%E9%96%A2%E6%95%B0%E5%90%8D%E3%81%AB%E5%88%A5%E5%90%8D%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B">モジュール名や関数名に別名をつける</a></h2> <p>インポートしたオブジェクトやメソッド、関数の名称が長い場合や、可読性が低い場合に有効。<br /> インポート文のあとに、<code>as 別名</code>を加えることで、インポートしたものを別名で扱うことができる。</p> <pre><code>import ファイル名 as 別名 # オブジェクトを別名で読み替え(メソッド名はそのまま) from ファイル名 import 関数名 # 関数を別名で読み替え </code></pre> caliglacy tag:crieit.net,2005:PublicArticle/16721 2021-03-07T20:11:14+09:00 2021-03-07T20:11:14+09:00 https://crieit.net/posts/19715354ab15982d55d227d2243d3745 記事の管理方法 <h1 id="概要"><a href="#%E6%A6%82%E8%A6%81">概要</a></h1> <p>このアカウントにおいて、Crieitの記事をどのように管理するかをある程度考えておく。</p> <h1 id="学習記録"><a href="#%E5%AD%A6%E7%BF%92%E8%A8%98%E9%8C%B2">学習記録</a></h1> <p>学習内容の要約や気付きを記録する場合のまとめ方について。</p> <h2 id="プログラミング言語"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E">プログラミング言語</a></h2> <p>分散させず、コンパクトに纏めることを意識すること。</p> <ul> <li>基本的に、言語ごとに<strong>1つの記事</strong>を作成する。</li> <li>学習するたびに内容を書き足して、1つの記事を更新していく。</li> <li>目的が言語の習得とは別である場合は、目的毎に記事を追加していくこと。</li> </ul> <h1 id="忘備録"><a href="#%E5%BF%98%E5%82%99%E9%8C%B2">忘備録</a></h1> <p>自分用のメモを残す場合のまとめ方について。</p> <h2 id="読みやすさを重視"><a href="#%E8%AA%AD%E3%81%BF%E3%82%84%E3%81%99%E3%81%95%E3%82%92%E9%87%8D%E8%A6%96">読みやすさを重視</a></h2> <ul> <li>内容毎に記事を作成し、振り返る際のボリュームを最小にする。</li> <li>同じ事柄に関することであれば、既存の記事に追記してよい。</li> <li>「面倒くさい」が発生しない範囲で、読みやすくまとめること。</li> </ul> <h2 id="記録しやすさを追求"><a href="#%E8%A8%98%E9%8C%B2%E3%81%97%E3%82%84%E3%81%99%E3%81%95%E3%82%92%E8%BF%BD%E6%B1%82">記録しやすさを追求</a></h2> <ul> <li>記録するのがめんどくさくなると、忘備録を残すことすらなくなってしまう。</li> <li>「面倒だったこと」や「時間がかかったこと」は貴重な情報。</li> <li>必要に応じてテンプレを作成したりして、<strong>手軽に</strong>忘備録をかけるようにすること。</li> </ul> <h2 id="役に立つ補足"><a href="#%E5%BD%B9%E3%81%AB%E7%AB%8B%E3%81%A4%E8%A3%9C%E8%B6%B3">役に立つ補足</a></h2> <ul> <li>目的や背景なども書き、ストーリーがわかるように。</li> <li>問題解決のために行ったことは、解決策でなかったとしても残しておき、二度手間を減らす。</li> </ul> caliglacy