Pythonで3-6-9ゲームを実装する方法を解説
3-6-9ゲームとは?
「3-6-9ゲーム」は、韓国や日本で古くから親しまれている拍手遊びです。3の倍数、または数字に3・6・9が含まれるときに拍手(clap)をするルールが有名ですね。この記事では、そのルールをPythonのプログラムで実装する方法を解説します。
問題の定義
数値 n が与えられたとき、1からnまでの各数値を要素とするリストを作成します。ただし、以下の条件に当てはまる数値は文字列 "clap" に置き換えます。
- その数値が3の倍数である
- その数値に「3」「6」「9」のいずれかが含まれている
例えば、入力が 20 の場合、出力は次のようになります。
['1', '2', 'clap', '4', '5', 'clap', '7', '8', 'clap', '10', '11', 'clap', 'clap', '14', 'clap', 'clap', '17', 'clap', 'clap', '20']
この例を見ると、3・6・9・12・13・15・16・18・19 などが「clap」に置き換えられていることが分かります。12や15は3の倍数、13や16・19は数字に該当する数字が含まれているためです。
解決のアプローチ
この問題は、以下の手順で解くことができます。
- 置き換え用の文字列(ここでは "clap")を変数として用意する
- 1からnまでの数値を文字列型に変換しながらリストに格納する
- リストの各要素に対して、次の条件を順番に判定し、該当すれば "clap" に置き換える
- 数値が3で割り切れるか(剰余演算
% 3 == 0を使用) - 数字に「3」が含まれているか(
in演算子を使用) - 数字に「6」が含まれているか
- 数字に「9」が含まれているか
- 数値が3で割り切れるか(剰余演算
- 処理が完了したリストを返す
実装例
それでは、実際のコードを見てみましょう。
class Solution:
def solve(self, n):
string = "clap"
ls = [str(i) for i in range(1, n + 1)]
for i in range(len(ls)):
if int(ls[i]) % 3 == 0:
ls[i] = string
elif '3' in ls[i]:
ls[i] = string
elif '6' in ls[i]:
ls[i] = string
elif '9' in ls[i]:
ls[i] = string
return ls
ob = Solution()
print(ob.solve(20))
コードのポイント解説
1. リスト内包表記でリストを生成
[str(i) for i in range(1, n + 1)] の部分では、リスト内包表記を使って1からnまでの数値を一括で文字列化しています。後の判定で '3' in ls[i] のように部分文字列チェックを行うため、あらかじめ文字列型にしておくのがポイントです。
2. 剰余演算子で3の倍数を判定
int(ls[i]) % 3 == 0 により、その数値が3の倍数かどうかを判定しています。文字列に戻してからint型へ変換している点に注意してください。
3. in演算子で特定の数字を含むか判定
'3' in ls[i] のように書くことで、文字列の中に「3」という文字が含まれているかどうかを簡単に調べられます。これにより、13や29のような数も正しく検出できます。
入力と出力の確認
入力
20
出力
['1', '2', 'clap', '4', '5', 'clap', '7', '8', 'clap', '10', '11', 'clap', 'clap', '14', 'clap', 'clap', '17', 'clap', 'clap', '20']
期待どおり、3の倍数および3・6・9を含む数値だけが "clap" に置き換えられていることが確認できます。
まとめ
本記事では、Pythonを使って3-6-9ゲームのルールを実装する方法を紹介しました。ポイントは次の3つです。
- 数値を文字列として扱うことで、桁ごとの判定が容易になる
- 剰余演算子
%で倍数判定ができる in演算子で特定の数字が含まれるかを簡潔に判定できる
if文を連ねる代わりに any(c in s for c in '369') のようにまとめれば、さらに簡潔なコードにすることも可能です。ぜひ自分なりにアレンジして、理解を深めてみてください。
-
【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説
はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが
-
PythonでQuine(クワイン)プログラムを書いてみよう
「Quine(クワイン)」とは、入力を一切受け取らずに、自分自身のソースコードを出力する特殊なプログラムのことです。一見すると不思議な自己言及的な仕組みですが、実装にはいくつかの厳格なルールがあります。最も重要な条件は、プログラム内部からソースコードファイルを読み込んではいけないという点です。つまり、純粋にコード自身の論理だけで自分の内容を再現しなければなりません。 サンプルコード Pythonでは、わずか1行でQuineを実現できます。 a=a=%r;print (a%%a);print (a%a) 実行結果 a=a=%r;print (a%%a);print (a%a) ご覧のとお