どうもPython初学者の中川です。
いきなり説得力ゼロですが、初学者なりにどうすれば初学者を脱退できるのか考察してみました。
どの言語においても共通して言えることかも知れませんがが、ほとんどのコードは クラス、関数、 if elif else などによる条件分岐、while for 文などによる繰り返し処理のなどのいずれかに含まれます。
この3ヶ月くらい、Pythonを学んで分かったことは、この基本文法さえ押さえていれば、その都度メソッドやモジュールを調べて使うことでどんなプログラミングコードだって書けるということです。
なので、基本的な文法知識さえあれば、それを自分のやりたいことに応用していくことで、一人前のパイソニスタになれるのではないかと考えました。
・ifによる条件分岐
まず、一番良く使うifによる条件分岐です。
if文は
if 条件式①:
処理内容
elif 条件式②:
処理内容
else :
処理内容
のように記述します。
例えば、簡単なものですが
a = input()
if a < 0:
print("負の値が入力されました。")
elif a = 0:
print("0が入力されました。")
else:
print("正の値が入力されました。")
この条件分岐は、入力された値をaで受け取りそれをaの値によって分岐し、出力します。
・繰り返し文
while文
while文は繰り返し文といわれるように、指定の条件に当てはまる間、処理の実行を繰り返すというものです。
使い方としましては、
while 条件:
処理内容
のように記述します。
そして、条件に当てはまる間はずっと処理内容が実行さます。
例を挙げると、
a = 0
while a < 100:
a += 1
print(a)
print("処理を終了します。")
このwhile文は、a < 100の条件式によってaが100より小さい間はずっと実行されます。
a+=1というのは、a = a + 1と同じコードを表します。
これによって100を越えるまでaの値が更新され続けます。
そして、1から99までの値がprintされ、100に到達した時に、処理を終了します。と出力されます。
while文は条件式を満たす時、ずっと実行され続けますが、条件式を満たしている時の中でも、さらにこの条件を満たせば終了してもよいというとき。
つまり、特定の条件でwhile文を抜け出したい時はbreakを使います。
while 条件式:
処理内容
if 条件:
break
このように記述すれば、条件を満たす時にwhile文を抜け出すことができます。
例を挙げますと、
a = 0
while a < 100:
a += 1
print(a)
if a == 50:
print("値が50になりました")
break
print("処理を終了します。")
実行すると50までの値が表示された後に、値が50になりました。処理を終了します。
と、出力されます。
aの値に達した時に、breakによってwhile文を抜け出し、その後、処理を終了します。と出力します。
for文
for文はリストを指定して、リストの中身の各値を使って処理を実行するやり方と、回数を指定して実行するやり方があります。
回数を指定した繰り返し処理のやり方としては、
for _ in range(10):
処理内容
と、記述します。
ここでの、_ は特になにも指定しないということを示しており、10という数字は処理の実行回数を表しています。
つまりここでは、処理内容が10回実行されることになります。
リストを使ったfor文は
lists = [1,2,3,4,5,6,7,8,9]
for lists in list:
print(list)
ここでは、1〜9までの数字が順番に表示されます。
つまりリストの中の数字を表示する処理が9回実行され、それぞれの数字を表示するわけです。
リストを使ったfor文の特徴は、指定したリストの中身全てを使って実行してくれるということです。
for 文の特徴を利用すれば、2つのfor文を使ってこんなこともできます。
list_1 =[1,2,3,4,5]
list_2=[1,2,3]
for one in list_1:
for two in list_2:
print(one,two)
こちらを実行しますと、
1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5
3 1
3 2
3 3
3 4
3 5
のように表示されます。
先程述べた通りfor文はリストの中身全てを使って処理を実行してくれますので、ここでは二つのリストの中身全ての組み合わせ15通りを表示してくれています。
リスト内包表記について
リスト内法表記は、for による記述を簡略的にしたものです。
実際に、どのように使うかというと、
lists=[1,2,3,4,5]
[print(list) for list in lists]
このようにすると、1から5までの数字が出力されます。
リスト内包表記はprint(list)の部分に実行したいメイン処理を記述し、メイン処理で使いたい引数を in の後に記述します。
今回のリスト内包表記を単純にfor文で表すと
lists = [1,2,3,4,5]
for lists in list:
print(list)
と、なります。
今回は処理が簡単なものであまり恩恵を感じられないかもしれないですが、
リスト内包表記はPython特有のものであり、プログラミングのコードをとても簡潔にしてくれますので、余裕があれば是非習得したい用法です。
・関数とクラス
関数は何度も使うことが想定される計算や処理を関数として設けておくことで、簡単に何度でも使えるようにする処理です。
例えば、
def call(name):
print("私は" + name + "です。")
call("中川")
すると、私は中川です。
と、出力されます。
call(name)の部分のnameを引数と呼び、関数を呼び出すときに任意の文字列や数字を挿入することができます。
そして、この引数は複数指定することができます。
例えば、
def call(name,age):
print(name + "は" + str(age) + "歳です。")
call("中川",21)
とすると、
中川は21歳です。
と、出力されます。
age は数値なので、数値と文字列を連結させるときには一度、数値を文字列に直してあげる必要があります。
数値を文字列に変換するには、str(数値 or 数値の入った変数)と、するだけです。
また、注意が必要なのが、関数の中で指定した変数は、その関数の中でしか使用できないということです。
例えば、
age = 20
def a():
age = 100
print(age)
a()
print(age)
すると、100と20が表示されます。
ここでは a()によって100が
print(age)によって20が表示されています。
関数の外で定義した age = 20 をグローバル変数、関数 a()内で定義したものをローカル変数と言います。
クラスについて
class関数の中の一つ目の引数には、必ずselfを使います。
クラス関数を使った例として、
class Info:
def __init__(self,name,age,live):
self.name = name
self.age = age
self.live = live
def call(self,name):
print("こんにちは{}さん".format(name))
print("私は{}です".format(self.name))
クラスを指定するときは最初の文字は大文字にするのがセオリーです。
__init__というのは使用される名前を決めるいわゆる初期関数というものです。
selfというのは、そのインスタンス自身を示す用語です。クラスの中で定義する引数には必ず self を書きます。
インスタンスは、classで作成されたオブジェクト(中身の関数も含んだもの)全体を指します。
そして、self.引数 = 引数
と、記述しています。
self.引数に代入する値は、引数と同じ値ではなくて良いのですが、今回はわかりやすいように右辺と左辺を同じにしています。
これによって、インスタンス自身が所持する引数を定義することができ、そのインスタンス自身の情報として引数が定着します。
これによって、インスタンス内の他の関数でinit関数の中で指定した引数を使うことができるのです。
そして、初期関数内にて name, age, live をそれぞれ定義しています。
実際に、実行して確認してみます。
person = Info("中川",20,"東京")
person.call("阿部")
すると、
こんにちは阿部さん
わたしは中川です
と、表示されます。
ここでは、Info ("中川",20,"東京")と、していますので、このInfo クラス自身が、中川という存在になりました。
そして、call関数を呼び出すときにはcall()関数の()の中に引数を指定します。
注意が必要なのは、call関数で指定した引数はcall関数でしか有効では無いということです。
また、call関数で代入したnameと初期関数で代入したnameとは、全く別の物であるということです。
ここでは、call内で定義した阿部という名前と、インスタンス自身に組み込まれていた(self.name)の部分の中川をそれぞれ表示しています。
以上を踏まえれば、あとはメソッドやその他のモジュールをその都度調べれば大体のコードは書けます。
少なくとも3ヶ月勉強してきた中ではそうでした笑。
・エラーに遭遇した時
しかしながら、
ある程度長いプログラムになってきますと、コードを書けて、よしできた!と思ってもほとんどの確率でエラーに遭遇します。
おそらく初学者を脱却するためには、このエラーと仲良くなることが必要です。
pythonでは、エラーが発生した場合
エラー名 Traceback (most recent call last)
・・・
ーーー>エラーがあった箇所
・・・
のようにエラー内容とエラーがあった箇所が明記されます。
例えば、SyntaxErrorは、よく見かけるエラーの一つですが、分かりやすく文法上の間違いを示してくれます。
Syntax Error Traceback (most recent call last)
・・・
>>間違ったエラー文
・・・
というように太字でエラーが起こった場所を指し示してくれます。
その他にも、
定義してない変数名を使用した時に起きる Name Error
データ型(文字であれば str型 数値であれば int 型)が間違えている時に起きるエラー、例えばstr型どうしで掛け算をしようとした時などに起きるType Error
対象のオブジェクトが持っていないメソッドを使おうとした時におきるAttributeError
などがあります。
エラーは、この他にもたくさんの種類があって全て覚えて対処する、という訳にはいきません。。
ですが、分からないエラーがでたとしても、そのエラー名や、内容をを検索にかければ必ず情報が出てきますし、同じような状況に陥った人が何かしらの情報をまとめてくれたりしています。
エラーが出ても、それに対処できるようになればもっとpythonの学習がもっと楽しくなり、もっと学びたいと思うようになります。
その他モジュールや、メソッドなどコードを書く上で必要なものは星の数ほどあります。
それでも、わからないことがあっても調べて、それで得た知識を自分のやりたいことに応用する力こそが初学者脱退に必要だと初学者なりに考察しました。
この情報が誰か1人にでもお役に立てたなら本当に嬉しいです。
長い文章になってしまいましたが、閲覧していただきありがとうございました。