Practice Questions (Solutions)¶
1.¶
Write a Python function that finds the minimum of three numbers. It should take three numbers as input and then return the smallest.
2.¶
In mathematics the factorial of a number is denoted by
For example,
5! = 5 * 4 * 3 * 2 * 1 = 120
10! = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 3628800
Both 1! and 0! are defined to be 1 so those are special cases you can handle. Write a function that takes any integer greater than or equal to 0 as input and then returns the factorial. That is, it multiplies the number by all the numbers before it like the examples above.
SOLUTION¶
def factorial(number):
if number == 0 or number == 1:
return 1
else:
result = 1
for i in range(2, number + 1):
result = result * i
return result
factorial(0)
1
factorial(1)
1
factorial(2)
2
factorial(3)
6
factorial(4)
24
factorial(5)
120
factorial(6)
720
factorial(10)
3628800
3.¶
Create a function called find_twos which takes a list of numbers as input.
The function should return another list of all the indexes/positions
where the number 2 is in the input list. If the number 2 is not
in the input list then the function should return an empty list.
For example:
find_twos([1,3,-19]) should return [].
find_twos([1,2,4]) should return [1].
find_twos([2,2,2]) should return [0,1,2].
find_twos([1,6,8,2,9,0,5,2]) should return [3,7].
You should use the enumerate function.
SOLUTION¶
def find_two(numbers):
result = []
if 2 not in numbers:
return result
else:
for i, num in enumerate(numbers):
if num == 2:
result.append(i)
return result
find_two([])
[]
find_two([1,3,5,20])
[]
find_two([2])
[0]
find_two([2,2,2,2])
[0, 1, 2, 3]
find_two([1,6,8,2,9,0,5,2])
[3, 7]
4.¶
Define a function, sum_and_round, which takes a list of floats as input and adds all the numbers together and returns the result rounded with 2 decimal places.
Use the built in functions sum and round. For example:
sum_and_round([1.2353, 7.532, 7.532, 8.9, 9.654]) should return 34.85
SOLUTION¶
def sum_and_round(numbers):
result = sum(numbers)
result_rounded = round(result, 2)
return result_rounded
sum_and_round([1.2353, 7.532, 7.532, 8.9, 9.654])
34.85
Or you could do it in one line:
def sum_and_round(numbers):
return round(sum(numbers), 2)
sum_and_round([1.2353, 7.532, 7.532, 8.9, 9.654])
34.85
5.¶
Consider the function
def do_stuff(a, b, c):
return a * b * c - a - c + b
a) Call the function using only positional arguments.
b) Call the function using only keyword arguments.
c) Call the function using a mix of positional and keyword arguments.
d) Redefine the function and give default argument for a,b,c. Then call the function
without providing any arguments so that the default arguments are used.
SOLUTION¶
# a)
do_stuff(1, 2, 3)
4
# b)
print(do_stuff(a=1, b=2, c=3))
print(do_stuff(c=3, a=1, b=2))
4
4
# c)
print(do_stuff(1, 2, c=3))
print(do_stuff(1, b=2, c=3))
4
4
# d)
def do_stuff(a=1, b=2, c=3):
return a * b * c - a - c + b
do_stuff()
4
6.¶
Consider the following code.
x = 5
def my_func(a=1):
x = 19
return a + x
If you were to run the above code and then use print(x) what would be the value printed?
SOLUTION¶
The value of x would still be 5 outside the function. For example
we can run the code and check:
x = 5
def my_func(a=1):
x = 19
return a + x
my_func(a=20)
print(x)
5
7.¶
Write a function get_seconds that takes two arguments hours and minutes and converts
them both to seconds and adds the result and returns it. For example,
get_seconds(hours=1,minutes=0) should return 3600
get_seconds(hours=0,minutes=1) should return 60
get_seconds(hours=0,minutes=0) should return 0
get_seconds(hours=10,minutes=48) should return 38880
get_seconds() should return 0 so be sure to use default arguments to achieve this.
SOLUTION¶
def get_seconds(hours=0, minutes=0):
return hours * 60 * 60 + minutes * 60
get_seconds(hours=1,minutes=0)
3600
get_seconds(hours=0,minutes=1)
60
get_seconds(hours=10,minutes=48)
38880
get_seconds()
0