<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Answer the following questions in Python by defining a function. Ensure you have a docstring and that your function succeeds on the example use.
Create a function which takes two arguments
Step1:  Create a function which sums the numbers between its first (inclusive) and second argument (exclusive). For example, if you pass in 3 and 6, it should return 12 (3+4+5). Your function should return None if the given arguments are not integers. Your function must be called int_sum to receive credit.
Step2:  Create a function which takes in two arguments
<ASSISTANT_TASK:>
Python Code:
#The points awarded this cell corresopnd to partial credit and/or documentation
### BEGIN SOLUTION
def power(x, p=2):
    '''Computes x^p
    
    Args:
        x: input number
        p: input power, defaults to 2
        
    returns: x^p as a floating point
    '''
    return x**p
### END SOLUTION
'''Check if your function returns the correct values'''
from numpy import testing as t
t.assert_almost_equal( power(3,2), 9 )
### BEGIN HIDDEN TESTS
import numpy as np
test_x = np.array([-2, -1.5, 0, 4])
test_p = np.array([-3, 2, 4, 1])
t.assert_almost_equal( power(test_x, test_p), test_x ** test_p)
t.assert_almost_equal( power(3), 3**2)
### END HIDDEN TESTS
Explanation: Answer the following questions in Python by defining a function. Ensure you have a docstring and that your function succeeds on the example use.
Create a function which takes two arguments: x and p, where p defaults to 2. It should return $x\,^p$. Your function must be named power to receive credit. For this problem, do not consider invalid use of your function (i.e., what happens if x is a string).
End of explanation
#The points awarded this cell corresopnd to partial credit and/or documentation
### BEGIN SOLUTION
def int_sum(x, y):
    '''Computes sum from x to y (excluding y)
    
    Args:
        x: start of sum
        p: end of sum
        
    returns: the sum as an integer
    '''
    if type(x) != type(1) or type(y) != type(1):
        return None
    s = 0
    for i in range(x, y):
        s += i
    return s
### END SOLUTION
'''check that it returns correct answer'''
from numpy import testing as t
t.assert_equal( int_sum(3,6), 12)
### BEGIN HIDDEN TESTS
t.assert_equal( int_sum(-2, 7), sum(range(-2, 7)))
t.assert_equal( int_sum(0, 5), sum(range(0, 5)))
### END HIDDEN TESTS
'''check that it deals with invalid input correctly'''
from numpy import testing as t
t.assert_equal( int_sum(4.4, 4.6), None)
### BEGIN HIDDEN TESTS
t.assert_equal( int_sum('test', 4), None)
t.assert_equal( int_sum(3, 'test'), None)
t.assert_array_equal( int_sum(5,4), 0)
### END HIDDEN TESTS
Explanation: Create a function which sums the numbers between its first (inclusive) and second argument (exclusive). For example, if you pass in 3 and 6, it should return 12 (3+4+5). Your function should return None if the given arguments are not integers. Your function must be called int_sum to receive credit.
End of explanation
#The points awarded this cell corresopnd to partial credit and/or documentation
### BEGIN SOLUTION
def pprint(x, i):
    '''Prints x to the given precision indicated by i
    
    Args:
        x: the number to print
        i: the integer precision
        
    returns: a string
    '''
    if( not (type(x) == float or type(x) == int)):
        return None
    if(type(i) != int or i <= 0):
        return None
    
    return '{:.{}}'.format(x, i)
### END SOLUTION
'''check answer is correct'''
from numpy import testing as t
t.assert_equal( pprint(4.3212, 2), '4.3')
### BEGIN HIDDEN TESTS
t.assert_equal( pprint(-4.3212, 2), '-4.3')
t.assert_equal( pprint(5.45676, 3), '5.46')
t.assert_equal( pprint(11.2, 1), '1e+01')
### END HIDDEN TESTS
'''check that your function correctly deals with invalid input'''
from numpy import testing as t
t.assert_equal( pprint('not a number', 4), None)
### BEGIN HIDDEN TESTS
t.assert_equal( pprint(-4.3212, -2), None)
t.assert_equal( pprint(5.45676, 'b'), None)
t.assert_equal( pprint(55, 4.12), None)
t.assert_equal( pprint(55, 0), None)
### END HIDDEN TESTS
Explanation: Create a function which takes in two arguments: a floating point number and an integer representing precision. It should return a string that prints the number to the given precision or None if any of the arguments are invalid. Your function must be called pprint to receive credit.
End of explanation
<END_TASK>