【初学者向け】初学者によるpython基礎（変数、関数)　No.1

# はじめに　

処理を書く中で printはよく使いますが、それ以上と言っても過言ではないほど利用するのが<font color="red">変数と関数</font>(printも関数ですが...)です。　
ここらへんの考え方は、まだまだ簡単な方だと思うのですぐに理解できると思います。また、書く上で超利用するので自然と身につくと思います。　

# 変数の利用　
pythonなどのプログラムでは、数値などを入れた箱（変数)を用意することが出来ます。　
この箱のことを、<font color="red">変数</font>と言います。
とりあえず、例を書いてみます。　
```python 
hako = "パソコン"
```
今回、"パソコン"が入っている hako という変数を用意してみました。今、hako(箱)の中に、"パソコン"というものが入っている状況です。
この箱にパソコンが入っているかprint()を使って確認してみましょう。　
```python 
print(hako) 
``` 
実際に実行してみると、ターミナルに パソコン が表示されました。　
＊print()で、変数の中を確認する場合、変数に "" をつけないので注意しましょう。　

とりあえず、パソコンが現在は入っているようです。次に、先ほどの記述の下に同じ箱を用意して、"デスクトップ"を入れてみましょう。　
```python 
hako = "パソコン"
hako = "デスクトップ"
print(hako)
```
実行してみるとターミナルには　"デスクトップ"　しか表示されません。　
pythonなどの言語は基本的に上から下へ実装されるので、箱には後の"デスクトップ"が入っている状態になります。
つまり、=　で箱にものを入れていると言い換えられます。　
次に、数値を新しい箱の中に入れてみましょう。　
```python 
hako2 = 10
print(hako2)
```
実際に実行すると 10 が表示されます。加えて、5という数字を箱の中に入れてみましょう。今度は、演算子を利用し書いていきます。　

```python 
hako2 = 10
hako2 = hako2 + 5
print(hako2)
```
この記述を実行すると 15 が表示されます。ここで悩む人が多いと思うのですが、この考え方はかなり利用するので覚えておく必要があります。(私も、非常に悩んで小挫折しました,,,)

上のhako2には、もともと10が入っています。
その後、やべっっ 5 入れ忘れた！　と思い出して急いで hako2に + 5
しています。
このとき、私たちは　「この箱(変数)には15が入ってるな」と直感的にわかります。当たり前ですが10に5を足してますからね。　
しかし、この記述を処理してくれる機械たちは、これが直感的にはわかりません。　
なので、 この箱には 10 + 5 した数が入ってるよ!
と教えてあげる必要があります。この教えてあげる記述が、 
<font color="Red">hako2 = hako2 + 数値</font>
となります。　
この他にも、別の箱を用意し、その中に箱を入れてまとめる方法もあります。　
```python 
hako3 = hako2 + 5
print(hako3)
```
このように記述しても 15 が入った箱を作ることが出来ます。　
この記述では、 hako3 の中に　hako2 と 5 を入れて hako3を 15 の入った箱としています。　
この15は、15を表示していますが、実はprintでは 15のある場所を参照して 15 を表示しています。この考え方も超がつくほど重要ですが初学者の場合は、そうなんだぁぐらいで今はいいと思います。　

# 関数の利用　
関数と聞いて真っ先に思いつくのは三角関数などの学校で習った関数だと思います。　
関数はどのような動作をしているでしょうか?
一つ関数の式を用いて説明したいなと思います。以下の関数を見てみましょう。

・ y = x + 5

上の関数は簡単にいうと　「xに好きな数字を入れて + 5をすると y という数字が出るよ」　という関数です。　
この関数はもちろんその他の動作をすることが出来ません。ただ x に 5 を足して数値を出してくれます。　
このようにある動作をしてくれるものが、<font color="Red"> 関数 </font>です。
なので、print は出力だけをしてくれる関数ですし、他の動作をしてくれる関数もあります。　
では、文字を全て大文字にしてくれる関数を使ってみましょう。　
```python 
print("abc".upper())
```
と記述してみます。 upper(アッパー)は、小文字を大文字に変換してくる関数です。　
＊逆に大文字を小文字にしてくれる関数 lower もあります。　

