｢実践力を身につけるPythonの教科書 ｣ まとめ chapter1 chapter2

## pythonの特徴
1. スクリプト言語
2. 可読性が高い
3. ライブラリが豊富
4. オブジェクト指向言語

#### 1. スクリプト言語
コンパイルをしない､コンパイラーがいらない

#### 2. 可読性が高い
少ない行数でプログラムがかける

#### 3.ライブラリが豊富
ライブラリ(便利道具セット)がネット上に沢山ある

#### 4. オブジェクト指向言語
操作手順より操作対象に重点を置く

### pythonの計算演算子


|演算子|解説|利用例|例の結果|
|:-:|:-:|:-:|:-:|
|x + y|xとyの足し算|3+5|8|
|x - y|xとyの引き算|5-2|3|
|x * y|xとyの掛け算|2*3|6|
|x / y|xとyの割り算|10/5|2|
|x // y|xとyの割り算で<br>小数点以下切り捨て|10//3|3|
|x % y|xをyで割ったときの余り|10%3|1|
|x**y|xのy乗|2**3|8|
|abs(x)|絶対値|abs(-8)|8|
|int(x)|xの整数に変換|int(3.14)|3.0|
|float(x)|xを浮動小数点数に変換|float(x)|3.0|
|round(x[,n])|xをnの位で四捨五入|round(3.6)|4|

## スクリプトから計算を行う時の注意点
以下のようなファイルを作ったとする
```python:calc-ng.py
30 + 5
```
```:実行
python3 calc-ng.py
```
```python:結果

```
何も表示されない

##### 理由
計算処理はしたが出力処理はしていない
->print()を使って出力する必要がある

```python:calc-ok.py
print(30 + 5)
```
```:実行
python3 calc-ng.py
```
```python:結果
35
```

## コメント
人間だけが読む文章
主にメモ書きとして使われる
pythonはコメントの部分は何も実行しない
```python:comment.py
# 先頭に[#]をつけるとその行がコメント扱いになる
# ここの部分がコメントです
# print(2*2)
print(4+4)
print('abc')
```
```:実行
python3 comment.py
```
```python:結果
8
abc
```
## 変数
メモリの中に好きな`(若干のルールあり)`名前をつけてデータ`(文字とか数字とか色々)`を記憶しておくための領域
->よく`なんか入れておくための箱`という説明をされる

#### 変数のルール
1.数字から始まる名前はng
2.アンダースコア(_)から始まる名前はng
3.特別な意味を持つ予約語単体はng

##### 3についての補足
特別な意味を持つ予約語
既にプログラムとして使われている言葉
```:例
for True False or if whileなど
```
> ### 変数に関する個人的な補足
> 個人で開発なら別に問題ないけどできるなら変数名は長くてもわかりやすい名前に(長いの面倒という気持ちはわかるよ!)
> 例:税込み価格を計算するプログラム
> ```python:良くない例
> x = 1.1 <-税率のつもり
> f = 100 <-花の単価のつもり
> cf = 5 <-花の個数のつもり
> ta = f*cf*x <- 合計金額のつもり
>```
>```python:できたらこうしたほうが良い
> tax = 1.1 
> flower = 100 
> countOfFlower = 5 
> totalAmount = flower*countOfFlower*tax
>```
## シングルクォートとダブルクォート
基本的な違いは特になし
```:例
print('hello,world')
print("hello,world")
```
```:結果
hello,world
hello,world
```

##### 使い分けるタイミング
出力したい文章のうちどちらかが使われている時
```:出力したい文章にシングルが使われている
print(" I'm tanaka ") <-ダブルで囲む
```
```:出力したい文章にダブルが使われている
print('he said "come on"') <-シングルで囲む
```

