0

I am new to programming and python specifically. I want the output to be integers with no decimal

I have tried adding return statements but I am getting a conversion error. Any feedback would be greatly appreciated.

def collatz(number):
    while number != 1:
        if number % 2 == 0:
            number = number / 2
        elif number % 2 != 0:
            number = 3 * number + 1
        print(number)

print('Enter number:')
collatzNumber = input()
collatzNumber = int(collatzNumber)
collatz(collatzNumber)

Results:

Enter number:                 
3
10
5.0
16.0
8.0
4.0
2.0
1.0
Expected: 
3 
10
5
16
8
4
2
1
U13-Forward
  • 69,221
  • 14
  • 89
  • 114
JDH0077
  • 11
  • 3
  • 1
    you can either replace `/` (float division) with `//` (integer division), or (in the function), replace `print(number)` with `print(int(number))` (which will convert the float to an int) – בנימין כהן Aug 18 '19 at 02:05

3 Answers3

0

/ true division operator always returns floats, however using // floor division operator will return an integer.

Full code:

def collatz(number):
    while number != 1:
        if number % 2 == 0:
            number = number // 2
        elif number % 2 != 0:
            number = 3 * number + 1
        print(number)

print('Enter number:')
collatzNumber = input()
collatzNumber = int(collatzNumber)
collatz(collatzNumber)
U13-Forward
  • 69,221
  • 14
  • 89
  • 114
0

Follow the advice of Benjamin Cohen. Either replace / (float division) with // (integer division), or in the function replace print(number) with print(int(number)).

J_H
  • 17,926
  • 4
  • 24
  • 44
0

As others explained, from python 3 / does a true division (in float). Check "Division and Type Conversion" in this link - https://en.wikibooks.org/wiki/Python_Programming/Operators.

To have the floor division use //