upper()の記述方法は、 大文字にしたい文字達.upper() と記述する必要があります。感覚的には upperの後の () に　. の前にある文字が入って大文字になるイメージです。
また、upperはもともとから利用できる関数であり、中にはライブラリをインストールする必要があるものもあります。（よく利用するものは後日書くかも)
関数ですが、私たちももちろん作ることが出来ます!!
では、以下のような関数を定義して作ってみましょう。　
```python 
def kansuu():
    print("これが関数!!")
```
これが、関数です。と言ってもわかりにくいので順を追って説明します。　
関数は以下のルールで定義します。　
```python 
"""
def 関数名(引数1,引数2,引数3,...):
    処理1
    処理2
    .
    .
"""
```
となっています。defは、関数を作成する際のおまじないです。
関数名は、自由につけることが出来ます。(例外を除く)
基本的には、やりたい動作を表す英語でつけるのがいいと思います。また、これらの規則があるのでそれを学ぶ必要があります。(長いので今回は除く、、後日まとめるかも)
引数とは、これからこの関数で使われるものが入っている値のことを言います。処理とは、中で行われる動作のことを指します（足し算など)。
以上のことを踏まえて、それっぽくしてみましょう。　
```python 
def practice(a = 5,b = 7):
    pls = a + b
    plint(pls)
```
上記で practice 関数を作成してみました。引数は 5が代入された a と7 が代入された b です。　
中では、 a + b　を足して　pls という箱に入れ、printで出力しています。　また、2行目と3行目にインデント(半角4文字分の空き、tabキー1回分)が必要です。機械の人たちはぱっと見でdefの範囲がどこまでかわからないので、インデントを下げて範囲を教えてあげる必要があります。
ここで実行した方ならわかると思いますが、これだとコンソールに表示されません。
書き方は合っているため、printは実行できます。しかし、今の状態は
「plintしたけど、呼ばれてないしゆっくりしとこ」
という怠け者状態なのです。（returnを使って働かせる方法もありますが、後のメモで記載します)
なので利用したい場合は、こちらから呼び出す必要があります。では、正しい記述をして実行してみましょう。
```python 
def practice(a = 5,b = 7):
    pls = a + b
    plint(pls)

practice()
```
上記のように、practice()を関数の外に書くことで呼び出して使うことができるようになりました。　
この他に、関数と変数はいろいろな書き方ができるため、新しいメモを作成し書いていこうと思います。とりあえずNo.1変数、関数の説明は以上となります。　

