見出し画像

Pythonの勉強するよ【基礎編②】

基礎編①を見てくれた方、ありがとうございます。
おさらいを簡単にすると、こんな感じでした。

【簡単なおさらい】
・Pythonは式を評価してくれる。
・式は、値と演算子で作られる。
・値にはデータ型があって、Pythonの場合は自動で型変換をしてくれない。

今回は前回の予告通り、「変数」の話から入っていきます。
それでは、始めていきます。

1.4 変数ってなに?

まずは変数ってなに?ってところから始めます。
変数とは、コンピュータのメモリー上にある箱のようなもので、一つの値を格納することができます。プログラムでは式の評価結果をあとで使いたいことが多々あります。この時に使用するのが変数です。
式の評価結果を後で使いたいときに変数に格納しておくことで、後で使うことができます。
変数に値を格納するには、代入文を使用します。
下のように記述します。

 x = 42

この式を分解すると、次のようになります。

つまり、「xという名前の変数に42という値を格納するよ」ということですね。ここで使用している=のことを代入演算子といいます。
次は変数を実際に使ってみましょう。

>>> x = 42 #1
>>> y = 2
>>> x + y #2
44
>>> x + y + x
86
>>> x = x + 10 #3
>>> x
52

変数に初めて値を入れることを初期化する(または生成する)といいます。(#1)
生成した後は、式の中でほかの変数や値と組み合わせて使用することができます。(#2)
変数は、一度値を格納した後も値を格納することができます。新しい値が変数に代入されると、古い値は忘れられます。#3の例では、xにx+10という値を代入しているので、xに52が代入されることになります。これを変数の上書きといいます。

1.4.1 変数名

次に変数名の話をしましょう。
変数名にはルールがありますが、以下のルールに従う限り自由につけることができます。

[変数名として使える文字] 
・小文字の英字(aからzまで)
・大文字の英字(AからZまで)
・数字(0から9まで)
・アンダースコア(_)

ただし、数字は先頭につけられないので注意しましょう。

[予約語は変数名として使えない]
予約語
というのはPythonですでに意味を持っている言葉のことです。
一例を示します。

if   class   True   False   None

これらのifやclassなどはすでにPythonが使ってるから変数として使えないよってことです。これらのルールに従う限り、自由に変数名を付けることができます。

変数名にはどんなデータを扱っているかのかわかるように名前を付けてあげましょう。段ボール箱に「洋服」と書いているのに中に食器が入っていたら「洋服じゃないじゃん!」ってなりますよね?それと同じです。

【Point】
・変数とは、コンピュータのメモリー上にある箱のようなもので、値や式の評価結果を入れることができる。
・変数名のつけ方にはルールがあるが、それに従えば好きにつけられる。
・変数名には、どんなデータを扱っているかわかるように名前を付けてあげる。

1.5 最初のプログラム

1.4では変数とは何かを勉強しました。
1.5では実際にプログラムを書いていきます。
インタラクティブシェルは、命令を一つずつ実行するのには便利ですが、通常はエディタを使ってプログラムを書いていきます。
私はVisual Studio Codeを使用していますが、自分の気に入ったものを使用すればよいです。
それではいよいよプログラムを書いていきましょう!
下のコードを入力してください。

# このプログラムは挨拶を表示して、名前と年齢を訪ねる
print('Hello world!')
print('What is your name?')
my_name = input()
print('It is good to meet you,' + my_name)
print('The length of your name is:')
print(len(my_name))
print('What is your age?')
my_age = input()
print('You will be ' + str(int(my_age) + 1) + ' in a year.')

コードを入力したファイルを、hello.pyという名前で保存します。保存したファイルをコマンドプロンプトやIDLEで実行します。実行した結果は下のようになります。

Hello world!
What is your name?
zioker # 自分で入力
It is good to meet you,zioker
The length of your name is:
6
What is your age?
20 # 自分で入力
You will be 21 in a year.

うまく動きましたか?それでは次のセクションでコードを分析していきましょう。

1.6 プログラムの分析

1.5では、ついにプログラムを書いていきました。
それでは、プログラムを解析していきましょう。

1.6.1 コメント

まずは1行目から。この行はコメントといいます。

# このプログラムは挨拶を表示して、名前と年齢を訪ねる

Pythonでは、#記号から行末までのテキストをコメントとして扱います。
Pythonは実行するときにコメントを無視するので、コードの注釈などを書くときに使います。
他にも、プログラムをテストするときに、行の先頭に#をつけることで、一時的に無効化することがあります。これをコメントアウトといいます。

1.6.2 print()関数

次にprint()関数について見ていきましょう。
関数というのは、名前の付いたコードのことです。
プログラムを書いているときに、全く同じコードを何度も何度も書くのは嫌ですよね?そういう時に使われるのが関数です。
詳しい解説は、また別の章で行います。

print('Hello world!')
print('What is your name?')

print('Hello world!')という行は、「'Hello world!'という文字列を表示して!」という命令をPythonにしています。このようにprint()関数を実行することを、print()関数を呼び出すといいます。
また、print()関数に渡している値(今回は'Hello world'のこと)を引数といいます。
つまり今回のプログラムの中でprint()関数を使っている部分は、「引数で渡した値を表示してね!」という命令をPythonにしてることになるわけですね。

1.6.3 input()関数

input()関数は、ユーザーが入力キーボードからテキストを入力してEnterキーを押すのを待ちます。

my_name = input()

この関数は、ユーザーが入力した値を文字列で返します。
上の例の場合は、ユーザーが入力した値を変数my_nameに格納していることになるわけですね。

1.6.4 ユーザー名を表示する

さて、次のコードを見てみましょう。

print('It is good to meet you,' + my_name)

print()関数の引数が「'It is good to meet you,' + my_name」となっていますね?
基礎編①で書いた通り、「'It is good to meet you,' + my_name」というコードは、一つの値に評価されます。
つまり、順番に書くとこうなります。

1. 'It is good to meet you,' + my_nameが評価される。(my_nameの値はユーザーが入力した値。)
2. 評価した値をprint()関数に渡す。
3. print()関数が評価した値を表示する。

1.6.5 len()関数

len()関数は、引数として渡された文字列の文字数を整数値で返します。
次のように入力してみてください。

>>> len('Hello world!')
12
>>> len('')
0
>>> len('こんにちは')
5

このようにlen()関数は、整数を返します。

print(len(my_name))

上のコードのように、print()には整数でも渡すことができます。
つまり、「my_nameの文字数を表示して!」とPythonに命令しているということですね。

【TIPS】
Pythonに最初から定義されている関数を組み込み関数を言います。Pythonの組み込み関数で、なんのデータ型の引数を渡せばいいかは、Pythonの公式ドキュメントで確認することができます。わからないときは確認してみましょう。

1.6.6 str(), int(), float()関数

基礎編①の最後で「Pythonは自動で型変換してくれない」と書きました。
今回は、型変換する方法を書いていきます。

>>> print('I am ' + str('20') + ' years old')
I am 20 years old

上のコードのstr('20')を20に変えると、Pythonはエラーを返します。
つまり、str()関数は、引数で渡された値を、文字列型に変換する関数ということですね。
同様に、int()関数は引数を整数型に、float()関数は引数を浮動小数点数に変換します。実際の例はこんな感じです。

>>> str(0)
'0'
>>> str(-3.14)
'-3.14'
>>> int('42')
42
>>> int('-99')
-99
>>> int(1.25)
1
>>> int(1.99)
1
>>> float('3.14')
3.14
>>> float(10)
10.0

int()関数に整数として評価できない値を渡すと、エラーになるので注意しましょう。

>>> int('99.99')
Traceback (most recent call last):
 File "<pyshell#52>", line 1, in <module>
   int('99.99')
ValueError: invalid literal for int() with base 10: '99.99'

>>> int('TEST')
Traceback (most recent call last):
 File "<pyshell#53>", line 1, in <module>
   int('TEST')
ValueError: invalid literal for int() with base 10: 'TEST'


また、int()関数は、浮動小数点数の小数点以下を切り捨てることもできます。

>>> int(7.7)
7

それでは、最後のコードを見ていきましょう。

my_age = input()
print('You will be ' + str(int(my_age) + 1) + ' in a year.')

input()関数は、ユーザーが入力した値を文字列型で返してくれる関数でした。つまり、my_ageには、ユーザーが入力した値が文字列型で格納されています。
次に、問題となるprint()関数です。
なんだかいろいろやっていますね。分析していきましょう。
まず引数のみに着目します。

'You will be ' + str(int(my_age) + 1) + ' in a year.'

先ほど学んだstr()関数とint()関数があるのがありますね?
ここだけに着目していくと、次のようになります。

str(int(my_age) + 1)

str()関数の引数は「int(my_age) + 1」となります。つまり、
「ユーザーが入力した値を整数型に変換して、1を足した後にその結果を文字列型に変換する」という処理をしていることになります。
my_ageに'20'が格納されているとすると、

str( int('20') + 1)
str( 20 + 1) #文字列の20を整数型に変換する
str( 21 ) # 20 + 1を計算
'21' # 計算結果の21(整数型)を'21'文字列型に変換する。

上のようなことをしていることになります。
そして、元の引数は、

'You will be ' + str(int(my_age) + 1) + ' in a year.'

となっていたので、

'You will be ' + '21' + ' in a year.' # 'You will be 'と'21'と' in a year.'を結合する
'You will be 21 in a year.' # これがprint()関数の引数になる。

となり、その値をprint()関数に渡しているので文字列が表示されるわけですね。

【Point】
・Pythonには関数と呼ばれるものがあり、それを呼び出すことで処理を行ってくれる。今回扱ったものは、以下の通り。
・print()関数:コンソール上に引数で受け取った値を表示する。
・input()関数:ユーザーが入力した値を文字列で返す。
・len()関数:引数で渡した文字列の文字数を返す。
・str()関数:引数で渡した値を文字列型に変換する。
・int()関数:引数で渡した値を整数型に変換する。
・float()関数:引数で渡した値を浮動小数点数に変換する。

まとめ

前回と比べると、だいぶ長くなってしまいました。
今回の記事をまとめると、こんな感じです。

【まとめ】
変数とは、値を格納しておける箱のようなもの。
・変数名はのつけ方には、一定のルールがある。
・Pythonには、関数と呼ばれるものがあり、それを呼び出すことで処理を行ってくれる。

基礎編①、②の内容だけでも、ある程度のことはできます。しかし、仕事で楽をしたりしようとすると、Pythonに知的な判断をさせる必要が出てきます。というわけで、次回は「フロー制御」を行っていきます。
それではまた次回。

P.S.

前回から少し間が空いてしまいました。
今回から、Point部分は引用を使用してみましたがいかがでしょうか。
理由としては、

・画像をいちいち作るのが大変。
・Pointだけ検索できるほうが、そこだけ見たい人には便利そう。

といったところです。
(´-`).。oO(次からフロー制御だからフローチャートとかでてくるんだよなぁ)

この記事が気に入ったらサポートをしてみませんか?