1

This algorithm returns values in floating point numbers. Can anybody suggest the changes required to make it return only whole numbers/values?

def zero(f = None): return 0 if not f else f(0)
def one(f = None): return 1 if not f else f(1)
def two(f = None): return 2 if not f else f(2)
def three(f = None): return 3 if not f else f(3)
def four(f = None): return 4 if not f else f(4)
def five(f = None): return 5 if not f else f(5)
def six(f = None): return 6 if not f else f(6)
def seven(f = None): return 7 if not f else f(7)
def eight(f = None): return 8 if not f else f(8)
def nine(f = None): return 9 if not f else f(9)

def plus(y): return lambda x: x+y
def minus(y): return lambda x: x-y
def times(y): return lambda  x: x*y
def divided_by(y): return lambda  x: x/y

An example:

one(divided_by(four())) 

This returns 0.25 but I want it to return 0 without using the floor operator.

Rahul
  • 493
  • 6
  • 27

2 Answers2

1

if you mean for the absolute value is the integer part, you can using the integer division instead of the normal division. Such as suggested in comments by @Daniel you can replace x/y by x//y.

Also, as you have positive numbers, you can use from numpy.fix instead. Hence, it would be numpy.fix(x/y).

OmG
  • 18,337
  • 10
  • 57
  • 90
1

If you cannot use the floor operator, then this should do it:

def integer_division(x, y):
    result = 0
    while x >= y:
        x -= y
        result += 1
    return result


def divided_by(y): return lambda x: integer_division(x, y)

print(divided_by(2)(5), divided_by(2)(4), divided_by(3)(9), divided_by(3)(5), divided_by(3)(7))

Output

2 2 3 1 2

Or recursively:

def integer_division(x, y):
    return 1 + integer_division(x - y, y) if x >= y else 0
Dani Mesejo
  • 61,499
  • 6
  • 49
  • 76