＊関数と呼んでいますが、オブジェクト指向ではメソッドと呼ばれています。ここら辺は厄介ですが、やっている内容としては相違ありません。
概念として違いがあるのですが、オブジェクト指向を勉強する必要があります。なので、pythonではメソッドと呼ぶ。と覚えといて、後ほど勉強する感じでも良いと思います。　
＊プログラミングを行う上で命名規則というものがあります。これは、誰がみても理解しやすい内容にするために統一しようということで考えられたものです。命名規則は、私的利用だけなら気にしなくてもいいかもしれませんが、研究や業務ではほぼ必須で守る必要があるので少し気にしつつ勉強しましょう。　
＊pythonは、インデントを利用しひと段落をまとめたりしています。インデントは半角4文字分の空きが必要です。javaなどに比べ、インデントで区切りをつけるのでぱっと見わかりやすいですが、インデントの利用にも気をつけつつ勉強しましょう。
# 練習問題　
```python
"""
練習問題1
mikan という変数と apple　という変数を記述し、それぞれに5を代入しましょう。
その後、pls　という変数を作成し、mikan と　apple を代入し足した数を、printを利用し表示しましょう。このとき、
printに入れらるのはplsだけです。
-表示例-
10

練習問題2
a という変数と　i という変数を記述し、a に "あ" を、i に "い"を代入しましょう。
その後、ai という変数を作成し、a と　i を結合した ai をprintを利用し表示しましょう。
このとき、printに入れられるのは ai だけです。
-表示例-
あい

練習問題3
3つ以上の変数を記述し、各変数に好きなように数を入れてください。　
その変数の合計を一つの変数に代入し、printで結果を表示しましょう。
このとき、printには一つの変数名しか記述できません。
-表示例-
125

練習問題4
"ABC"が代入されている変数 low を記述してください。 
"ABC"を小文字の abc に変換して表示しましょう。
ただし、printの中に"abc"と記述してはいけません。　
-表示例-
abc

練習問題5
halloメソッド(関数)を作成しましょう。　
その中に、printを用いてこんにちは！を表示する処理　
を記述し、結果を表示しましょう。
このとき、引数を記述してはいけません。　
-表示例-
こんにちは！

練習問題6
mulメソッド(関数)を作成しましょう。
その中に、引数の数を掛け算する処理を記述し、結果を表
示しましょう。　
引数は、2つ記述してください。　
利用する変数は、3つ記述してください。
-表示例-
48

練習問題7
jaメソッド(関数)を作成しましょう。　
引数に、ja1 と ja2 の変数を記述しましょう。　
ja1 と　ja2 にそれぞれ あ行、か行の文字列を記述し、
結合したものをprintを用いて表示しましょう。
ただし、メソッドの中にja1とja2以外の記述はできません。
-表示例-
あいうえおかきくけこ

演習問題8
mathメソッド(関数)を作成しましょう。
引数に、適当な名前の変数を2つ記述してください。
メソッド内に1つ目の引数を、× 2をする処理を記述してください。
2つ目の引数を2乗する処理を記述してください。　
その変数2つを足した値を表示してください。　
ただし、引数に直接数値を代入することはできません。　
-表示例-
420
```
今回の問題は、簡単なメソッドの書き方と変数の扱い方を学習するために　
練習問題を記述しました。また、ところどころ抽象的だったり、個人に委ねる感じにしました。あんまり、縛りすぎると説明しすぎてアウトプットを邪魔してしまうかもっと思ったためです。
もし読みにくかったらごめんなさい！！　

最後の演習問題8は、引数に直接数字を記述しない方法で答えを求めています。以下のような、答えが要望に当てはまるかなと思います。　
```python
def math(math1, math2):
    math1 = math1 * 2
    math2 = math2 ** 2
    print(math1 + math2)

math(10,20)
```
これは、mathメソッドを呼び出すときに、引数に10と20を入れて呼び出しています。(,)の , を利用して区切っています。半角スペースなどでは区切れません。　
また、「引数に数字入れるだけなら、math(10,20)をメソッドより上に記述してもよくね？」と思うかもしれませんが、エラーが発生します。　
これは、あくまで関数を呼び出すときに、引数に数値を入れています。なので、上から順に処理するとき、謎の math(10,20)が出てきたら処理するのに困ってしまいます。 
加えて、やりがちなのが関数の前に a= 10 b= 20などと記述し、呼び出すときにメソッド名だけを書いてしまうことがあるあるだと思います。以下に例を示します。
```python
a = 10
b = 20

def math(a, b):
    print(a + b)

math()
#これを実行してももちろんエラーです
```
このとき、defの上にある a と b は、引数の a, b は全くの別物です。なので上で a と b に値を入れても、引数には値が代入されません。これは、グローバル変数とローカル変数によるスコープの違いによるエラーです。この考えも超大事なので後日、新しいメモに記述します。
今は、メソッドと変数に基礎的なところを動作を覚えていれば大丈夫です！！
# 終わりに　
今回は、変数とメソッドの動作と記述方法をメモしました。どちらもプログラミングをした日から見ない日はないというぐらい利用する機能です。なのですぐ理解できる思いますが、初めて触ると結構悩む箇所なので、調べたり記述したり聞いたりすることが大事になってきます。　
次は、変数と関数 No.2のメモを書いていくので見てもらえると嬉しいです。　
また、間違っている箇所などがありましたらご連絡いただけると幸いです。
では、ありがとうございました！　
---ひよこ---