-
Pythonで二分木が平衡(バランス)しているか判定する方法
平衡二分木(Height-Balanced Binary Tree)とは? 二分木では、各ノードは最大2つの子、すなわち「左の子」と「右の子」を持ちます。ある二分木が与えられたとき、その木が平衡(バランス)しているかどうかを判定することは、データ構造とアルゴリズムの学習における重要なテーマの一つです。 定義: すべてのノードについて、左部分木と右部分木の高さの差が「1」以下である場合、その二分木は平衡(height-balanced)であるとみなされます。 例1:平衡しているケース 入力: 1 / \ 2 3 / \
-
Pythonでマトリックスを幅優先探索(BFS)して最短距離を求める方法
マトリックス(2次元配列)上の要素を解析する場合、各セルから確認できるのは「左」「右」「下」「上」の4方向です。 幅優先探索(Breadth First Search/BFS)とは、与えられた2次元マトリックス上の2つの要素間の最短距離を求めるアルゴリズムです。各セルに対しては4つの操作が可能で、それぞれ次の数値で表現されます。 「2」 … そのセルがスタート地点(ソース)であることを示す 「3」 … そのセルがゴール(デスティネーション)であることを示す 「1」 … そのセルからさらに別の方向へ移動できることを示す 「0」 … そのセルからはどの方向にも移動できないことを示す 以上の条件
-
Pythonでランダムポインタを持つ連結リストをディープコピーする方法
連結リスト(Linked List)は線形データ構造の一種で、各ノードが2つの要素で構成されています。1つはノードの値(データ)を格納する部分、もう1つは次のノードのアドレスを指すポインタです。ここでは、各ノードがリスト内の他のノードを指す「ランダムポインタ」を持つ連結リストを想定します。このリストと全く同じ構造を持つ新しいリストを構築するのが課題です。ランダムポインタを持つ元のリストから完全な複製を作成することを、連結リストの「ディープコピー」と呼びます。具体例入力:元の連結リスト: 1 → 2 → 3 → 4 → 5(各ノードはランダムポインタで他のノードを指しています)出力:5->
-
Pythonで2つの文字列をマージして最大の文字列を作成する方法
問題の概要 2つの文字列「a」「b」と、空の文字列「merge」が与えられているとします。この課題では、次のルールに従って「merge」を文字で埋めていきます。 文字列「a」が空でない場合、「a」の先頭の1文字を取り除き、それを「merge」に追加します。 文字列「b」が空でない場合、「b」の先頭の1文字を取り除き、それを「merge」に追加します。 両方の文字列が空でない場合は、辞書順で比較し、大きい方の文字列から先頭の1文字を取り出して「merge」に追加します。つまり「a」が「b」より大きければ先に「a」から、そうでなければ「b」から文字を取り出します。 これをどちらかの文字列が空に
-
Pythonで3つの数値をすべて0にする最小ステップ数を求める方法
はじめに3つの整数が与えられたとき、「1回の操作で任意の2つの数からそれぞれ1を引く」というルールに従って、すべての数を0にするまでに必要な最適なステップの総数を求める問題です。例入力:a = 4 b = 4 c = 6出力:7解説:(4, 4, 6) の状態から、以下の手順で操作を進めます。1番目と2番目の数から1を引く → (3, 3, 6)1番目と3番目の数から1を引く → (2, 3, 5)1番目と3番目の数から1を引く → (1, 3, 4)1番目と3番目の数から1を引く → (0, 3, 3)2番目と3番目の数から1を引く → (0, 2, 2)2番目と3番目の数から1を引く →
-
Pythonで式ツリー(式木)を構築する方法:後置記法の式から式木を作るプログラム
式ツリー(Expression Tree)とは、二分木の一種で、葉ノードには演算の対象となる値(オペランド)が格納され、内部ノードには演算子が格納されるデータ構造です。 例:「4 + ((7 + 9) * 2)」という式は、次のような式ツリーで表現できます。 問題を解くためのアプローチ 与えられた式から式ツリーを構築する際には、一般的にスタックというデータ構造を使用します。まず、与えられた後置記法(ポストフィックス記法)の式を走査しながら、以下の手順を実行していきます。 式の中にオペランドが現れた場合は、それをノードとして作成し、スタックにプッシュします。 演算子が現れた場合は、その演算
-
Pythonの正規表現入門:match()とsearch()関数の違いと使い方を徹底解説
Pythonの正規表現(regex)では、主に2種類の操作を行うことができます。それが「検索(search)」と「マッチング(match)」です。文字列からパターンを見つけ出し、照合する際に、これら2つの関数を使い分けることで、正規表現を効率的に活用できます。 match() と search() の基本的な違い ある文字列が与えられたとき、re.match()は文字列の先頭のみでパターンとの一致を確認するのに対し、re.search()は文字列内のどこにでもパターンが存在するかを確認します。 パターンが見つかった場合、どちらの関数もmatchオブジェクトを返します。見つからなかった場合は N
-
【Python Pandas】DataFrameのshapeプロパティで行数・列数を取得し、条件に一致するデータを抽出する方法
はじめに 本記事では、PythonのPandasライブラリを使用して、products.csvファイルからデータを読み込み、DataFrameの行数と列数を出力した後、「product」列の値が「Car」と一致する先頭10行分のデータを抽出して表示するプログラムの作成方法を解説します。 実現したい処理 products.csvファイルからデータを読み込む shapeプロパティを使って行数と列数を出力する 先頭10行の中から「product」列の値が「Car」である行を抽出して表示する products.csvファイルを読み込んだ場合の出力結果は以下のようになります。 Rows: 10
-
Python Pandas入門 – DataFrameのtail()関数で末尾の行を抽出する方法
products.csvファイルを読み込み、price(価格)列の値が30,000〜50,000の範囲に含まれる行を抽出したうえで、その中から最後の3行の「id」列と「product」列を表示するPythonコードを紹介します。なお、DataFrame.tail(n)はDataFrameの末尾n行を取得できる便利なメソッドで、解法2ではこのtail()関数を活用します。 期待される出力結果 price列の値が30,000〜50,000の範囲にある行のうち、id列とproduct列の最後の3行は次のようになります。 id product 79 80 Truck 81 82 Bike 9
-
Pythonのリストとタプルの違いを徹底解説!特徴と使い分けのポイント
この記事では、Pythonにおけるリスト(list)とタプル(tuple)の違いについて詳しく解説します。リストとタプルは、Pythonでデータを格納するために使われる代表的な2つのデータ構造です。どちらも異なる型のデータをまとめて扱うことができますが、それぞれに重要な特徴があります。リスト(list)とはリストは「シーケンス」とも呼ばれ、Pythonで最も頻繁に使われるデータ型の一つです。柔軟性が高く、さまざまな場面で活用できるのが魅力です。リストを作成するには、すべての要素を角括弧 [ ] の中に入れ、要素同士をカンマで区切ります。リストには任意の数の要素を格納でき、整数・浮動小数点数・文
-
【Python】Tkinterで作る平均速度計算機の実装方法
はじめに この記事では、Pythonの標準GUIライブラリ「Tkinter」を使用して、移動物体の平均速度を計算するデスクトップアプリケーションを作成する方法を解説します。平均速度は、以下の式から求めることができます。 平均速度 = 距離 ÷ [時間(時)+(分 ÷ 60)] 入力値の選択には、指定した範囲の値に対してスピナー(上下ボタン付きの数値入力欄)を作成できる SpinBox ウィジェットを使用します。今回入力する項目は、「距離(キロメートル)」「時間(時)」「分」の3つです。 コード例 from tkinter import * # tkinterフレームのインスタンスを作成 w
-
Tkinterでマウスカーソルを変更する方法【cursorプロパティ活用ガイド】
Tkinterは、Pythonに標準搭載されているGUIライブラリで、さまざまな機能的なデスクトップアプリケーションを開発するために広く利用されています。豊富な関数やメソッドが用意されており、アプリケーション開発時に高い拡張性と多彩な機能を実現できます。 本記事では、Tkinterのcursor(カーソル)プロパティを使って、ボタン上にマウスを乗せたときのカーソル形状を変更する方法を解説します。Tkinterのウィジェットには多数のカーソルマップが用意されており、エンドユーザーにさまざまな視覚的なフィードバックを提供できます。 Tkinterで利用できる主なカーソル一覧 cursorプロパテ
-
Tkinterとtkcalendarで日付ピッカーカレンダーを作成する方法
Tkinterは、PythonでGUIアプリケーションを開発するための最も人気のある標準ライブラリの一つです。豊富なメソッドや関数が用意されており、アプリケーションにさまざまな機能を簡単に追加できます。tkcalendarはTkinterのパッケージの一つで、ウィンドウ上にGUIベースのカレンダーを作成することができます。このカレンダーを使えば、日付の選択はもちろん、イベントの登録やスケジュール管理など、多彩な操作が可能になります。この記事では、tkcalendarパッケージを使用して日付ピッカー(Date Picker)カレンダーを作成する方法を解説します。まず、ローカル環境にパッケージをイ
-
Python Tkinterでドロップダウンメニューを作成する方法
ナビゲーションは、あらゆるアプリケーションにおいて最も重要な要素の一つです。洗練されたナビゲーションは、ユーザー体験を視覚的にも操作的にも大きく向上させます。Tkinterを使えば、メニューやサブメニューを非常に効率的に作成できます。Tkinterには、メニューを作成するための組み込み機能が用意されており、他のウィジェットやウィンドウから呼び出して利用できます。tkinter.Menuモジュールは、メニューアイテムに対してさまざまなプロパティを提供しています。これらのプロパティを使うことで、ボタンへのラベル付け、ボタンの状態切り替え、cascadeプロパティによるサブメニューの追加などが可能に
-
Python Tkinterでフレームレス(枠なし)ウィンドウを作成する方法
Tkinterは、PythonでGUIアプリケーションを開発する際に最も広く使われている標準ライブラリです。ボタンやラベルなどのウィジェット追加をはじめ、GUI構築に必要なさまざまな機能が標準で備わっています。 ここでは、Tkinterを使ってタイトルバーや境界線のない「フレームレス(ボーダーレス)ウィンドウ」を作成する方法を解説します。フレームレスウィンドウを実現するには、overrideredirectメソッドを使用します。このメソッドを有効にすると、OSのウィンドウマネージャーによる装飾が無効化され、閉じるボタン、タイトルバー、最小化ボタンといったウィンドウ要素がすべて取り除かれます。
-
Python Tkinterで透明なウィンドウを作成する方法
Pythonは、デスクトップアプリケーションをはじめとする実用的なアプリ開発で最も人気のあるプログラミング言語の一つです。豊富なライブラリと多様なモジュール・関数が用意されており、拡張性の高いアプリケーションを効率的に構築できます。その中でもTkinterは、GUIベースのアプリケーションを作成する際に最も広く使われている標準ライブラリです。ウィジェットの追加をはじめ、ウィンドウに必要なさまざまな属性を簡単に設定できるのが特徴です。透明なウィンドウを作るにはここでは、Tkinterを使って半透明のウィンドウを作成する方法を紹介します。ウィンドウの透明度を変更するには、attributes()メ
-
Tkinterでウィンドウサイズの変更に合わせてボタンを動的にリサイズする方法
Pythonには、GUIアプリケーションを作成・開発するための豊富なライブラリが数多く用意されています。その中でもTkinterは、GUIベースのアプリケーション開発で最も広く使われているPython標準ライブラリの一つです。ウィジェットの追加をはじめ、アプリケーション構築に必要なさまざまな機能や属性を備えています。ボタンは、特定のタスクやイベントに割り当てることができるウィジェットです。しかし、ボタンのサイズや位置をウィンドウに合わせて動的に変更したい場合は、TkinterのGridモジュールを使ってレイアウトを設定します。ボタンを動的にリサイズするには、rowconfigure()メソッド
-
Python Tkinterアプリケーションの機能テスト実例:ユーザー入力をテキストファイルに保存して検証する方法
ここでは、GUIベースのPython Tkinterアプリケーションを例に、機能テスト(ファンクショナルテスト)の具体的な進め方を解説します。このサンプルアプリケーションは、ユーザーが入力したテキストを受け取り、新しいテキストファイルとして保存することで入力内容を検証できるものです。保存されたファイルには、ユーザーがタイプしたテキストがそのまま記録されるため、ファイルの中身を確認することでユーザー入力が正しく処理されたかどうかを検証できます。 機能テストとは何か 機能テストでは、主に以下のような観点に焦点を当てて検証を行います。 バックエンドAPIの動作 データベースとの連携 ユーザーとサー
-
PythonのTkinterで簡単なメッセージボックスを作成する方法
Tkinterとは Tkinterは、PythonでGUIアプリケーションを作成・開発するための標準ライブラリです。ボタンやラベルなど、アプリケーションに多彩な機能を追加するためのメソッドや関数が豊富に用意されており、ダイアログボックスなどのウィジェットも簡単に作成できます。 この記事では、ポップアップで情報を表示したり、ユーザーに選択肢を提示したりできるシンプルなメッセージボックスの作成方法を解説します。 メッセージボックスの作成例 以下のサンプルコードでは、「Click」ボタンをクリックすると、エラーメッセージと警告メッセージが順番にポップアップ表示されるようにしています。 # 必要なラ
-
tkinterでウィンドウを閉じる方法|destroy()メソッドの使い方を解説
tkinterを使えば、Pythonで手軽にGUIアプリケーションを作成できます。しかし、タイトルバー右上の×ボタン以外の方法でウィンドウやフレームを閉じたい場合、どのように実装すればよいか悩むこともあるでしょう。そのようなときに役立つのが、ウィンドウを破棄して閉じるための .destroy() メソッドです。tkinterの各ウィジェットや属性は互いに独立しているため、「ウィンドウを閉じる処理」を専用の関数として分離して定義できます。これにより、ボタンのクリックイベントからウィンドウを閉じる動作を自由に制御可能です。サンプルコード# ライブラリをインポート from tkinter impo