Pythonでナルシシスト数(アームストロング数)を出力する方法を解説
ナルシシスト数とは?
Pythonでナルシシスト数(Narcissistic Number、別名アームストロング数)を出力する前に、まずその定義を確認しておきましょう。
ナルシシスト数とは、各桁の数字を「桁数」乗した値の合計が、元の数と等しくなる整数のことです。例えば、153は3桁の数であり、1³ + 5³ + 3³ = 1 + 125 + 27 = 153となるため、ナルシシスト数です。
代表的なナルシシスト数には、1、2、3、…、9(1桁の数はすべて該当)、そして153、370、371、407などがあります。
Pythonで実装するコード例
以下のコードでは、指定した範囲内の数を順番にチェックし、各桁の数字を取り出して桁数乗の合計を計算することで、ナルシシスト数を判定・出力しています。
def print_narcissistic_nums(start, end):
for i in range(start, end + 1):
# 数値を文字列に変換し、各桁をリストとして取得
digits = list(map(int, str(i)))
total = 0
length = len(digits)
for d in digits:
total += d ** length
if total == i:
print(i)
print_narcissistic_nums(1, 380)コードのポイント
str(i)で数値を文字列化し、map(int, ...)を使って各桁を整数のリストに変換している点がポイントです。リストの長さがそのまま桁数になるため、各桁をその桁数乗して合計すれば、簡単に判定できます。
実行結果
上記のコードを実行すると、1から380までの範囲にあるナルシシスト数が出力されます。
1 2 3 4 5 6 7 8 9 153 370 371
このように、シンプルなループ処理だけでナルシシスト数を効率よく見つけることができます。範囲を広げれば、407や1634などのより大きなナルシシスト数も発見できるので、ぜひ試してみてください。
-
Pythonで文字列から数値だけを抽出する方法|isdigitとリスト内包表記の使い方
はじめにPythonで文字列の中から数字(数値)だけを取り出したい場面は多くあります。例えば、ユーザー入力やログデータ、テキストファイルから数値情報を取得するケースなどです。このような場合には、リスト内包表記とisdigitメソッドを組み合わせることで、シンプルかつ効率的に実現できます。サンプルコード以下は、文字列から数字を抽出する基本的な実装例です。my_string = python is 12 fun 2 learn print(元の文字列:) print(my_string) my_result = [int(i) for i in my_string.split() if i.i
-
Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例
Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実