75 lines
2.9 KiB
Markdown
75 lines
2.9 KiB
Markdown
|
# 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"`.
|
||
|
|
||
|
~~~~exercism/note
|
||
|
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][modulo]) operator, which returns the remainder of positive integer division.
|
||
|
It has a method equivalent, `operator.mod()` in the [operator module][operator-mod].
|
||
|
|
||
|
|
||
|
Python also offers additional 'remainder' methods in the [math module][math-module].
|
||
|
[`math.fmod()`][fmod] behaves like `%`, but operates on floats.
|
||
|
[`math.remainder()`][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()`][divmod] will also give a remainder than matches `%` if used with two positive integers, but returns a `tuple` that needs to be unpacked.
|
||
|
|
||
|
[divmod]: https://docs.python.org/3/library/functions.html#divmod
|
||
|
[fmod]: https://docs.python.org/3/library/math.html#math.fmod
|
||
|
[math-module]: https://docs.python.org/3/library/math.html
|
||
|
[modulo]: https://www.programiz.com/python-programming/operators#arithmetic
|
||
|
[operator-mod]: https://docs.python.org/3/library/operator.html#operator.mod
|
||
|
[remainder]: https://docs.python.org/3/library/math.html#math.remainder
|
||
|
|
||
|
## 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
|