I recently started to learn Python. On one of the online courses I came across the following problem(see picture)

The actual decomposition fraction is sufficiently detailed and clearly described in Wikipedia (https://ru.wikipedia.org/wiki/Непрерывная_дробь)

I wrote the following program:

While trying to test the example from the job, the required coefficients (7,1,29) are displayed correctly, but the loop becomes infinite and for some reason does not stop, despite the fact that at some point b becomes zero. I, frankly, broke his head in an attempt to understand why this is happening.. maybe someone can explain to me, what am I missing?

I wrote a program using divmod, but, similarly, although the equality of b to zero, the loop continues( and the list of coefficients instead of 29 turns 30..

In General, I would be very grateful if someone will help with advice a beginner)

The actual decomposition fraction is sufficiently detailed and clearly described in Wikipedia (https://ru.wikipedia.org/wiki/Непрерывная_дробь)

I wrote the following program:

```
n=input().split('/')
a=int(n[0])//int(n[1])
b=(int(n[0])/int(n[1]))-a
s=[]
k=0
while b!=0:
s.append(a)
a=1//b
k=1/b-int(a)
b=k
print(*s)
```

While trying to test the example from the job, the required coefficients (7,1,29) are displayed correctly, but the loop becomes infinite and for some reason does not stop, despite the fact that at some point b becomes zero. I, frankly, broke his head in an attempt to understand why this is happening.. maybe someone can explain to me, what am I missing?

I wrote a program using divmod, but, similarly, although the equality of b to zero, the loop continues( and the list of coefficients instead of 29 turns 30..

In General, I would be very grateful if someone will help with advice a beginner)

asked March 19th 20 at 09:01

1 answer

answered on March 19th 20 at 09:03

Do not use float division. Keep a pair (numerator, denominator) to represent the value of the "tail". In the end, you can only do integer division and taking the remainder.

```
num, den = (int(v) for v in input().split('/'))
a, q = divmod(num, den)
t = den #q/t -- tail
res = [a]
while q != 0:
next_t = q
a, q = divmod(t, q)
t = next_t
Res. append(a)
print(res)
```

Find more questions by tags Python

but float division is a dangerous thing, as it turned out.. - joel67 commented on March 19th 20 at 09:06