eljefeblog 

Any sufficiently advanced technology is indistinguishable from magic

programming python-basic-lectures

【基本を学ぶ2:超初学者向け】Pythonプログラミング入門【構文理解編】

Pythonプログラミング入門【構文理解編】




本記事は以下の疑問を解決する
そんな内容をまとめています。

悩むペン銀

Pythonの基本構文を習得したい。特にPythonで格納できるデータ型の種類について学びたい。





Pythonの基本構文に関する学びを深め
実際に手を動かしてPythonプログラマとしてレベルアップする
道のりを一緒に歩いていきましょう。



**これから読み進めていく人で、初めてプログラミングに取り組もうとしており、これまでまったくプログラミング言語を学んだ経験がない方は本記事の内容は少し難しく感じるかもしれません。
まずはこちらの記事でターミナルに関する基礎知識を付けてから学び始めると良いです。










Pythonにおける構文理解



プログラミングを学ぶ上で初めに知っておくべき事
それはプログラミング言語における構文を理解する事です。


プログラミングにおける『構文』とは、英語で言う所の『文法』です。

英語で外国人に話しかける時と同様、
コンピュータにプログラミング言語を利用して適切に命令を伝えるには
正しい文法で文章(コード)を書く必要があります。



まず基礎を固めることから始めましょう。
初めに抑えるべき内容は以下3つです。

  • ①変数
  • ②組み込みデータ型
  • ③データ操作方法


  • ①変数について


    それでは1つ目。まずは変数から。

    『変数』とは様々な形式のデータを保持する箱のようなものです。

    プログラミングでは様々なデータ(例えば数字, 文字..etc)を扱いますが
    コンピューターがデータを扱うためには事前に変数を用意し、
    これにデータを格納する必要があります。

    例を出すと以下のように記述します。

    
    変数名(自分で決める)= 値 (数値、文字列など)
    
    # 例
    my_children_age = 10   # 数値
    
    my_children_name = 'John' # 文字列
    



    この例ではmy_children_ageと言う変数に10と言うデータ(数字)を格納しています。ここではわかりやすいように『子供の年齢は10才』と言う意味を込めてmy_children_ageと変数名を定義していますが、変数名は自分で好きなように決めて良いです。


    ただ最低限次の規約を守ります。
    ① Pythonの予約語に被らない事
    ② 他人がその変数名を見たときどのような値が含まれているのか分かる事

    変数の定義ではこの約束事を守る事が重要になってきます。


    予約語ってなに?何で予約語と同じ変数名にするとダメなの?


    項目の2で『予約語』と言う言葉が登場しました。
    プログラミングでは以下のような定義になります。

    予約語とは

    構文上特殊な意味を持つ単語のことであり、Pythonでは以下の単語1つ1つが予約語と定義されています。
    (尚Pythonでは予約語≈キーワード)

    and as assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while with yield

    *今全ての予約語を覚える必要はありません。コピペを避け、何度もコードを書いていくうちに自然と覚えてくるので大丈夫です。

    予約語と同じ変数名を付けてはいけない理由ですが、『予約語』と書いてある通り、すでにその変数は何かしら事前に機能が組み込まれており、原則としてデータを代入できないように設計されているからです。

    無理に代入しようとしても予約語によってはエラーが発生するか、エラーが発生せずとも、プログラムを書き終えた後に、予期していた動作とは異なる動作を引き起こす原因となりかねません。

    こういった理由を踏まえて、変数名には予約語と異なる名称を名付ける必要があるのです。



    分かりやすい変数名を付ける理由


    初学者に多く見られる傾向として「x」や「y」を変数として指定する事があります。確かにPythonの構文ルールとして間違えてはいないためエラーは発生しません。

    しかし出来るだけこういった変数名を指定する事は避けた方が良いでしょう。
    一般的に人間は自分で書いたプログラムでさえ詳細な動作について、一週間後には曖昧に、一ヶ月後には殆ど忘れてしまう傾向にあります。

    こうなるとxやyがどのような意味を持つのか推定するにかなり骨が折れます。

    しかもエンジニアとしてPythonでプログラミングに関わると
    頻繁に他者と共同でプロジェクト開発を行う機会が出てきます。

    プロジェクトに関わるエンジニア複数人が貴方の変数名を見て
    変数がどのような値を保持するのか
    容易に理解できる事を常に意識しこれを習慣づけるようにしましょう。
    後にプログラムを確認する際に
    この変数はどのような値を保持しているのか
    即座に理解できるような変数名を指定する事が大切
    です。


    これをする事により開発速度が向上しますし
    何より将来の貴方自身やプロジェクトメンバーから感謝されます。

    整数型(int型)と実数型(float型)


    Pythonでは整数および実数(小数点のある数)はコンピュータ中で異なる形式をとります。具体的には整数をint型・実数をflot型と表します。

    
    #int型
    8
    #float型
    8.0
    
    



    文字列(strings)


    文字列とは書いて字の如くですが一連のテキスト、文の事です。
    宣言するには“”(ダブルクオート)の中に文字を入力します。
    例を挙げましょう。

    
    # 文字列同士は+(プラス)のオペレータで連結することが可能です。
    >>> "Hello" + " "+ "World!"
    'Hello World!'
    >>> "my name is" + "seimei"
    'my name is seimei'
    
    





    ②組み込みデータ型について


    変数に『数字』や『文字列』と言ったデータを格納する方法について学びました。Pythonにはこれらのデータをさらに格納するデータ形式が既に用意されています。これが組み込みデータ型です。


    Pythonでは主に、数字(integersやfloats), 文字列(strings)の他に、
    ブーリアン(Boolean)リスト(lists)・タプル(tuples)そして辞書型(dictionaries)が挙げられます。一つ一つ紹介していきます。


    ブーリアン型(Boolean)


    『ブーリアン型』とは真=true, 偽=falseの2値をとるデータ型です。
    ブーリアン・ブール型・論理型とも言います。
    少し例をみてみましょう。

    
    >>> This_is_Boolean = True
    >>> This_is_Boolean_true
    True
    >>> This_is_Boolean_false = False
    >>> This_is_Boolean_false
    False
    
    

    書いてある様に、ブーリアン型にはTrue・Falseの2つの値しかありません。
    今の所はこれだけの情報を頭に置いておくだけで大丈夫です。どの場面でブーリアン型が必要とされ使われるのか、後の章で詳しく紹介します。


    リスト型(list)


    リストは他の多くのプログラミング言語では配列とも呼ばれます。
    リストはこれまで整数型や文字列型を勉強しましたがこのあと学ぶ辞書型やタプル型その他様々な型の値を格納することができるデータ型です。
    たとえばこんな感じ。

  • a_list = []
  • num_list = [1,2,3]
  • string_list = [“time”, “school”, “mind”]
  • mix_list = [“seimei”, [1,1,1], True]
  • この様に、リストはどんなデータ型であったとしても格納することができます。
    そして、これら格納されたデータにはインデックスを活用してアクセスすることが可能です。

    
    >>> a_list = []
    >>> a_list
    []
    >>> num_list = [1,2,3,100]
    >>> num_list
    [1,2,3,100]
    >>> str_list = ["test","school","run"]
    >>> str_list
    ['test','school','run']
    >>> mix_list = ["my name is seimei", [1,2,2], True] 
    >>> mix_list
    ['my name is seimei', [1,2,2], True]
    


    リストに格納された要素には
    以下に示す様にインデックスを指定し取得します。

    
    >>> num_list = [1,2,3,100]
    >>> num_list[0]
    1
    >>> numb_list[0:1]
    [1]
    >>> numb_list[0:2]
    [1, 2]
    

    リストに格納された要素にアクセスすることで
    新たなリストを作り出すこともできます。

    
    >>> new_list = num_list[0:3]
    >>> new_list
    [1, 2, 3]
    


    -(マイナス)を付けたインデックスを指定すると
    リストの最終列(右側)より数え上げます。

    
    >>> str_list = ["test","school","run"]
    >>> strings_list[-1]
    'run'
    
    

    リストの中に格納されたリストにアクセスするには
    [](括弧)を2つ使用します。

    
    >>> mix_list = ["my name is seimei", [1,2,2], True] 
    >>> mixed_list[1][2]
    2
    
    


    辞書型(dictionary)


    お次に辞書型です。これもよく使います。
    辞書はキーと要素を紐づけて格納するデータ型です。
    見て確認した方が早いため以下のコードを確認し
    入力して見ましょう。

    dict_1 = {"key1": "string", "name": "seimei", "num": 1}

    辞書型では要素とそのデータを特定するキーがセットで格納されます。

    したがって辞書型で保存された要素には、以下のようにして対応するキーの値を指定することで対応する要素を取得することができます。

    
    >>> my_dict = {"Key 1": "Value 1", "name": "michael herman", "pi": 3.14}
    >>> my_dict["name"]
    'michael herman'
    >>> my_dict["Key 1"]
    'Value 1'
    
    


    タプル型(Tuple)



    タプルはリストと似ています。
    特徴は中の要素が不変であると言うことです。

    つまりタプル内に格納された要素は後で変更することができません。
    例を見ていきましょう。

    
    >>> created_tuple = ("seimei", "car", 22, 12)
    
    



    見てわかる様にタプルにはインデックスを利用して格納された要素にアクセスすることが可能です。

    
    >>> created_tuple = ("seimei", "car", 22, 12)
    >>> created_tuple[1]
    "car"
    
    

    タプルは要素を不変として格納することができる。と言う理由から、よく後に紹介する辞書におけるキーを格納しておくことに使用されます。


    ③格納されたデータを操作する方法について


    これまで紹介してきたように、プログラミングでは先ずこれらのデータを変数に格納してから、後で操作するのです。具体的には次の操作方法を利用して操作します。

  • オペレータ(Operators)
  • 関数(Functions)
  • データ型関数(Data-type methods)

  • 少し難しい用語が出てきましたね。先ずは1つずつ、確認して理解していきましょう。以下の順番で詳しく解説します。

  • 整数(int型)の操作
  • 文字列(string型)の操作
  • リスト(list型)の操作
  • 辞書(dict型)の操作
  • タプル(tupple型)の操作







  • 整数型を操作



    オペレータ(operator)を使って操作する


    オペレーターとはプログラミングにおいて数値計算を行う記号, +(プラス), -(マイナス)など)の事です。早速実際に手を動かして、オペレーターを使い数字を操作して見ましょう。

    ターミナルに以下を入力し出力値を確認して下さい。

    
    >>> 4+5 # 足し算
    9
    >>> number_1 = 11
    >>> number_2 = 8.22
    >>> number_3 = number_1 + number_2 # 変数を使った足し算
    >>> number_3
    19.22
    >>> 18-5 # 引き算
    13
    >>> 3*7 # 掛け算
    21
    >>> 16/4 # 割り算
    4
    >>> 9%3  # 割り算の余り
    0
    >>> 4**2 # 階乗
    16
    
    

    オペレーターを駆使する事で、変数に格納された数値を使って様々な計算を行う事ができるようになります。
    引き算や掛け算は勿論のこと、割り算の余りを計算したり、数値を階乗した数値も計算する事ができ、プログラミングの基本中の基本になります。



    オペレータには不等号も用意されています。

    
    >>> 3 < 7  # 7は3より大きい?
    True
    >>> 5 > 11 # 5は11より大きいか?
    False
    >>> 4 >= 4 # 4は4と等しいもしくは以上か?
    True
    >>> 6 == 7 # 6は7と等しいか?
    False
    >>> 10 != 11 # 10は11と等しくないか?
    True
    >>> example = True
    >>> example
    True
    
    

    例えば上に例をあげたように『3は7より小さい値であるか』と記述すると、
    インタプリタは正しいと認識し、trueを返しています。

    関数(Function)を使って操作する


    Pythonは数値を操作するいくつか組み込み型関数を提供しています。
    適用するには“何かの関数()”があった時、かっこの中に入力値を入れて出力値を取得します。

    これらはPythonの開発者が用意したもので、いつでも利用可能です。さらにこの関数はどんなデータ型でも適用することができます。
    そのほかにも、様々なエンジニアに開発されたたくさんのパッケージがPythonの標準ライブラリより利用可能で
    利用する際にはライブラリのimportを行う必要があります。(詳しくは後に説明します)
    ここではいくつかの組み込み関数を紹介します。

    float(): この関数は整数を受け取り、浮動小数点数を返します。

    
    >>> float(5) 
    5.0
    >>> float(-3333) 
    -333.0
    
    


    int(): この関数は浮動小数点数を受け取り、整数を返します。さらに浮動小数点の後は切り下げします。

    
    >>> int(11.8) 
    11
    >>> int(4.4)
    4
    
    


    データ型関数(Data-type method)を使って操作する


    ここではいくつかのデータ型関数について紹介します。
    先程の関数とは違いデータ型関数は“入力値.何かの関数()”と言う形で適用し出力値を得ます。

    全てのデータ型関数について知見を深めたい方はPythonの公式ドキュメントを確認して下さい。
    この関数は数が多いため初学者の方は必要な時だけ調べ、使用し徐々に覚えていくという流れを繰り返すだけで大丈夫です。
    今すぐに全てを暗記する必要はありません。

    float.is_integer() は入力値の浮動小数点数が有限であるか検証します。

    
    >>> (11.0).is_integer()
    True
    >>> (11.9).integer()
    False
    
    






    文字列操作


    関数での操作



    文字列の連結が確認できたら
    いくつかの関数を文字列操作に適用して見ましょう。

    # len()は入力に文字列を受け取り、その文字列長を返します。
    >>> my_name="seimei"
    >>>len(my_name) 
    6



    文字列はスライスすることができます。
    文字列の後に”[]”括弧を付加し、中に数字を入力することで
    文字列の中より指定された文字を抜き出し出力することが可能です。
    いくつか例を挙げましょう。
    (Pythonでは文字列であれ数字であれ、順番を数える時、0(零)から数えます。)

    
    >>> print("today"[3])
    a
    >>> print("today"[1])
    o
    >>> print("today"[0])
    t
    >>> print("today"d[0:2])
    to
    
    




    データ型関数での操作



    前回はデータ型関数について少しだけ学びました。
    ここではもう少し学びの知見を貯めていきましょう。
    コピペせず、自分の手を動かして出力を確認してくださいね。

    “自分の手を実際に動かすこと”がPython習得の最短ルートです。

    ## (文字列).capitalize()は入力に文字列を受け取り
    ## 先頭の小文字を大文字に変換して返します
    >>> low_case_string =  "konnichiwa"
    >>> low_case_string.capitalize()
    'Konnnichiwa'


    .format(): 文字列の中に文字を追加する

    # (文字列).format()は文字列の中に文字列を組み込み返します
    >>> name = "nihon tarou"
    >>> say_hello= "My name is {}".format(name)
    >>> say_hello
    'My name is nihon tarou'
    


    .strip(): 文字列の先頭や末尾のスペースを取り除く

    ## 文字列.strip()は文字列の中より空白を取り除き返します 
    >>> are_you_happy = "    yes    "
    >>> answer = are_you_happy.strip()
    >>> answer
    'yes'




    リスト操作


    オペレータでの操作する



    リストも文字列同様、結合することができます。

    >>> fruits = ["apples", "grapes", "oranges"]
    >>> veggies = ["corn", "kale", "mushrooms"]
    >>> grocery_list = fruits + veggies
    >>> grocery_list
    ['apples', 'grapes', 'oranges', 'corn', 'kale', 'mushrooms']
    



    関数で操作する



    一般的にリストは、「1つ1つのデータが要素である」と言う点において
    文字列と同等であると考えても良いです。
    つまり何を言いたいのかと言うと
    文字列操作に使用して来た関数およびデータ型関数は
    リストにも適用可能
    と言うことです。

    実際に確認していきましょう。

    # len()はリストを受け取り、そのリスト長を返します
    >>> num_list =  [1, 2, 3, 100]
    >>> len(num_list)
    4
    # リストのインデックスを指定することで
    # スライスすることができます
    >>> name = ["S", "e", "i", "m", "e", "i"]
    >>> name[2]
    'i'
    >>> name[3]
    'm'
    >>> name[0]
    'S'
    >>> name[0:2]
    ['S', 'e']




    データ型関数で操作する



    もう一度Pythonの公式ドキュメントをみて
    データ型関数を確認して見ましょう。

    # リスト.append()はリストの最終列に要素を追加します 
    # 入力はどんなデータ型でも対応しています
    >>> animals = ["dog", "cat", "pig"]
    >>> animals.append("bird")
    >>> animals
    ['dog', 'cat', 'pig', 'bird']

    # リスト.sort()は格納された要素を順番に並べ替えます
    # 以下の例であれば文字列の先頭をアルファベット順に並べ替えています。
    >>> animals.sort()
    >>> animals
    ['bird', 'cat', 'dog', 'pig']
    
    # リスト.pop() リストから指定されたインデックスないの要素を抜き出します
    >>> num_list = [1, 2, 3, 100]
    >>> num_list.pop(2)
    3
    >>> num_list
    [1, 2, 100]
    






    タプル操作


    オペレータで操作する


    タプルはリストと同様に要素を追加することができます。
    ただ追加した後は要素を変更することができません。

    >>> tuple_1 = (1, 2)
    >>> tuple_2 = (3, 4)
    >>> tuple_3 = tuple_1 + tuple_2
    >>> tuple_4
    (1, 2, 3, 4)





    関数で操作する


    # list()はタプルをリスト型に変換して返します
    >>> tuple_1 = (1, 2)
    >>> list(tuple_1)
    [1, 2]





    データ型関数で操作する



    タプルは不変であるため多くのリストを操作するデータ型関数は
    タプルを操作することができません

    >>> tuple_1 = (1, 2)
    >>> tuple_1.append(3)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'tuple' object has no attribute 'append'
    >>> tuple_1.pop(1)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'tuple' object has no attribute 'pop'
    >>> tuple_1.sort()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'tuple' object has no attribute 'sort'
    >>> tuple_1.reverse()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'tuple' object has no attribute 'reverse'
    




    コメントアウト



    冒頭より何度も見かけていると思いますがPythonでは#(シャープ)を入力することでコメントを記述
    することができます。つまり、これはシャープの後に書かれた文字はプログラムの中で無視されることを意味しています。

    後々コードを見直した時、どの様な内容だったのか
    自他共に確認できる様、分かりやすいコメントアウトを残す癖をつけましょう。
    以下に例を示します。

    # このリストnameは〇〇高校の学生の内、
    # 優秀な成績の者の名前を格納している
    student_name = ["上田智樹", "山下智子", "木下若菜"]


    多くの場合、ここまで細かく書く必要はありませんが、
    重要な機能を持つ関数や、忘れると困る値など
    後日確認した際に思い出せる内容のコメントを残すことが大切です。







    まとめ



    お疲れ様でした。
    今回のレッスンは以上です。


    少しずつPythonプログラマとしての実力を向上させていきましょう。
    質問等あれば気軽にコメントで教えてくださいね。
    可能な限り回答します。


    今回は以上です。
    ではでは





    続編はこちら↓↓↓





    人気記事【初学者必見】効率的なプログラミング勉強方法を紹介します

    人気記事 CS学位取得者がガチでプログラミングスクールを調査してみた件【おすすめのスクール】









    このエントリーをはてなブックマークに追加
    data-ad-format="rectangle" data-ad-format="rectangle"

    返信する

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    某国立大学大学院(理系)に所属しています。 最近の趣味は人工知能関連の論文を読む事で 研究ではComputer Vision周りを中心に活動しており、 サイドワークとしてデータ分析の業務に関わっています。 本ブログはこれまで筆者が学んできた様々な知識の中から 有益だと思えた情報のみをまとめたものです。 内容は個人の見解であり、所属する機関と関係するものではありません。 Research: is related to Computer Vision Hobby: is to study Artificial Intelligence / Machine Learning.