eljefeblog 

Any sufficiently advanced technology is indistinguishable from magic

programming python-basic-lectures

【基本を学ぶ:超初学者向け】Pythonプログラミング入門

Pythonプログラミング入門



本記事では

悩むペン銀

Python初学者で、そもそもプログラミングって全くした事ないけど
どんなものか気になる。

Pythonの基本的な構文など基礎知識を学んでみたい。

結局Pythonって何ができるの?



本記事はこういった疑問・思いに答えていきます。



その前に、1つ質問があります。
これから読み進めていく人で、初めてプログラミングに取り組もうとしており、これまでまったくプログラミング言語を学んだ経験がない方は居ますか?


その方にとって本記事の内容は少し難しく感じるかもしれません。
まずはこちらの記事でターミナルに関する基礎知識を付けてから本記事を読むと良いでしょう。





これまで何かしらプログラミング言語を学んだ経験がある方はこのまま読み進めてください。















#1 Pythonって何?


「Python」という名称はイギリスのコメディーグループMonty Pythonから名付けられており, 単に和訳すると「ニシキヘビ」を意味します。


Pythonはインタプリタ型言語であり、プログラムしたコードをコンピュータが理解できる機械語に翻訳することなく実行することができる特徴を備えたプログラミング言語です。


加えてユーザーがインタラクティブに操作できる*オブジェクト指向の言語であり、プロジェクトの大小を問わず様々な領域で利用されています。


皆さんの身の回りで使用されているアプリケーションの例をあげるならFaceBookが開発するInstagramYouTube, Dropbox, Pinterestなどが挙げられます。


現在ではGoogleFacebookといった企業はPythonを様々なプロジェクトにおける開発言語として利用しており、ビックデータやAI, 自動運転そして仮想通貨(Blockchain)といったプロジェクトでは頻繁にこのPythonを用いて開発が進められています。


