スライドショースライドショー

【Python入門】サンプルコードでPython数値計算を徹底的に理解する

Pythonでは様々な数値計算を簡単に行うことができます。

  • 数値計算って苦手...
  • 基礎から数値計算を学び直したい

そのような方に向けて、この記事では以下のように数値計算の基礎からNumpyを使用した方法まで解説していきます。

  • 数値計算の基本を学ぼう!
  • NumPyで数値計算を学ぼう!

数値計算の基本からわかりやすく解説していますので、ぜひ参考にしてくださいね!

Pythonで数値計算の基本を学ぼう!

まずは数値計算の基本である四則演算と数値計算の処理でよく使用する割り算の余り、べき乗を学習していきます。

ここでしっかりと基礎を習得して応用的な数値計算ができるように繋げていきましょう!

足し算

まずは基本の足し算の処理です。

プログラミングでも足し算は、+を使って処理することができるのでとてもわかりやすいですね!

print("# 2 + 3")
print(2 + 3)

print("# 3 + 5")
print(3 + 5)

実行結果

# 2 + 3
5
# 3 + 5
8

引き算

次は引き算です。

こちらも引き算は、-を使って処理することができるので理解しやすいかと思います!

print("# 9 - 6")
print(9 - 6)

print("# 6 - 9")
print(6 - 9)

実行結果

# 9 - 6
3
# 6 - 9
-3

掛け算

次は掛け算を見ていきます!

プログラミングで掛け算は、☓ではなく、*を使って処理をするため注意してください。

print("# 2 ☓ 5")
print(2 * 5)

print("# 4 ☓ 7")
print(4 * 7)

実行結果

# 2 ☓ 5
10
# 4 ☓ 7
28

割り算

次は割り算になります。

プログラミングで割り算は、÷ではなく、/を使って処理をするため注意してください。またPythonでは、割り算の整数部のみ求めたい場合は//で簡単に実現することができるので覚えておきましょう!

print("# 10 ÷ 2")
print(10 / 2)

print("# 10 ÷ 3")
print(10 / 3)

