Python学習記録_1日目.Pythonの基本構文について


# 元記事
[Python学習記録_プログラミングガチ初心者がKaggle参加を目指す日記](https://qiita.com/noway6064/items/14ab494dc65d3040f733)
こちらの1日目の学習内容まとめ。

### プログラミングとは 10m …
>プログラミングとは、コンピューターにさせたい仕事をプログラムすることです。
つまり、コンピュータへ指示するプログラムを作ることがプログラミングになります。

>Pythonは1991年にオランダ人のグイド・ヴァンロッサムが開発し2000年にPythonバージョン2が公開されました。
Pythonは、大きく次の2つの特徴を持っています。
1.プログラムを読みやすい可読性の高さ
2.幅広い用途で利用可能
Pythonは人工知能技術領域で大変活用されており、ここ近年人気な言語にもなっています。
他にも、Webアプリケーション開発や、データ分析などでも利用が可能で、身につけておくことで、様々な事をPythonで実現が可能になります。

>プログラミングは実際に手を動かしながら学んでいくことをオススメします。

なんとなくPython=機械学習に使う言語、というイメージがあったのでアプリケーション開発にも使える、というのが驚きでした。
色んなサイトを見てみてもとにかく手を動かす、実際に自分で書いてみることの重要性が説かれていたので
これは心にとめながら進めていきます。


### 初めてのPython 15m …
Google Colabなるサイトを利用することで実行環境？にするらしい。
恐らく実際にPC上でPythonを動かすには色々と環境設定をする必要があるが、
このサイトを使うことで疑似的に環境が整った状態で動かせるってことなのかなと思料です。

##### 文字列＆コメント

```Python 
print("Hello World")
 # 出力結果 Hello World
```
初めてのコードはこちら。
print()
で()内に入力されたものを出力する。
データには数字型と文字型が存在し、
文字型のデータを扱う際には""(ダブルクォーテーション)で囲ってあげる必要あり。
また、コード内にメモを残しておきたい時は文頭に#を付けることで文末までをコメントとして扱うことができる。
SQLとこの時点で既に色々違うんだなあ…

### 数値
```Python 
print(10)
 # 出力結果 10
print(10+5)
 # 出力結果 15
print(10%3) # あまりを求める際に使用
 # 出力結果 1
```
数値型で文字を扱う場合は""で囲う必要がない。(囲んだら文字列として扱われてしまう)
数値型は四則演算をすることができて、%を使うと余りを求めることができる。
これは昔FizzBazz作ってみよう、みたいなコードで使ったことあるような気がする…
```Python 
print(10+5)
 # 出力結果 15

print("10+5")
 # 出力結果 10+5
```
数値型として扱いたいものを""で囲ってしまうと↑のように四則演算したくてもできなくなったりするので注意。
日付の足し算引き算とかはどうするんだろう…

### Python データ型 15m …
>データ型の全体像
まずはじめに、Pythonにおけるデータ型の全体像を俯瞰しましょう。
この章では、下図の整数型、文字列型、リスト型、辞書型に絞って学びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252820/4e04835d-5f87-6345-9bf8-b6a07e96b56c.png)

何度見返しても「整数型」の文字を見つけることができませんでした。
多分心が清らかな人にしか見ることができないものだと思うので、数値型のことだと思って進めます。

##### 変数と型
>プログラミング言語によっては、変数を宣言する際に、「型宣言（この変数にはこの型を格納します。といった宣言）」を行う必要があるプログラミング言語があります。
Pythonの変数には型宣言が必要ないため、変数にどのような型でも入れることができます。

初めての言語なのでちょっと何言ってるか分からなかったですが
Pythonは面倒な宣言はいらないよ！ってことだと思います。やったぜ

##### データ型について
```Python 
print(type(10))
 # 出力結果 <class 'int'>
```
データの型は数値型・文字型の中にも色々あって、
実際にどんな型で入っているのかを確認するためのコマンドがtype()で()内のデータタイプを確認可能。

##### 文字列型
文字列型については+と*でそれぞれ**結合**と**反復**が可能。
```Python 
 # 結合(+)の使い方
a="hello "
b="world"
print(a+b)
 # 出力結果 hello world
```
```Python 
 # 結合(+)の使い方
a="hello "
print(a*3)
 # 出力結果 hello hello hello 
```
これは変数aとbをそれぞれ指定してそれを使ってるのかな…？



##### 型変換(キャスト)
データの型を変えるときに使う機能。
SQLでもCAST関数ってあるのでだいたいそれ
```Python 
name="Tom"
age=24
print("My name is " + name + "My age is " + age)
 # 出力結果 TypeError: can only concatenate str (not "int") to str
```
こんな風に、異なるデータ型である文字列型と数値型を結合しようとするとエラーになる。
アルファベットを数値にすることはできないので数値型を文字型に変更してあげる必要があり、

```Python 
name="Tom"
age=24
print("My name is " + name + "My age is " + str(age))
 # 出力結果 My name is TomMy age is 24
```
str()で()内のデータを文字列に変換可能。
逆に文字列として保管されているデータを数値型に変えたい場合はint()を使用する。


