Pythonで英数字文字列内の数字の合計を求めるプログラム
「0」から「9」までの数字と小文字の英字で構成される英数字の文字列 s があるとします。このとき、s に含まれる数値の合計を求める必要があります。ただし、数字が連続している場合は、それらを1つの数値として扱うものとします。
例えば、入力が s = "hello25world63power86" の場合、出力は 174 になります。これは 25 + 63 + 86 = 174 となるためです。
解決のアプローチ
この問題を解くために、以下の手順に従います。
ret := 0、curr := 0 として初期化します
文字列 s 内の各文字 ch について、次の処理を行います
ch が数字の場合
curr := 10 * curr + (ch を整数に変換した値)
それ以外の場合(英字の場合)
ret := ret + curr
curr := 0 にリセット
最後に ret + curr を返します
このアルゴリズムのポイントは、変数 curr を使って連続する数字を桁ごとに組み立てていくことです。例えば「25」という2桁の数字は、まず「2」を読み込んで curr = 2 となり、次に「5」を読み込んだ時点で curr = 2 × 10 + 5 = 25 となります。英字が出現したタイミングで、それまでに組み立てた数値を合計 ret に加算し、curr をリセットします。
実装例
理解を深めるために、以下の実装例を見てみましょう。
from string import digits
def solve(s):
ret = 0
curr = 0
for ch in s:
if ch in digits:
curr = 10 * curr + int(ch)
else:
ret += curr
curr = 0
return ret + curr
s = "hello25world63power86"
print(solve(s))
コードの解説
ここでは string モジュールの digits 定数を使用して、文字が数字かどうかを判定しています。digits は "0123456789" という文字列であり、ch in digits の条件式で簡単に数字判定が可能です。ループ終了後に ret + curr を返すのは、文字列の末尾が数字で終わっている場合に、まだ加算されていない curr の値を合計に含めるためです。
入力
"hello25world63power86"
出力
174
-
Pythonでリストの累積和(累積合計)を求める方法
この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。問題文あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。実装例それでは、実際の実装を見ていきましょう。# 累積和を求める関数 def Cumulative(l): new = [] cumsum = 0 for element in l:
-
Pythonで配列(リスト)の合計を求める方法をわかりやすく解説
この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に