exercism.org/python/raindrops/README.md

2.9 KiB

Raindrops

Welcome to Raindrops on Exercism's Python Track. If you need help running the tests or submitting your code, check out HELP.md.

Introduction

Raindrops is a slightly more complex version of the FizzBuzz challenge, a classic interview question.

Instructions

Your task is to convert a number into its corresponding raindrop sounds.

If a given number:

  • is divisible by 3, add "Pling" to the result.
  • is divisible by 5, add "Plang" to the result.
  • is divisible by 7, add "Plong" to the result.
  • is not divisible by 3, 5, or 7, the result should be the number as a string.

Examples

  • 28 is divisible by 7, but not 3 or 5, so the result would be "Plong".
  • 30 is divisible by 3 and 5, but not 7, so the result would be "PlingPlang".
  • 34 is not divisible by 3, 5, or 7, so the result would be "34".
A common way to test if one number is evenly divisible by another is to compare the [remainder][remainder] or [modulus][modulo] to zero.
Most languages provide operators or functions for one (or both) of these.

[remainder]: https://exercism.org/docs/programming/operators/remainder
[modulo]: https://en.wikipedia.org/wiki/Modulo_operation

How this Exercise is Structured in Python

This exercise is best solved with Python's % (modulo) operator, which returns the remainder of positive integer division. It has a method equivalent, operator.mod() in the operator module.

Python also offers additional 'remainder' methods in the math module. math.fmod() behaves like %, but operates on floats. math.remainder() implements a "step closest to zero" algorithm for the remainder of division. While we encourage you to get familiar with these methods, neither of these will exactly match the result of %, and are not recommended for use with this exercise.

The built-in function divmod() will also give a remainder than matches % if used with two positive integers, but returns a tuple that needs to be unpacked.

Source

Contributed to by

  • @behrtam
  • @BethanyG
  • @bsoyka
  • @cmccandless
  • @Dog
  • @ikhadykin
  • @kytrinyx
  • @lowks
  • @N-Parsons
  • @pheanex
  • @sjakobi
  • @tqa236
  • @yawpitch

Based on

A variation on FizzBuzz, a famous technical interview question that is intended to weed out potential candidates. That question is itself derived from Fizz Buzz, a popular children's game for teaching division. - https://en.wikipedia.org/wiki/Fizz_buzz