Python
 Computer >> コンピューター >  >> プログラミング >> Python

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は数字に該当する数字が含まれているためです。

解決のアプローチ

この問題は、以下の手順で解くことができます。

  1. 置き換え用の文字列(ここでは "clap")を変数として用意する
  2. 1からnまでの数値を文字列型に変換しながらリストに格納する
  3. リストの各要素に対して、次の条件を順番に判定し、該当すれば "clap" に置き換える
    • 数値が3で割り切れるか(剰余演算 % 3 == 0 を使用)
    • 数字に「3」が含まれているか(in 演算子を使用)
    • 数字に「6」が含まれているか
    • 数字に「9」が含まれているか
  4. 処理が完了したリストを返す

実装例

それでは、実際のコードを見てみましょう。

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') のようにまとめれば、さらに簡潔なコードにすることも可能です。ぜひ自分なりにアレンジして、理解を深めてみてください。

  1. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが

  2. PythonでQuine(クワイン)プログラムを書いてみよう

    「Quine(クワイン)」とは、入力を一切受け取らずに、自分自身のソースコードを出力する特殊なプログラムのことです。一見すると不思議な自己言及的な仕組みですが、実装にはいくつかの厳格なルールがあります。最も重要な条件は、プログラム内部からソースコードファイルを読み込んではいけないという点です。つまり、純粋にコード自身の論理だけで自分の内容を再現しなければなりません。 サンプルコード Pythonでは、わずか1行でQuineを実現できます。 a=a=%r;print (a%%a);print (a%a) 実行結果 a=a=%r;print (a%%a);print (a%a) ご覧のとお