Pythonで文字列の平均文字が存在するかどうかを確認する方法
英数字を含む文字列 s が与えられたとき、その文字列の「平均文字」が存在するかどうかを判定し、存在する場合はその文字を返すプログラムを作成します。ここでいう平均文字とは、文字列内の各文字のASCII値の平均を計算し、その小数点以下を切り捨てた値に対応する文字のことです。
問題の例
例えば、入力が s = "pqrst" の場合、出力は 'r' になります。これは、各文字のASCII値の平均が以下のように計算されるためです。
(112 + 113 + 114 + 115 + 116) / 5 = 570 / 5 = 114
ASCII値 114 に対応する文字は 'r' なので、答えは 'r' となります。
解決の手順
この問題を解くには、以下の手順に従います。
- 合計値
totalを 0 で初期化します。 - 文字列
s内の各文字chについて、そのASCII値(ord(ch))をtotalに加算します。 avgをtotal / len(s)の小数点以下を切り捨てた値として計算します。- ASCII値
avgに対応する文字(chr(avg))を返します。
実装例
理解を深めるために、以下のPythonコードを見てみましょう。
from math import floor
def solve(s):
total = 0
for ch in s:
total += ord(ch)
avg = int(floor(total / len(s)))
return chr(avg)
s = "pqrst"
print(solve(s))
入力
"pqrst"
出力
r
コードのポイント
このコードで使われている重要な関数を簡単に説明します。
- ord():文字を引数に取り、対応するUnicodeコードポイント(ASCII値)を整数で返します。
- chr():整数を引数に取り、そのコードポイントに対応する文字を返します。
ord()の逆の操作です。 - floor():mathモジュールからインポートする関数で、数値の小数点以下を切り捨てます。
なお、floor() を使わずにPythonの整数除算演算子 // を用いて total // len(s) と書くこともできます。こちらの方がより簡潔でPythonらしい書き方です。
-
Pythonで二分探索木(BST)に特定の値が存在するかどうかを判定する方法
問題の概要二分探索木(BST:Binary Search Tree)と、探索対象となる値 val が与えられたとき、その値が木の中に存在するかどうかを判定するプログラムを作成します。例えば、次のような二分探索木があったとします。このとき val = 7 とすると、7は木の中に存在するため、出力は True になります。アルゴリズムの手順BSTの性質を利用すると、効率的に値を探索できます。手順は以下の通りです。関数 solve() を定義します。引数として root(現在のノード)と val を受け取ります。root が null(None)の場合は False を返します。root のデータが
-
文字列が空かどうかをチェックするPythonプログラム
この記事では、与えられた文字列が空であるかどうかを判定するための解決策とアプローチについて解説します。 問題文 文字列が入力として与えられたとき、その文字列が空(空文字列)であるかどうかを判定する必要があります。 Pythonの文字列はイミュータブル(変更不可)な性質を持っているため、文字列に対して何らかの操作を行う際には注意して扱う必要があります。 ここでは、上記の問題を解決するための2つのアプローチを紹介します。 len()メソッドを使用する方法 等価演算子(==)を使用する方法 アプローチ1:len()メソッドを使う方法 len()関数で文字列の長さを取得し、その長さが0であれば空文