じゃあ､どっちも文章に含んでいたらどうすればいいの
↓
## エスケープシーケンス
`\`や`¥`を記号の前に置けば良い

```:例
" He said \" I can\'t play piano \" "
```
```:出力
He said " I can't play piano " 
```
## 変数､定数をいれて文章を出力
1. カンマ区切りのprint()
2. `+`を使う方法
3. `.format`を使う方法

### 1.カンマ区切りのprint()
print(値1,値2,値3.....)
値のところに文字列とか変数とか入れる
```python:例
old = 18
print("私は",old,"歳です")
```
```:結果
私は 18 歳です
```
間があくのは仕様｡英語なら特に問題ないが､日本語だと少し困る

### 2.`+`を使う方法
```python:例
old = 18
print("私は" + str(old) + "歳です")
```
```:結果
私は18歳です
```
変数､定数が数字だったらstr()を使う必要がある
### 3. `.format`を使う方法
"文字列".format(`値0,値1,値2...`)
値0,値1に変数とか定数とか入れてみる
とにかく使ってみる!
```python:例
per_inch = 2.54
inch = 24
cm = inch * per_inch
print("{0}インチ={1}センチ".format(inch,cm))
```
```:結果
24インチ= 60.96インチ
```
##### 名前付き引数
こっちのほうがわかりやすいと思う
```python:
name = "田中"
age = 22
job = "プログラマー"
print("私は､{name}です｡{}歳で{}をやっています｡".format(name = name,age = age, job = job))
```
```:結果
私は田中です｡22歳でプログラマーをやっています｡
```
## ユーザーからの値を受け取ろう
input("`待機画面に表示する文`")
```python:名前を入力してもらう
name = input("what's your name? ")
print("hello,{0}!".format(name))
```
待機画面が表示される
```:実行
what's your name?
```
入力する
```:入力
what's your name? 田中
```
入力が完了したら､`Enter`をおすと次の処理に行く
```:結果
hello,田中!
```
##### <font color="Red">注意点</font>
input()で受け取った値は全部`文字列`として受け取る
計算とかで使う場合はint(),もしくはfloat()を使う必要がある
```python:例
per_inch = 2.54
user = input("何インチ?:")
inch = float(user)
cm = inch * per_inch
#結果を表示
desc = "{0}インチ = {1}インチ".format(inch,cm)
print(desc)
```
```python:入力と結果
何インチ?:30
30 インチ = 76.2センチ
```

# 制御構文
何かしらの条件によってプログラムの流れを変えることのできる機能
## 条件分岐 IF文
```python:if文の書き方
if(比較式):
  #比較式が成り立つ時の処理
else:
  #比較式が成り立たない時の処理
  #elseは別に書かなくてもプログラムは動く
```
```python:例
score = 90
if(score >=80):
  print("合格")
else:
  print("不合格")
```
![Untitled Diagram.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/68d385b8-3863-1d44-b0a0-e661e89053f6.png)

```:結果
合格
```
`scoreが80以上`だったので合格と表示された
| 演算子 | 説明 |
|:-:|:-:|
|a == b|aとbが等しい|
|a != b|aとbが等しくない|
|a > b |aがbより大きい|
|a >= b |aがb以上|
|a < b|aがbより小さい|
|a <= b|aがb以下|

### 論理演算
`AかつB`,`AまたはB`とかそういうの
| 用語 |論理演算| 説明 |
|:-:|:-:|:-:|
|AかつB|A and B|A,Bどちらも成り立つ|
|AまたはB|A or B|A,B少なくともどちらが成り立つ<br>要するにどっちか成り立てばok|
|Aではない|not A|Aが成り立たない|


`score`が50点以上かつ79点以下か
->scoreは50点以上79点以下か
```python:AかつB
score = 60
if ((50 <= score) and (score <= 79)):
  print("rank b")
```
![名称未設定ファイル.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/d47e3fb4-e541-dda1-2510-4f9ec73a843f.png)
```:結果
rank b 
```
両方成り立つので`rank b`と表示される
```python:AもしくはB
weather = "cloudy"
rainyPercent = 80
if(weather == "rain" or rainyPercent >=60):
  print("傘を持つ")
else:
  print("傘を持たない")
```
![名称未設定ファイル.drawio (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/d1ce6257-69cc-5b33-1e5f-606b9b8ab071.png)
```:実行
傘を持つ
```
片方が成り立つので`傘を持つ`と表示される
```python:Aではない
Classification = "child"
if(not (Classification=="adult")):
  print("子供料金:1000")
else:
  print("大人料金:2000")
```
![名称未設定ファイル.drawio (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/017a96c4-9ea5-2af3-2083-58eedb254ab0.png)
```:結果
子供料金:1000
```
`Classification`は`adult`ではないので`子供料金:1000`
#### ifの中にifを入れることができる
```python:こんな感じ
if(条件式1):
  #条件式1が成り立つ時
    if(条件式2):
      #条件式2が成り立つ時
    else:
      #条件式2が成り立たない時
else:
    #条件式1が成り立たない時
