雨粒

雨粒

初級

はじめに

雨粒は、面接の定番の質問であるFizzBuzzチャレンジを、少し複雑にしたものです。

説明

ここでの課題は、数値を対応する雨粒の音に変換することです。

与えられた数値が次の場合を考えます。

  • 3で割り切れるなら、結果に "Pling" を追加します。
  • 5で割り切れるなら、結果に "Plang" を追加します。
  • 7で割り切れるなら、結果に "Plong" を追加します。
  • 3、5、7のいずれでも割り切れないなら、結果はその数値を文字列にしたものとします。

例

  • 28は7で割り切れますが、3でも5でも割り切れないので、結果は"Plong"になります。
  • 30は3と5で割り切れますが、7では割り切れないので、結果は"PlingPlang"になります。
  • 34は3、5、7のいずれでも割り切れないので、結果は"34"になります。
Note

ある数が別の数で割り切れるかどうかを確かめるよくある方法は、余りまたは剰余を0と比べることです。 ほとんどのプログラミング言語には、どちらか一方(または両方)のための演算子や関数が用意されています。

Pythonでのこの演習の構成

この演習は、Pythonの%(余り)演算子を使うと最もきれいに解けます。この演算子は、正の整数の除算の余りを返します。 同じ働きをするメソッドとして、operatorモジュールのoperator.mod()もあります。

Pythonには、mathモジュールにも「余り」を求めるメソッドがいくつか用意されています。 math.fmod()は%と似た動作をしますが、対象となるのは浮動小数点数です。 math.remainder()は、除算の余りを求める「0に最も近い値へ」というアルゴリズムを実装しています。 これらのメソッドに親しんでおくことはおすすめしますが、どちらも%の結果とは正確に一致しないため、この演習で使うことはおすすめしません。

組み込み関数divmod()も、2つの正の整数に使えば%と一致する余りを返しますが、展開が必要なtupleを返します。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Python Exercism

雨粒を始める準備はできましたか?

Exercismに登録すれば、17個のコンセプト146個の演習、そして本物の人間によるメンタリングとともに、Pythonを学んでマスターできます。すべて無料です。

雨粒を深く掘り下げよう!

関数型パイプライン、行列の積、マクロを使った事前計算テーブルによる解法、オブジェクト指向のアプローチ、PythonとTCLの見事な活用法、そしてエンタープライズ版まで、さまざまな解法を紹介します。