-
Pythonで複数の数値や配列の最大公約数(GCD)を求める方法
本記事では、以下の問題に対する解決策について詳しく解説します。問題の概要与えられた数値の配列から、それらすべての最大公約数(GCD)を求める必要があります。アプローチ2つより多い数値の最大公約数を求める場合、GCDは引数として渡されたすべての数値に共通する素因数の積と等しくなります。これは数学的な定義に基づく方法ですが、実装がやや複雑になります。もう一つの方法として、2つの数値ずつペアでGCDを繰り返し計算するという手法があります。具体的には、最初の2つの数値のGCDを求め、その結果と次の数値のGCDを計算し、これを配列の最後まで繰り返します。本記事では、後者のアプローチを実装していきます。実
-
【Python】与えられた数がフィボナッチ数かどうかを判定する方法を解説
本記事では、以下の問題文に対する解決策について詳しく学んでいきます。 問題の定義 数値 n が与えられたとき、その数がフィボナッチ数であるかどうかを判定します。 ご存知のとおり、n番目のフィボナッチ数は「直前の2つのフィボナッチ数の和」として定義されます。しかし、この漸化式以外にも、フィボナッチ数には興味深い数学的な性質が存在します。 フィボナッチ数の判定に使える重要な性質 ある数 n がフィボナッチ数であるのは、次の条件が成り立つ場合、かつその場合に限られます。 5×n² + 4 が完全平方数である または 5×n² − 4 が完全平方数である つまり、上記のどちらか一方(または両方)が
-
Pythonで学ぶ挿入ソート(Insertion Sort)の仕組みと実装方法
この記事では、Python 3.xにおける挿入ソート(Insertion Sort)の基本的な考え方と、実際のコードによる実装方法をわかりやすく解説します。 挿入ソートのアルゴリズム 挿入ソートは、配列を「整列済みの部分」と「未整列の部分」に分け、未整列の要素を一つずつ取り出して、整列済み部分の正しい位置に挿入していくシンプルなソート手法です。処理の手順は以下の通りです。 1. 各反復ごとに整列済みの配列を少しずつ拡大しながら、入力要素を走査する。 2. 現在の要素(キー)を、整列済み配列内の最大値と比較する。 3. キーがその最大値より大きければ、要素はそのままの位置に置かれ、 次の要
-
【Python入門】線形探索(リニアサーチ)の仕組みと実装方法
本記事では、最も基本的な探索アルゴリズムである「線形探索(リニアサーチ)」の仕組みと、Python 3.xでの実装方法について詳しく解説します。 線形探索とは 線形探索は、配列(リスト)の先頭から順番に要素を一つずつ調べ、目的の値と一致するかどうかを確認していくシンプルな探索手法です。データがソートされていなくても利用できるため、小規模なデータや整列されていないデータを扱う際に手軽で便利です。 アルゴリズムの手順 1. 配列 arr[] の左端(先頭)の要素から順に、目的の値 x と各要素を比較していく 2. x がいずれかの要素と一致した場合、そのインデックス(位置)を返す 3. 配列の最後
-
Pythonでn番目のカタラン数を計算するプログラム|再帰法と動的計画法
本記事では、n番目のカタラン数を計算する方法について解説します。 カタラン数(Catalan number)は、次の漸化式で定義される自然数の数列です。 $$C_{0}= 1,\quad C_{n+1}=\displaystyle\sum\limits_{i=0}^n C_{i}C_{n-i}\quad (n \geq 0)$$ n = 0, 1, 2, 3, … に対するカタラン数は、1, 1, 2, 5, 14, 42, 132, 429, … と続きます。 カタラン数は、再帰法と動的計画法のどちらのアプローチでも求めることができます。それでは、それぞれの実装方法を見ていきましょう。 方法
-
n番目のフィボナッチ数を求めるPythonプログラム【再帰・動的計画法】
本記事では、n番目のフィボナッチ数を計算するPythonプログラムについて解説します。フィボナッチ数とは?フィボナッチ数とは、次の漸化式で定義される数列のことです。Fn = Fn-1 + Fn-2ただし、初期値は F0 = 0、F1 = 1 とします。フィボナッチ数列の最初のいくつかの値は以下の通りです。0, 1, 1, 2, 3, 5, 8, 13, ..................フィボナッチ数は、再帰と動的計画法(Dynamic Programming)という2つの代表的な手法で求めることができます。それでは、それぞれの実装方法をPythonスクリプトで見ていきましょう。方法1:再帰
-
ループを使わずに数列を出力するPythonプログラム|再帰とフラグで実現する方法
本記事では、for文やwhile文などのループ構文を一切使わずに数列を表示するという問題の解法について解説します。問題の定義問題: 2つの数値 N と K が与えられます。まずNが0より大きい間はNからKを繰り返し引き、Nが0以下(ゼロまたは負)になったら、今度は逆にKを足していきます。そして値が元の数値Nに戻った時点で処理を終了します。実行例N = 10K = 4出力: 10 6 2 -2 2 6 10アルゴリズムNが0より大きい間、関数を再帰的に呼び出し続けます。各呼び出しのたびにNからKを減算します。数値が0以下になったら加算モードに切り替え、各呼び出しごとにKを加算します。元の数値Nに
-
Pythonプログラム:数の一意な素因数の積を求める方法
はじめに 本記事では、次の問題に対する解き方を学びます。 問題文: 整数 n が与えられたとき、その数が持つ一意な(重複しない)素因数をすべて求め、それらの積を返します。 例: 入力:num = 11 出力:積は 11 説明: 入力された数は 11 で、素因数は 11 のみです。 したがって、その積も 11 となります。 アプローチ1:総当たり法(ブルートフォース) i = 2 から n+1 までの for ループを使い、i が n の約数であるかどうかを確認します。約数であれば、さらに i 自身が素数かどうかを判定し、素数なら積に掛け合わせます。この処理を i が n に達するまで繰り返しま
-
Pythonで文字列からn番目の文字を削除するプログラムの書き方
はじめにこの記事では、以下の問題に対する解決方法を解説します。問題文 − 与えられた文字列から、指定したインデックス(i番目)の文字を削除し、その結果を表示します。Pythonの文字列では、インデックスは必ず0から始まるという点に注意してください。例えば、「Tutorialspoint」という文字列の場合、各文字のインデックスは以下のように対応しています。T u t o r i a l s p o i n t 0 1 2 3 4 5 6 7 8 9 10 11 12 13それでは、この問題を解決するためのPythonスクリプトを見ていきましょう。実装例def remove(string
-
Pythonで選択ソートを実装する方法|仕組みとサンプルコードをわかりやすく解説
この記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.x(およびそれ以前のバージョン)での実装方法について解説します。 選択ソートとは 選択ソートは、ソートされていない部分から最小の要素を繰り返し見つけ出し、先頭側へ移動させることで配列全体を整列していくアルゴリズムです。処理の過程で、対象の配列は次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーションでは、未ソートの部分配列から最小要素を取り出し、ソート済みの部分配列の末尾に追加していきます。 アルゴリズムの動作イメー
-
Pythonで単利を計算するプログラムの作成方法
この記事では、Python 3.x(およびそれ以前のバージョン)を使用して、単利を計算する方法について解説します。単利とは、元本に対して一定の利率で発生する利息のことです。一般的には、利率に元本を掛け、さらに利息が発生する期間を掛けることで求められます。単利の計算式単利は数学的に以下の式で表すことができます。単利(SI) = (P × T × R) / 100 P:元本(Principal) T:期間(Time) R:利率(Rate)例えば、元本 P = 1000、利率 R = 1%、期間 T = 2 の場合、単利は次のように計算されます。SI = (1000 × 1 × 2) / 100
-
Pythonで作るTwitter感情分析ツール:tweepyとTextBlobによる実装ガイド
はじめに本記事では、Pythonを使ったTwitterの感情分析(センチメント分析)の方法を解説します。Twitter OAuth APIへの登録、必要なライブラリのインストール、そして実際に感情分析スクリプトを書くところまで、順を追って説明していきます。まず前提知識として、API(Application Programming Interface)とは、外部からサーバー(ここではTwitter)の内部機能へアクセスするための窓口となる仕組みです。APIを利用することで、プログラムからTwitterのデータを取得できるようになります。事前準備:Twitterアプリの登録感情分析を始める前に、以
-
Pythonのunittestモジュールで学ぶユニットテストの基本
この記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されているunittestモジュールを使って、ソフトウェアテストの基礎を学んでいきます。unittestを利用すると、テストの自動化、セットアップ用コードと終了用コードの共有、そして各フレームワークに依存しない独立したテストの作成が可能になります。ユニットテストでは、オブジェクト指向プログラミングのさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について解説します。TestCase(テストケース):特定の入力に対する応答を検証するための基底クラスです。unittestの基底クラス「TestCase」を継
-
Pythonでリストから「数値とその3乗」を含むタプルのリストを作成する方法
この記事では、指定された問題文に対する解決策とそのアプローチについて詳しく解説します。問題文リストが入力として与えられたとき、各要素の数値とその3乗(キューブ)をペアにしたタプルのリストを作成する必要があります。解決アプローチこの問題は、Pythonのリスト内包表記を使うことで、簡潔かつ効率的に解くことができます。以下に、インライン実装による具体的な解法を示します。コード例list1 = [0,1,2,4,6] res = [(val, pow(val, 3)) for val in list1] # main print(res)出力結果[(0, 0), (1, 1), (2, 8), (4
-
Pythonで実現する画像ステガノグラフィ入門|stepicモジュールで画像にメッセージを隠す方法
本記事では、Pythonを使った画像ベースのステガノグラフィ(Steganography)について解説します。ステガノグラフィとは、テキストデータを音声・動画・画像などの背後に密かに隠す技術のことです。情報セキュリティの強化や、虚偽の著作権申請からの保護など、さまざまな場面で活用されています。 ここでは、Pythonのstepicモジュールが提供するエンコード機能を使って、画像にテキストを埋め込みます。また、画像の表示や確認には、Pythonの画像処理ライブラリであるPIL(Python Imaging Library)を使用します。 前提条件と準備 推奨IDE:Jupyter Noteboo
-
PythonのScrapyフレームワークで学ぶWebスクレイピング実装入門
本記事では、Pythonで利用できるScrapyフレームワークを使ったWebスクレイピングの手法について解説します。 Webスクレイピングとは? Webスクレイピングとは、クローラー(スパイダー)と呼ばれるプログラムを使って、Webサイトからデータを自動的に取得する技術のことです。APIを提供していないWebページからデータを抽出したい場合に特に役立ちます。Pythonでは、Beautiful Soup、Scrapy、lxmlなど、さまざまなライブラリやフレームワークを使ってWebスクレイピングを実現できます。 今回は、その中でも大規模なデータ収集に適した強力なフレームワークであるScrapy
-
Pythonのlxmlライブラリを使ったWebスクレイピングの実装方法を解説
本記事では、Pythonで利用できるlxmlモジュールを使用したWebスクレイピングの手法について解説します。 Webスクレイピングとは? Webスクレイピングとは、クローラーやスキャナーと呼ばれるプログラムを使って、Webサイトからデータを取得する技術のことです。APIを提供していないWebページからデータを抽出したい場合に特に便利な手法です。 Pythonでは、Webスクレイピングを行うためのモジュールが複数用意されており、代表的なものとして「Beautiful Soup」「Scrapy」「lxml」などが挙げられます。 本記事では、その中でもlxmlモジュールを使ったスクレイピング方法を
-
Pythonで正四面体の表面積を計算するプログラム(√3×a²の公式)
本記事では、正四面体の表面積を求める問題の解き方とそのアプローチについて詳しく解説します。 問題文 正四面体の一辺の長さが与えられたとき、その正四面体の表面積を求める必要があります。 正四面体とは 正四面体(Tetrahedron)とは、三角形を底面としたピラミッドのような形状の立体図形です。4つの三角形の面(側面に3つ、底面に1つ)と、4つの頂点(角)を持つ立体オブジェクトです。 計算式 一辺の長さを a とすると、正四面体の表面積は次の公式で求められます。 表面積 = √3 × a² この公式をもとに、以下のように面積を計算する関数を定義します。 サンプルコード import math
-
円の面積を求めるPythonプログラム
この記事では、円の面積を計算する問題の解決策とアプローチについて学びます。 問題定義 円の半径が与えられたとき、その円の面積を求める必要があります。 円の面積は、以下の公式を使って簡単に計算できます。 面積 = π × r × r ここで、π(パイ)は円周率(約3.142)、r は円の半径を表します。 実装例 それでは、実際のコードを見てみましょう。 def findArea(r): PI = 3.142 return PI * (r*r) # ドライバーメソッド print(Area is %.6f % findArea(5)) 出力結果 Area is 78.550000
-
1/1! + 2/2! + 3/3! + …… + n/n! の級数の合計を求めるPythonプログラム
この記事では、与えられた問題を解くための解法とアプローチについて詳しく解説します。 問題文 整数 n が入力として与えられたとき、次の級数の合計を求めます。 1/1! + 2/2! + 3/3! + 4/4! + …… + n/n! ここでは for ループを使用して実装するため、時間計算量は O(n) となります。また、処理効率を高めるポイントとして、階乗の計算を同じループ内で同時に行っている点が挙げられます。 アルゴリズム 以下の手順で級数の合計を求めます。 合計値 res を 0、階乗値 fact を 1 で初期化します。 i を 1 から n まで順に処理し、fact *= i に