##### リスト型と辞書型
>このテキストではデータ型の中でも特に大事な「リスト型と辞書型」に関しては触れておりません。
是非、このテキストを終えた方は「リスト型と辞書型」のテキストを読み進めてみてください。

なるほど。(後で読みます…)


### Python 変数 10m …
##### 変数
>変数とは値に付ける名札です。
ひとつの値に複数の名前を付ける事ができます。
```Python 
lang="python"
Lang="Python"
print(lang) 
 # 出力結果 python
print(Lang)
 # 出力結果 Python
```
変数名の大文字と小文字は区別されるが、基本的に変数名は全て小文字でつけるのが望ましい。
(つまり↑の"Lang"という変数名は好ましくない、らしい)

##### 定数
>定数は値が変えられない値です。
変数では値を後から変えられますが、定数は変えられません。
ですが、Pythonには定数を定義する構文がないため、定数的な意図を持って定義する場合には、すべて大文字で変数名を定義することが多いです。
大文字の変数に出会った場合には、値を書き換えないようにしたほうが無難です。

コメントのところでも思ったけどコードって基本的に人に見られる前提で書くものなんですねえ…

##### 予約語
>変数名に使用できない単語を予約語と呼びます。（関数名も同様です。）
予約語を用いてしまうと、構文エラー（SyntaxError)が起こってしまいます。
つまり、予約語に関して理解しておくと、変数定義時等にエラーを引き起こさないプログラムを作る事が可能です。
Python3系では、おおよそ30個ほどあります。
以下は全てPython3系での予約語ですので、それらは変数名などに使用できません。
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
また、変数セクションでも説明しましたが、Pythonは変数名は大文字と小文字は区別されます。
そのため、例えばFalseを変数名としては定義出来ませんが、falseは可能です。

それ自体が意味をもつ単語は変数名に使えない、みたいなイメージ。


### Python if文 10m …
条件分岐、って聞くと急に難易度が上がってきた気がしますが実際に色々とルールがあってプログラミングらしくなってきました。(小並感)

##### 条件分岐 (if文)
>プログラミングでは、ある条件に当てはまるかどうかによって処理を分ける事が出来ます。
例えば「テストの点数（条件）によって成績（処理）を変える」というのも条件分岐で表すことが可能です。
Pythonではif文を用いることで、上記のような条件に応じて処理を変えるプログラムを作ることが出来ます。

```python
age=20
if age>=20:
  print("成人です")
else:
  print("子供です") 
 # 演習課題で作成したコード
 # 出力結果　成人です
```
分岐を増やしたい場合はelifを中間に挟めばOK。
ただし細かいルールあり。

##### 条件式の作り方
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252820/46505c89-ba09-999f-aaa6-b553ba5abb5c.png)

等しいを示すために==になるのが少し違和感あったけど
=は代入を示すものなのでそれとの差別化が必要、という理解。
等しくないを示すのが!=なのは知らなかった…Not INとかじゃダメなんですね…
条件部分については文末に:(コロン)を打つ必要あり。

##### コードブロックとインデント
>Pythonでは、インデント(字下げ）で処理をまとめます。
このインデントはPythonの大きな特徴になります。
基本的には、半角スペース4つ（もしくはタブキー）がインデントの役割になりますが、Pythonの文法では、末尾にコロン「:」がつく構文が多いです。
末尾に:が出てきたら、インデントをする必要があるというのがPythonの決まりになっています。

SQLなんかだとスクリプトを見やすくするためにインデントで整えてたんですけどそれはNGとのこと。

### 関数 5m …
##### 関数とは
>関数とは、ある入力を受け取り、その入力に対して何らかの計算をした後に、その結果を返す仕組みです。
もう少し噛み砕くと、ある入力xに対して、出力yが求まるものを関数と言います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252820/a7881039-5b3a-cbbe-58d4-14109db3963d.png)
ここで大事なのは、関数の出力は必ず1つであるということです。
出力が複数値あるものは関数ではないので注意です。

出力が複数あるものは関数ではない、は覚えておいた方がよさそう？

##### 関数の書き方
```python
def f(x):
    print(x*5)

f(0) # 0
f(3) # 15
```
いきなりコイツがぶっこまれてたんですが
def→関数を指定するためのコマンド？
でコロン以下のインデント空いてるところが関数の中身を定義する部分ですかね？


##### 機械学習をする上で抑えておきたい関数
>おそらく皆様が数学編の関数のテキストを読まれているという事は、機械学習に必要な数学を学びたいからだと思います。そこで機械学習を学ぶ上で最低限抑えておきたい関数をご紹介します。
一般的に次の様な関数があります。
> 
>1次関数
2次関数
指数関数
対数関数
三角関数(sin,con,tan)
> 
>これらは別の章で説明していきます。

関数のテキスト、読んでないです…
三角関数までしかわからないのでこれも別途キャッチアップ必要ですね…

# 1日目の感想
今のところはそんなに難しいこともしていないですし、SQLスクリプトと共通のルールもあって
抵抗はないですね。
ただ、学習時間の目安は単純に読み終わるまでの時間みたいなのでこうやって自分なりにまとめたりコード書いてみたりすると
余裕で目安以上の時間がかかるので少しスケジュール見直します…

明日も頑張れ自分