Pythonがよく利用されるいくつかのタスクは以下の様な事例が挙げられます。

  • ゲームなどを含むデスクトップにおけるグラフィカルアプリケーションの開発
  • 数学的、科学的なデータの解析
  • ウェブやインターネット開発における利用
  • サイバーセキュリティーの現場


  • 近年ではPythonは多岐にわたる分野においてポピュラーな言語として親しまれており
    その構文はとてもシンプルかつ美しく
    初めてプログラミングを学ぼうとしている初学者にとっても取っ付きやすい言語と言えるでしょう。


    オブジェクト指向って何?



    オブジェクト指向とは「Object(物体)」と「その物体ができること」を決めそれらを組み上げるようにプログラムを書いていく考え方の事です。


    もう少し噛み砕いて説明すると


    例えばあなたがエンジニアで、
    新たに『車』をプログラムする場合を考えてみましょう。


    「車の機能をもつ物体」には以下のような部品があります。


  • ウインカー2つ
  • ブレーキ1つ
  • アクセル1つ..etc
  • 



    このように書き出していくと
    車には様々な部品が必要になってくることが分かりますね。
    これら部品には


    具体的にはウインカーに“押すと点滅する”という機能や、
    アクセルに“踏むとタイヤが回って前進する”という機能
    ブレーキに“踏むとタイヤが止まる”といった機能など


    が存在し、
    こういった何かしらの入力に対して出力(結果)を返す機能(Function)を各々用意し、これらを組み立てていく事で『車』という最終構築物を実現するという考え方があり、これがオブジェクト指向の基本的な考え方となっています。




    #2 Pythonを実践する


    Pythonは使い易く、分かりやすい本当に素晴らしい言語です。
    どこの国に住んでいて、どんな生活をしてるのかなど全く関係なく
    インターネットに接続できる環境であれば誰でも無料で利用することができます。


    加えてPythonはOpen-Sourceソフトウェアであり
    Linux, Mac, Windows, 他の様々なプラットフォーム上で稼働する事が実現されています。


    Macを利用されているユーザーであれば、Mac購入時にはすでにPythonがインストールされています。
    しかし大抵の場合、最新versionのPythonをダウンロードする必要があるでしょう。


    まずはPythonのversionを確認するためターミナルを開きましょう。
    Macユーザであれば既にこちらのアプリケーションもインストールされているはずです。
    以下を入力し確認してみましょう。

    Python -V



    正しくPythonがインストールされていれば
    以下のような出力結果を得られるはずです。

    Python 2.7.13



    Pythonのversionを選択する



    初学者の方は特にPython2とPython3どちらのversionを選ぶべきなのか迷うかもしれません。
    これら2つのversionではいくつかの構文の違いがありますが、どのversionでも問題なく動作するでしょう。


    しかしプログラミングでは多くの場合、最新versionのものを利用する事が原則です。
    初学者の皆さんにはPython3での開発をお勧めします。
    詳しい理由はこちらの記事に載せていますので確認してください。



    PythonをInstallする



    基本的にMacBookユーザであればすでにインストールされているため必要ありませんが
    貴方のPCに搭載されたOperating Systemの種類に関わらずPythonはPython Software Fundationからダウンロードする事ができます。貴方のOSとプロセッサー(32bitか64bit)を確認してそれらに合った物をダウンロードしましょう。


    各OS毎のダウンロード方法は以下にまとめています。


    ・Mac: MacBookユーザであれば様々なversionのPythonをインストール及び管理するのに
    実際僕も利用しているHomebrewを利用することを強くお勧めします。もちろん無料です。
    このディレクトリを確認してください。Pythonはこちらからダウンロードできます。


    ・Linux: PythonはLinuxでの様々な特徴を含んでいます。
    必要であればmackage-managerを使ってPythonを最新versionにアップグレードしてください。


    ・Windows: PSFから直接ダウンロードしてください。




    Homebrewとは:
    HomebrewとはmacOS上で動くOSSです。
    wikipediaではこのように紹介されています。

    Homebrew(ホームブリュー)は、macOSオペレーティングシステム上でソフトウェアの導入を単純化するパッケージ管理システムのひとつである。MacPortsやFinkと同様の目的と機能を備えている。LinuxのDebianのAPTに似た使用感で急速に利用が広がっている。
    HomebrewはMax Howellによって書かれ、Ruby on Railsコミュニティーで人気を得てきており、その拡張性を評価されている。



    噛み砕いて説明するとmacOSの為のソフトウエア管理ツールと言えます。様々なversionのソフトウェアを管理してくれ、installおよびuninstallをターミナルで簡単に実行できる優れものです。
    ターミナルを開き以下のコマンドを実行すれば簡単にインストールする事ができます。MacBookのエンジニアは殆どインストールしてると思います。めちゃくちゃ便利です。

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"




    PythonのInstallを確認する



    それではPythonが貴方の環境に正しくダウンロードされているか確認してみましょう。


    Python Shell


    ・Mac: ターミナルを開き、PythonもしくはPython3と入力してください。


    ・Linux: ターミナルを開きPythonと入力してください


    ・Windows: CMDを開き、PythonもしくはPython3と入力してください




    Interactive Python Shellを開けたらPythonを実行して見ましょう。
    すると以下のように表示されるはずです。(python3実行時)

    Python 3.6.5 (default, Apr 23 2018, 10:00:00)
    [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>>



    ここで初めてのBuilt-in functionであるprint関数を実行してみましょう。
    (以降>>>はPythonの対話環境に入っていることを表しています。貴方が入力する必要はありません)


    対話環境とは
  • Pythonには対話モード(インタラクティブモード)という機能が用意されています。この環境に入るとインタプリタ上で、そのままPythonプログラムを入力・実行でき、Pythonスクリプトのファイルを作らずともその場でプログラムの確認ができます。




  • Python2の場合:

    >>> print "Hello World!"  

    Python3の場合:

    >>> print("Hello World!")



    これらが正しく実行されると以下の出力を確認できるはずです。

    Hello World!



    とても簡単ですね
    これであなたはPythonプログラマの仲間入りです。



    1行1行コードを入力すると
    Pythonは即座に実行しその結果の値を出力してくれます。
    またこのPythonとの対話環境を抜けるにはexit()関数を入力します。


    >>> exit()



    もしくは以下の操作で環境から出る事ができます。


    ・MacとLinuxユーザー: ControlKey+Dを押してEnterボタンをクリック


    ・Windowsユーザー: ControlKey+Dを押してEnterボタンをクリック




    しかし、まだレッスンは続くので環境は抜けないでください。
    さらにPythonの知識を深めていきましょう。



    #3 Pythonにおける構文理解




    ここからが本番です。
    Python Codingにおいて重要となる基礎知識を学んでいきましょう。
    ここでは特にVariable(変数)・Built-in Data Types(組み込みデータ型)を扱います。



    プログラミングにおける『構文』とは、英語で言う所の『文法』にあたります。
    英語の勉強と同じように、コンピュータに適切に命令を伝えるためには先ず、Pythonの『文法』をマスターしなくてはなりません。



    どんな言語でも文法はその言語を習得する上での基本中の基本になります。



    まずは基礎を固めることから始めましょう。
    ここでは

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


  • これら3つについて基本となる知識を紹介していきます。




    ①変数について



    『変数』データを保持する箱のようなものです。
    プログラミングでは様々なデータ(例えば数字や文字など)を扱いますが、データを扱うためには個別に変数を用意し、これにデータを格納する必要があります。


    簡単に例を示すとPythonでは以下のように記述します。

    変数名(自分で決める)= 値 (数値、文字列など)
    
    # 例
    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でプログラミングに関わると
    頻繁に他者と共同でプロジェクト開発を行う機会が出てきます。


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


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






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



    変数に『数字』や『文字列』と言ったデータを格納する方法について学びました。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つずつ、確認して理解していきましょう。


    オペレータ(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



    文字列(strings)



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

    >>> string_1 = "Hello world!" 
    >>> string_1
    "Hello world!"
    >>> "Yes"
    Yes
    >>> escaped_key = "can\'t"
    "can't"
    >>> not_escaped_key = "can't"
    >>> not_escaped_key 
    "can't"



    文字列操作



    前節で数字を操作したように、文字列も操作可能です。

    >>> "You are"+" "+"genius"   
    "you are genius"
    >>> "My name is "+"Mai"
    My name is Mai



    関数を使った文字列操作


    それではいくつかこれまで紹介した関数を使い、文字列を操作してみましょう。
    len(): 文字列を受け取りその文字長を返す

    >>> my_name = "Mai" 
    >>> len(my_name)
    3



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

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



    データ型関数


    先程いくつかのデータ型関数を紹介しましたが
    ここでは文字列に対しデータ型関数を適用してみましょう。
    .capitalize(): 文字列を受け取り、先頭の文字を大文字に変換する

    >>> string_low_case = "seimei"
    >>> string_low_case.capitalize()
    "Seimei" 
    >>> ("seimei").capitalize()
    "Seimei"



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

    >>> my_name = "kaito kitamura"
    >>> changed_my_name = "My name is {}".format(my_name)
    "My name is kaito kitamura"



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

    >>> string_1 = "   hello_world!   " 
    >>> string_1.strip()
    "hello_world!"





    まとめ



    いかがだったでしょうか?
    本記事ではプログラミング初学者入門編という形でPythonの基礎知識を紹介していきました。
    今回の記事は少し深い内容だったためここ辺りで区切りたいと思います。


    プログラミングはエラーとの戦いです。
    エンジニアをしているとコンピュータに何度も自分のプログラムを否定され
    修正し、また否定され。。。と繰り返すでしょう。
    特に初学者には顕著にこれが起きます。しかしそれは普通な事で誰もが経験する事です。


    プログラミングを学ぶ者にとって重要な資質の1つは忍耐力かも知れません。
    加えて自分でGoogle検索を駆使し原因を調べ、エラーを解決する力が求められるでしょう。


    しかし、こういった泥臭い努力と経験の結果としてエラーが解消され
    自分の書いたプログラムが実行されると深い快感を得ることができます。


    おそらくそれ故にプログラミングを愛している人間が多いのでしょう。


    (AppleのイベントWWDC2019で公開されたpvがとても良くこれを描写しています。)



    最も大切な事は『楽しみながらプログラミングすること』です



    自分のペースで良いんです。
    エラーがどうしても解消されないなら一旦机を離れ、散歩でもしてみましょう。
    皆さんが気分が向いた時
    pcに向かってコードをチェックすると意外な見落としを発見できたりしますよ。
    ぜひプログラミングを楽しんで取り組めるようにしましょう。

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



    続編はこちら↓↓





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

    人気記事 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.