python 公式ドキュメントチュートリアル1,2,3

##参考元：https://docs.python.jp/3/tutorial/appetite.html
Python公式ドキュメント。のチュートリアル。俺には基礎がなってなかった。

 コメントで基礎知識を知っておいたほうが良いと言われたこと。かつ、公式ドキュメントを参考に使いはじめてから、公式チュートリアルがあることを気づいていたこと。横道にそれるようでいて、実は本道な今回。他の事はThe World時よ止まれ。いつやるか今でしょ。やらいでか。
復習も兼ねつつ、頭の整理も兼ねつつ、初心者が初心にもどる。
 あと、Pythonとか、プログラミングを勉強し始めてから思うのは、モニターが二つ欲しい。11inchのmacbook airじゃ狭すぎる。

##1.　やる気を高めよう。
・Pythonの魅力的な点を述べてるぞ。

1. windows, maxOS, unixOSで動作。C/C++/Javaのプログラムより短い時間で書けるぞ。
2. Cよりたくさんのエラーチェックがある
3. Pythonは超高級言語。可変長配列や辞書などの高級な型を組み込んで持っている。これらの型は一般的なため、Awk, perlが扱うものより簡単に大規模な問題に利用できる
4. Pythonではプログラムをモジュール(ファイル)に分割して、他のPythonプログラムで再利用できる。元々膨大な標準モジュールも存在するぞ。組み込みモジュールには、ファイルI/O,システムコール,ソケットのような機能。Tkのようなグラフィカルユーザーインターフェースツールキットを使うためのインターフェイスもある。

高級言語： より人間が使う言語に近いもの　↔対義語： アセンブリー言語。機械語
ソケット： 実行中のプログラム間でデータの送受信を行うための標準的なプログラミングインターフェース(API)の一つ
Tk: Toolkit
グラフィカルユーザーインターフェース: GUI。コンピュータの表示や操作の方式において、表示にアイコンや画像を多用。操作の多くはマウスのようなポインティングデバイスによって支持される方式のこと。ゲーム画面上のボタンとか、デスクトップのファイルとか。