```
![名称未設定ファイル.drawio (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/254ecd3f-ebf9-4a02-ad87-c5c5eaf5b3e9.png)

```python:例
number = 80
if(number % 2 == 0):
  if(number >=50):
    print("numberは50以上の偶数")
  else:
    print("numberは50より小さい偶数")
else:
  print("numberは奇数")
```
![名称未設定ファイル.drawio (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/53eee902-7e89-0fca-d6ef-18b763fcbc26.png)
```:結果
numberは50以上の偶数
```
### 順に条件を判定していくelif
ifの中のifと似ているとすこし違う
```:書き方
if(条件式1):
  #条件式1が成り立つ時の処理
elif(条件式2):
  #条件式2が成り立つ時の処理
:
else:
  #すべての条件式に当てはまらなかった時の処理
```
elifはいくら書いてもok
![名称未設定ファイル.drawio (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/4148793c-c153-6162-1bc2-14a83ff11a31.png)
```python:例
今はいい感じの例が浮かばないのでまた後日編集
```

##### pass 
条件式が成り立つ時に何もしない場合はpassと書かないとエラーが起きる
```python:
havingPassport = "no"
if (havingPassport == "yes"):
  pass 
else:
  print("注意する")
```
パスポートもっていなかったら注意する
## 繰り返し while構文
条件を満たすまでずっと同じ処理を繰り返す
```python:書き方
while(条件式):
  # 繰り返し処理
else:
  # 繰り返し処理後の処理
  # elseは書かなくても動く
```
```python:10まで数える
count = 1
while(count <= 10):
  print(count)
  count += 1
else:
  print("もういいかい?")
```
![名称未設定ファイル.drawio (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/b96c6341-f90d-4bf5-5071-194a49d4f491.png)
```:結果
1
2
3
4
5
6
7
8
9
10
もういいかい?
```
### ずっと繰り返したい
条件式が成り立つ -> trueである時にwhileの中の処理が動く
つまり､ずっと条件式がなりたてばずっと繰り返す
例は別の場所で書きます

### 繰り返し中止`break`,継続`continue`
##### break
繰り返しの処理をやめて別の処理に行く **elseの部分にはいかない**
```python:countが10になったらやめる
count = 0
while(True):
  if(count == 10):
      break
  print(count)
  count += 1

print("countが10になったので数えるのやめます")
```
```:結果
0
1
2
3
4
5
6
7
8
9
countが10になったので数えるのやめます
```
```python:1から10までの奇数だけを表示
count = 0
while(count < 10):
  count+=1
  if(count % 2 == 0):
    continue
  print(count)
```
```:結果
1
3
5
7
9
```
## 繰り返し for構文
```python:書き方
for ループ変数 in 範囲:
  # 繰り返す処理
else:
  # 繰り返し
```
**ループ変数**
変数のルールに従っていればなんでもok
大体`i`とかが使われる
**範囲**
色々あるから実際に見ていこう
```python:range(回数)
for i in range(10):
  print(i)
```
```:結果
0
1
2
3
4
5
6
7
8
9 #0~9まで
```
```python:range(開始値,終了値)
for i in range(0,10):
  print(i)
```
![名称未設定ファイル.drawio (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421721/e0f8eb02-840f-50c1-c6d2-0196147be4a6.png)
```:結果
0
1
2
3
4
5
6
7
8
9 #0~9まで
```
i+=1なんてどこにも書いてないけど､コンピューターが勝手にやってくれる
```python:range(開始値,終了値,ステップ値)の例1
for i in range(0,10,1):
  print(i)
```
```:結果
0
1
2
3
4
5
6
7
8
9 
```
```python:range(開始値,終了値,ステップ値)の例2
for i in range(0,10,2):
  print(i)
```
```:結果
0
2
4
6
8 
```
ステップ値はループ変数iにいくつ数を足すかということ
range(開始値,終了値)の書き方だとステップ値が勝手に1になってるということ

#### elseが動く時
主に以下の2つ
1. そもそもwhileを動かさなかった時
2. breakで繰り返しを抜けなかった時(つまりbreakを使うとelseの部分は動かない)

```python:そもそもwhileを動かさなかった時の例
number = 8
while(number < 8):
  print("ご飯を食べる")
  i+=1
else:
  print("お腹いっぱいです")
```
```:結果
お腹いっぱいです <-そもそもnumberが8以上だったのでelseの部分が表示される
```