LoginSignup
1
2

More than 1 year has passed since last update.

計算化学者のためのPython入門ー基礎知識のおさらいー

Last updated at Posted at 2022-10-17

はじめに

このシリーズは計算化学を題材にした Python プログラミングを紹介した「計算化学者のためのPython入門」の1つです。
特に「計算化学関連の Python プログラム開発に携わる予定」の読者を想定してます。

Python3 は Google Colab を使えばブラウザだけで実行 できます。

本記事の要点

  • 「計算化学者のためのPython入門」シリーズを最大限楽しむために必要な Python 知識を Quiz 形式で紹介します。
  • Python Quizの答えにピンとこない方は「計算化学者のためのPython入門」シリーズを読む前に、Python3 の基礎知識に不安がある人へで紹介したサイトなどで Python3 の基礎知識を再確認することをおすすめします。

Python Quiz

以下の Quiz の質問にピンとこない、答えを見てもよくわからない、調べようにも何をググればいいかわからない人は本シリーズを読み進める前に Python3 の基礎知識をおさらいするのがいいかもしれません。


Q1. 条件式 type("0") == type(0) は何を返す?

A1.
False

Q2. import numpy as np や from math import pi は何をしている?

A2.
  • numpyをインポートしてnpと定義
  • mathからpi(円周率π)をインポート

Q3. 同じ階層にある test1.py で定義された hoge 関数を test.py で使いたい。どうすればいい?

now_dir
 |___ test1.py (hoge 関数実装済み)
 |___ test.py
A3.
./test.py
from test1 import hoge

Q4. list 型ではなく numpy.ndarray 型 (np.array) を使う利点は?np.array は何が便利?

A4.
  • 配列同士の演算ができる
  • 処理が速い 等

Q5. l_a = ["I", "have", "an", "apple"] の "apple" が "pineapple" に置換されたリスト l_b をつくるにはどうする?任意の l_a の "apple" を "pineapple" に置換したい場合はどうする?

A5.

loop と if 文を使うと以下のように書ける。

l_a = ["I", "have", "an", "apple"]
l_b = []
for iele in l_a:
    if iele == "apple":
        l_b.append("pineapple")
    else:
        l_b.append(iele)

もしくは numpy.where を使うと以下のように書ける。

import numpy as np
np_a = np.array(l_a)
np_a = np.where(np_a == "apple", "pineapple", np_a)
l_b = np_a.tolist()

Q6. 以下の test1.py を実行すると、どのように出力される?

test1.py
print(1)

def test1(a, b):
    print(b)
    c = a * 2
    return c

print(3)
d = test1(4, 5)
print(d)
A6.
1
3
5
8

Q7. 上で定義された test1 関数(メソッドとも言う)の引数、返り値はどれ?

A7.
  • 引数:a, b
  • 返り値:c

Q8. 以下の test2.py を実行すると何が出力される?

test2.py
l_ppap = [["I", "have", "a", "pen"],
          ["I", "have", "an", "apple"],
          ["I", "have", "a", "pineapple"], 
          ["Pen-Pineapple-Apple-Pen"]]

for i in range(0, len(l_ppap)):
    if i < len(l_ppap[i]):
        print(l_ppap[i][i])
    else:
        print("No PPAP")
A8.
I
have
a
No PPAP

Q9. 1 から 100 までループし、3 の倍数のときは "I have a pen"、4 の倍数のときは "I have an apple"、3、4 の公倍数のときは "I have a pineapple"、それ以外のときは "Pen-Pineapple-Apple-Pen" と出力するプログラムは書けそうですか?プログラム構造を想像できますか?

A9.

おそらくこんな感じ。プログラム構造を想像できましたか?

for i in range(1, 101):
    if i % 3 == 0 and i % 4 == 0:
        print("%4d   " % i, "I have a pineapple")
    elif i % 3 == 0:
        print("%4d" % i, "I have a pen")
    elif  i % 4 == 0:
        print("%4d" % i, "I have an apple")
    else:
        print("%4d" % i, "Pen-Pineapple-Apple-Pen")

Q10. 以下のスクリプトを実行すると何が出力される?

l_c = ["A", "B", 3, "d", 5.0]
l_d = list(range(len(l_c)))

for i, j in enumerate(l_c):
    print(i, j)

for i, j in zip(l_c, l_d):
    print(i, j)
A10.

enumerate() と zip() は便利なので覚えましょう。

for i, j in enumerate(l_c):
    print(i, j)

> 0 A
> 1 B
> 2 3
> 3 d
> 4 5.0

for i, j in zip(l_c, l_d):
     print(i, j)

> A 0
> B 1
> 3 2
> d 3
> 5.0 4

Q11. 以下のスクリプトを実行すると何が出力される?

d_element = {"H": {"Number": 1, "Mass": 1.007825}, 
             "C": {"Number": 6, "Mass": 12},
             "N": {"Number": 7, "Mass": 14.003074},
             "O": {"Number": 8, "Mass": 15.994915}}

print(d_element["H"])
print(d_element["C"]["Mass"])

for i, j in d_element.items():
    print(i, j)

for i in d_element.keys():
    print(i)
A11.

辞書も便利なので積極的に使いましょう。

print(d_element["H"])
> {'Number': 1, 'Mass': 1.007825}

print(d_element["C"]["Mass"])
> 12

for i, j in d_element.items():
    print(i, j)

> H {'Number': 1, 'Mass': 1.007825}
> C {'Number': 6, 'Mass': 12}
> N {'Number': 7, 'Mass': 14.003074}
> O {'Number': 8, 'Mass': 15.994915}

for i in d_element.keys():
    print(i)
> H
> C
> N
> O

Python3 の基礎知識に不安がある人へ

世の中には Python に関するすばらしい記事、書籍がたくさんあります。それらの参考にしながら Python3 基礎知識を再確認しましょう。

ただし、文法や Python ライブラリ (numpy など) の使い方を暗記する必要はありません。Python ではどんなことができるのか、それはどんな固有名詞で呼ばれているのかを確認してください。使い方を忘れてしまっても固有名詞でググればOKです

以下、おすすめの参考文献を紹介します。

リンク

Anaconda で Python 環境をインストールする
朝飯前に学べる!便利なPythonのヒント100選【前編】
きれいなPythonプログラミング(パイソニックなコードを書こう)を読んでみた

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2