5. インタプリタ言語。コンパイルやリンクが必要ない。プログラム開発にかなりの時間を節約できる。インタプリタは対話的に、言語の様々な機能を実験したり、書き捨てのプログラムを書いたり、関数をテストしたりできる。(多分pythonシェルのことだと思う）

インタプリタ言語： 人間が記述したソースコードを、コンピュータが実行できる機械語の形式にへと逐次翻訳しながら、そのプログラムを実行してゆくプログラムのこと。Javascript, Python, Lispなど。


6. PythonはC/C++/Javaのプログラムより遥かに短く、読みやすいプログラムを書ける。
理由1： 高レベルのデータ型によって、複雑や操作を１つの実行分で表現できる。
理由2： 実行分のグループ化を、グループの開始や終了を括弧ではなく、インデントで行える。見やすい。
理由3： 変数や引数の宣言が不要。

7. Pythonは拡張できる。: C言語でプログラムを書く方法を知っているなら、新たな組み込み関数やモジュールを簡単にインタプリタに追加できる。これによって、処理速度に渋滞な影響を与える操作を最大速度にしたり。バイナリ形式でしか手に入らないライブラリをPythonにリンクしたり。その気になれば、PythonインタプリタをCで書かれたアプリケーションにリンクして、アプリケーションに対する拡張言語や命令言語としても使える。

8. この言語はBBC(The British Broadcasting Corporation　あるいは　Billy's Boot Camp)のショー番組。"モンティ・パイソンの空飛ぶサーカス"　（Monty Python's Flying Circus. あるいは Mighty Billy's Flying Shark大嘘)から取ったもので、爬虫類とは関係ありません。

9. 次の章では、インタプリタを使うための細かいことを説明します。大して面白くないぜ。チュートリアルの残りの部分では、Pythonプログラム言語と実行システムの様々な機能を例題を交えて紹介。


##2. インタプリタを使う。
###2.1 インタプリタを起動する。
1. 僕の場合は、`python3.6`ではなく、`python3`ならインタプリタ(Pythonシェル）を開始できる。versionによって違うのかな。自分のはpython3.4.2だった。更新すべきか？
困ってからやろか。

2. インタプリタ(pythonシェル)は標準入力が端末に接続された状況で呼び出されると←？コマンドを対話的に読み込んで実行する。ファイル名を引数にしたり、標準入力からファイルを入力すると、インタプリタはファイルからスクリプトを読み込んで実行する。

3. 細かいコマンドラインオプションは
https://docs.python.jp/3/using/cmdline.html#using-on-general
正直言って、現状ここらへんの知識を必要と思っていない。
pythonシェルが起動さえすればいい。他の知識は必要になったら、また戻ってくればいい。主なモノを理解してもないのに、重箱の隅をつつく必要はない。

####2.1.1　引数の受け渡し
同上。
以下略

加湿器うるせぇ。中の沸騰石？が砕けて粉々のを捨てちまったからか？気のせい？そっか。

##3. 形式張らないPythonの紹介
1.　コメントは`#`以降。

```py
>>> ex = 1 #this is comment
>>> # second comment
... text = "#this is not comment because it's inside quotes"
>>> text
"#this is not comment because it's inside quotes"
```

###3.1.1 Pythonを電卓として使う。数
`+` 足し算
`-` 引き算
`*` 掛け算
`/` 割り算
`**` べき乗
`=` 代入
`5j` jもしくはJを接尾辞に使い虚数を表す。5はただの数字。

```py
>>> 4 * 3.75 - 1
14.0
>>> _
14.0
```
pythonシェル上で、上記のように変数にいれない結果は、`_`に代入される。
この組み込み関数`_`を読み取り専用の値として扱うのを推奨される。同名の"_"を変数名として宣言するべきでない。

###3.1.2　文字列型

```py
>>> 'doesn\'t' #use \' to escape the single quote 
"doesn't"
>>> "doesn't" #or use double quotes instead
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
```

1. `"..."`か`'...'`で囲ったものが文字列になる。
2. `\`は引用符をエスケープするために使う。`'`や`"`を文字列にいれるために`\`を使う。特殊文字を出力するために使う。
3. シングルクォートでもダブルクォートでも同じ文字列

```py
>>> print('C:\some\name')  # here \n means newline!
C:\some
ame
>>> print(r'C:\some\name')  # note the r before the quote
C:\some\name
```

4. `\n`は改行を意味する。
5. 最初に引用符(`"`か`'`）の前に`r`をつければそのままの文字列を出力できる。

```
>>> print(r"""
... hello 
... world
... ! \n""")

hello 
world
! \n
>>> 
```
6. `"""..."""`や`'''...'''`をつかって複数行にまたがって出力もできる。

```py
>>> 3 * "op" + "pai"
'opopoppai'
```
7. `+`で文字列同士をくっつけることができる。
8. `*`で文字列を指定回数反復させることができる。

```py
>>> "Si""ri"
'Siri'
>>> "o""p""p"
'opp'
>>> a = "Si"
>>> a "ri"
  File "<stdin>", line 1
    a "ri"
         ^
SyntaxError: invalid syntax
>>> a + "ri"
'Siri'
>>> ("op" * 10)"pai"
  File "<stdin>", line 1
    ("op" * 10)"pai"
                   ^
SyntaxError: invalid syntax
>>> text = ("めっちゃ長い文字を出力する時に"
... "２行以上の文字列をくっつけたりできる"
... "見やすくて便利"
... )
>>> text
'めっちゃ長い文字を出力する時に２行以上の文字列をくっつけたりできる見やすくて便利'
```
9. 連続している複数の文字列は自動的に連結される。`+`がいらない
10. 変数と文字列を上記の方法で結合できない。`+`を使う必要がある
11. `"""..."""`を使わずに複数行を記述できたりする。()がいるけど。

```py
>>> word = "Oppasiri"
>>> word[0]
'O'
>>> word[-1]
'i'
>>> word[-3]
'i'
>>> word[-7]
'p'
>>> word[-0]
'O'
```
12. 文字列はインデックス表記をすることができる。最初の文字のindexは０。
13. インデックスは負の数を指定してもいい。そのときは右から数えていく。
14. [-0]は0と等しい。だから右端は[-1]から始まる。

```py
>>> word[0:2] #not include word[2]
'Op'
>>> word[3:6] #include word[3]
'asi'
>>> word[:7] #start index is 0
'Oppasir'
>>> word[4:]　#end index is len(word)
'siri'

>>> word[:3] + word[3:] 
'Oppasiri'

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1
```
15. 文字列に関してスライスもできる。:の左の開始インデックスから、:右の終了インデックスの１つ前までを切る。つまり開始インデックスは常に含まれ、終了インデックスは常に含まれない。 `s[:i] + s[i:]` が常に `s`に等しい。
16. スライスの開始インデックスを省略すると、0とみなされる。
17. :の右の終了インデックスを省略すると、文字列のサイズとみなされる。
18. 終了インデックスが要素の間を指すと見ると、覚えやすいかもしれない。
19. 負のインデックスをを含まない限り、スライスされたシーケンスの長さは、スライスの両端のインデックスが範囲内の場合、インデックス間の差になる。例)[3:7]は7-3=4。長さ４。４つの文字。

```py
>>> word[9999]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

>>> word[5:999999]
'iri'
```
20. リストに対してリストをこえるindexを指定すると、index out of rangeという例外エラーが発生する
21. しかし、スライスの場合はうまく対応して扱ってくれる。

```py
>>> word[0] = "K"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> word[2:] = "siri"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

>>> "K" + word[1:]
'Kppasiri'
>>> word[:2] + "pp"
'Oppp'
```
22. Pythonの文字列は変更できない。不変,immutable。したがって文字列のindexで指定した場所に代入を行うとエラー。
23. 元の文字列と違う文字列が必要なら、新しく文字列を作成するひつようがある。

```py
>>> word = "aaaaaaaaaaaaaaaaaaasaiaaaaaraaaaaaai"
>>> len(word)
36
```
24. 組み込み関数`len()`は文字列の長さを返す。

###3.1.3 リスト型
Pythonは多くの複合データ型を備えている。複数の値をまとめるのに使われる。
最も汎用性が高いのは、`list`。コンマ区切りの値をならびを[]の角括弧で囲んだものとして表される。リストは異なるデータ型の要素を含むこともできる。

```py
>>> squares = [1,4,9,16,25]
>>> squares
[1, 4, 9, 16, 25]

>>> squares[0]
1
>>> squares[-1]
25

>>> squares[-3:] ②#sliceing returns a new list　
[9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]
>>> squares[:]③
[1, 4, 9, 16, 25]

>>> squares + [36,49,64,81,100]　④
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]　
```
1. 文字列や他のシーケンスのように、リストはインデクス表記やスライス表記ができる。
2. スライスは元のリストに影響を与えず、新しいリストを返す。
3. 元のリストのコピーをスライスで作ることもできる
4. リストは文字列の連結のように、別リストと結合することもできる

```py
>>> cubes = [1**3, 8, 27, 65, 125]
>>> cubes[3] = 4**3　⑤
>>> cubes
[1, 8, 27, 64, 125]

>>> cubes.append(6**3)
>>> cubes
[1, 8, 27, 64, 125, 216]
```
5. リストの要素は可変型。mutable。含んでいる要素を別の要素に変更することもできる。
6. `list.append(value)`によってリストの末尾に要素を追加することもできる

```py
>>> letters = ["a","b","c","d","e","f","g"]
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters[2:4] = ["C", "D"] ⑦#replace some value
>>> letters
['a', 'b', 'C', 'D', 'e', 'f', 'g']
>>> letters[2:5] = [] ⑧#remove
>>> letters
['a', 'b', 'f', 'g']
>>> letters[:] = [] ⑨#clear
>>> letters
[]
```
7. スライスに代入すると、元のリストの要素が変化する
8. スライスされたリストにを[]で消すこともできる。
9. リスト全体を空にした。

```py
>>> l1 = [1,2,3,4,5]
>>> len(l1)
5
```
10. `len()`はリストに使える。

```py
>>> l1 = ["a", "b", "c"]
>>> l2 = [1,2,3]
>>> x = [l1, l2]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][2]
'c'
```
11. リストの中にリストをいれることもできる。
12. リストの中のリストの要素を指定することもできる。


##3.2　プログラミングへの第一歩
2たす２よりもっと複雑な仕事にも、pythonは使うことができる。
フィボナッチ数列は以下のように書くことができる。

```py
>>> a, b = 0, 1　①
>>> a
0
>>> b
1
>>> while b<10:
...   print(b)
...   a, b = b, a+b
... 
1
1
2
3
5
8
```
1.　変数を,で区切る。値も,で区切ることでそれぞれにまとめて代入することができる。初めて知った。複数同時の代入。`while`文の中でも再度使われている。代入が行われる前に、右辺の式がまず評価される。右辺の式は左から右へと順番に評価される。
2.　`while`は条件が真である限り実行を繰り返す。Pythonでは0はFalse、偽。条件式には様々なものを入れることができる。
例)
シーケンス：　1つ以上の長さのシーケンスは真。中身は問わない。空のシーケンスはFalse。
3. ループの本体。while文のなかは、インデントされている。同じようにインデントなされている行が実行分をグループにまとめる方法。

・比較演算子
`==`は等しい。
`>=`はより大きいか等しい
`<=`はよち小さいか等しい
`!=`は等しくない。などがある

```py
>>> i = 25 * 25
>>> print("The value of i is", i)
The value of i is 625
```
1. `print()`関数は与えられた引数の値を書きだす。複数の要素が引数に与えられた場合は、空白で区切られて出力される。

```py
>>> a, b=0,1
>>> while b<100:
...  print(b, end=",")
...  a,b = b, a+b
... 
1,1,2,3,5,8,13,21,34,55,89,>>> 
```
1. `end`というキーワード引数を使うと、`print()`の改行文字を出力しないようにし、代わりに別の文字列を末尾に出力できる。今回は ","。


##終わりに
今日は対して進まなかった。というかシェルの詳細すぎるところ読んで時間がとんだ。（結局省略してるし)
明日はこの続きから。とりあえずチュートリアルは全部終わるまでやる。
そのあと組み込み関数（）をみるかも。「ねーちゃん！あしたって今さッ！」そうだよな。

何か勉強してて思うのは、たくさんのわからないことや納得できないものを放置してもいい気がする。ただ、メモるだけメモっておく。そもそもいくら最善を尽くしても俺の頭が今日学んだ全てを覚えてくれるわけじゃない。
覚えてたとしても、実際に必要なときに思いつくかとはまた別の問題だろう。
ただ自分が見つけたこと。実感したこと。大事なことや、大事そうなこと。面白かったことの経験に今の重きをおいたほうがいいんじゃね。

向かい風のなか自転車こいでも前に進まないのつらっ。坂だと歩いたほうが早いぞ。電動自転車はたけぇ。

カードキャプターさくら　クリアカード編の3話をみる。

サービス案：
twitterで特定の実況とかの掲示板的グループを一時作成できる機能とかって良さそう。あるのか？twichのコメント欄みたいに流して、動画サイトとかテレビとかラジオとかに自分で外付けできるようなイメージ。金になると思うのだがどうだろう？twitterクライアントみたいのより、拡張機能的なほうが嬉しいぞぉ↑これ。