print("# 10 ÷ 3")
print(10 // 3)

実行結果

# 10 ÷ 2
5.0
# 10 ÷ 3
3.3333333333333335
# 10 ÷ 3
3

割り算の余り

次は割り算の余を求める方法です。

初めは用途が理解しにくいかもしれないですが、例えば偶数か奇数かの判定など、プログラミングではよく使用する演算子となるため基礎レベルとしてしっかり覚えておく必要があります!

print("# 10 ÷ 2の余り")
print(10 % 2)

print("# 10 ÷ 3の余り")
print(10 % 3)

実行結果

# 10 ÷ 2の余り
0
# 10 ÷ 3の余り
1

べき乗

次はべき乗です。

普段のプログラミングでの使用頻度は少ないですが、数値計算としては最低限覚えておく必要があります。こちらもしっかりと理解しておきましょう!

print("# 2 の2乗")
print(2 ** 2)

print("# √2")
print(2 ** 0.5)

print("2 ** -2")
print(2 ** -2)

実行結果

# 2 の2乗
4
# √2
1.4142135623730951
2 ** -2
0.25

それでは、以上で学んだことを踏まえてより実践的なプログラムを以降で書いていきましょう!

Pythonで数値計算の応用を学ぼう!

倍数を見つけるプログラムを書いてみよう!

それでは実践的なプログラムを書いていきましょう!

まずは有名なFizzBuzz問題を題材にして学習していきましょう!

問題自体は基本のレベルではありますが、プログラミング能力を測る上で最低限マスターしておきたいレベルとして面接でも出題されることもあるみたいです。プログラミング初心者の方は是非この機会にマスターしておきましょう!

それでは、こちらがサンプル問題です。

1から20までの数の中で
・3の倍数のときは、「3の倍数です。」
・5の倍数のときは、「5の倍数です。」
・3と5の両方の倍数のときは、「3と5の両方の倍数です。」
と出力するプログラムを書きましょう!

for num in range(1, 21):
    if num % 3 == 0 and num % 5 == 0: # または if num % 15 == 0:
        print("3と5の両方の倍数です。")
    elif num % 3 == 0:
        print("3の倍数です。")
    elif num % 5 == 0:
        print("5の倍数です。")
    else:
        print(num)

実行結果

1
2
3の倍数です。
4
5の倍数です。
3の倍数です。
7
8
3の倍数です。
5の倍数です。
11
3の倍数です。
13
14
3と5の両方の倍数です。
16
17
3の倍数です。
19
5の倍数です。

いかがでしょうか。
問題の意味を理解し、しっかり書くことができたでしょうか?

このFizzBuzz問題は書き方によって様々な書き方ができますが、条件をしっかり押さえていればOKです。

気をつけて欲しいのは、両方の倍数に当てはまる場合の条件は一番先頭に書くことです。
先頭に書かないとプログラムが正しく判定されないので注意してくださいね!

ちなみに、2行目のif文は、以下のどちらでも大丈夫です。

if num % 3 == 0 and num % 5 == 0:
または
if num % 15 == 0:

素数を見つけるプログラムを書いてみよう!

次は、20までの数で素数を見つけるプログラムを書いていきましょう!

素数かどうかの判定は、対象の値を2からその対象の値の手前まで割っていき、割り切れた場合は素数でないため、isPrimeをFalseにしています。

また20までの数で素数を求めたいため、サンプルコード1行目のrange(2, 20+1)で求めたい素数+1を指定して20まで含まれるようにしています。

for i in range(2, 21):
    isPrime = True
    for j in range(2, i):
        if i % j == 0:
            isPrime = False
            break
    if isPrime:
        print(i)

実行結果

2
3
5
7
11
13
17
19

NumPyで数値計算を学ぼう!

NumPyの使い方 基本

それでは、NumPyを使用した数値計算を学習していきます。

NumPyの配列を使用することで便利な数値計算の処理ができるようになります。Pythonで数値計算と言えば、NumPyを使いこなすことはほぼ必須となるため是非覚えておきましょう。

またNumPyを使用するには事前にインストールが必要となるためご注意ください。

NumPyのインストール方法は以下の記事に掲載されていますのでこちらを参考にしてください!

それでは、NumPyの基本となるNumPy配列を生成する方法を確認しましょう!
以下サンプルコードをみていきましょう!

まず先頭でNumPyをnpとしてimportします。
arangeで配列を生成し、reshapeで配列の形状を変換しています。

import numpy as np

print("# 要素が4つの配列を生成する")
print(np.arange(4))
print("# 2☓2の行列を生成する")
print(np.arange(4).reshape(2, 2))

実行結果

# 要素が4つの配列を生成する
[0 1 2 3]
# 2☓2の行列を生成する
[[0 1]
 [2 3]]

また行列などNumPyをより活用する方法については以下に詳しく掲載されていますので見てみてください!

NumPyで倍数を見つけるプログラムを書いてみよう!

それでは、NumPyを使用して倍数を見つけるプログラムを書いてみましょう!

以下がサンプルコードになります。
NumPyを使用して倍数を判定することにより、配列の各要素に対して判定できるのでとても便利ですね!

import numpy as np

# 3☓5の行列を生成
print("# 3☓5の行列")
arr = np.arange(1, 16).reshape(3, 5)
print(arr)

# 3の倍数かどうか1
print("# 3の倍数かどうか1")
print(arr % 3 == 0)

# 3の倍数かどうか2
print("# 3の倍数かどうか2")
print(np.mod(arr, 3) == 0)

# 3の倍数かどうかをメッセージで出力する
print("# 3の倍数かどうか")
print(np.where(arr % 3 == 0, "3の倍数です", "3の倍数ではありません"))

# 3の倍数の個数
print("# 3の倍数の個数")
print((arr % 3 == 0).sum())

# 3の倍数を出力
print("# 3の倍数を出力")
print(arr[arr % 3 == 0])

# 3の倍数でないものを出力
print("# 3の倍数でないものを出力")
print(arr[arr % 3 != 0])

実行結果

# 3☓5の行列
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]]
# 3の倍数かどうか1
[[False False  True False False]
 [ True False False  True False]
 [False  True False False  True]]
# 3の倍数かどうか2
[[False False  True False False]
 [ True False False  True False]
 [False  True False False  True]]
# 3の倍数かどうか
[['3の倍数ではありません' '3の倍数ではありません' '3の倍数です' '3の倍数ではありません' '3の倍数ではありません']
 ['3の倍数です' '3の倍数ではありません' '3の倍数ではありません' '3の倍数です' '3の倍数ではありません']
 ['3の倍数ではありません' '3の倍数です' '3の倍数ではありません' '3の倍数ではありません' '3の倍数です']]
# 3の倍数の個数
5
# 3の倍数を出力
[ 3  6  9 12 15]
# 3の倍数でないものを出力
[ 1  2  4  5  7  8 10 11 13 14]

NumPyで素数を見つけるプログラムを書いてみよう!

次はNumPyを使用した素数を見つけるプログラムを書いてみましょう!

以下サンプルコードになります。
is_prime関数で素数の判定を実施し、NumPyのvectorizeで配列の各要素ごとに判定するようにしています。

NumPyのvectorizeについてはこちらに詳しく掲載されていますので確認してみて下さい。

import numpy as np
import math

def is_prime(n):
    if n % 2 == 0 and n > 2: 
        return False
    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))

arr = np.arange(2, 21)
vec = np.vectorize(is_prime)
print(vec(arr))
print(arr[vec(arr)])

実行結果

[ True  True False  True False  True False False False  True False  True
 False False False  True False  True False]
[ 2  3  5  7 11 13 17 19]

まとめ

いかがでしたでしょうか。

今回は、Pythonの数値計算について学習しました!

基本的な数値計算は初学者の方でも比較的取り組みやすかったと思います。

応用編は少し難しかったですが、理解できるようになるとプログラミングの方法や考え方など実務にも活きて来るかと思いますので頑張っていきましょう!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

akira

akira

インフラエンジニア→プログラマー。趣味は3歳の子供にPCの使い方、タイピングを教えること。業務ではPython, PHP, Javaなどやってます。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説