Here are our solutions for the day 18 exercises in the 30 Days of Python series. Make sure you try the exercises yourself before checking out the solutions!

### §1) Import the `fractions`

module and create a `Fraction`

from the float `2.25`

.

First things first, we need to import the `fractions`

module. I'm just going to use a regular import in this case:

`import fractions`

If we look at the documentation for the `fractions`

module, we can see that we can create a `Fraction`

in many different ways.

Right at the top of the relevant documentation we have this signature that describes the various ways we can create a `Fraction`

. There are also a tonne of examples a little further down.

The signature looks like this:

```
fractions.Fraction(numerator=0, denominator=1)
fractions.Fraction(other_fraction)
fractions.Fraction(float)
fractions.Fraction(decimal)
fractions.Fraction(string)
```

As we can see, one of the options is to just pass in a single float value, and `Fraction`

will take care of the rest.

```
import fractions
fraction = fractions.Fraction(2.25)
```

If we print `fraction`

we now get something like this:

`9/4`

### §2) Import only the `fsum`

function from the `math`

module and use it to find the sum of the following series of floats.

`numbers = [1.43, 1.1, 5.32, 87.032, 0.2, 23.4]`

For this exercise we need to do a specific import, so we're going to be using the `from ... import ...`

syntax. In this instance we want to import from the `math`

module, and what we want to import is `fsum`

.

`from math import fsum`

Now that we have the `fsum`

function, we can just pass our list of numbers to it, since `fsum`

, like `sum`

, accepts an iterable.

```
from math import fsum
numbers = [1.43, 1.1, 5.32, 87.032, 0.2, 23.4]
fsum(numbers)
```

You can print the result if you want verify that everything worked. If my math is right, answer should be `118.482`

.

### §3) Import the `random`

module using an alias, and find a random number between `1`

and `100`

using the `randint`

function.

Once again, we can find all the information we need in the documentation. As we can see from the function signature, `randint`

takes in two parameters, `a`

and `b`

, which determine the range of numbers it can choose from.

One very important thing we need to pay attention to is here:

Return a random integer N such that a <= N <= b.

Note that `N`

can be equal to `b`

, so that means the stop value is inclusive, unlike with `range`

.

Now that we know how to use `randint`

, we need to import `random`

using an alias. I'm going to use `rand`

in this case.

`import random as rand`

Now we can call `randint`

using `rand.randint()`

.

```
import random as rand
print(rand.randint(1, 100))
```

### §4) Use the `randint`

function from the exercise above to create a new version of the guessing game we made in day 8. This time the program should generate a random number, and you should tell the user whether their guess was too high, or too low, until they get the right number.

I'm going to cheat a little bit and just copy across the solution I wrote from day 8.

```
target_number = 47
guess = int(input("Enter a number: "))
while guess != target_number
print("Wrong!")
guess = int(input("Enter a number: "))
print("You guessed correctly!")
```

The only real change we need to make here is to change `target_number`

from a static integer to a dynamic value generated by `randint`

.

This is a simple modification that makes the game a great deal more fun!

```
import random as rand
target_number = rand.randint(1, 100)
guess = int(input("Enter a number: "))
while guess != target_number
print("Wrong!")
guess = int(input("Enter a number: "))
print("You guessed correctly!")
```