# Practice Problems

Practice Problems

# Functions over lists

Reminders:

• Some of these might be uses of the accumulator pattern.
• Others might be able to be solved with recursion
• Some can be solved with both techniques

Problems:

• Write a function `isListOfNumeric(numList1)` that returns `True` if the list is a list consisting of only int and float values, or is an empty list, otherwise returns `False`
`````` assert isListOfNumeric([])==True
assert isListOfNumeric(23)==False
assert isListOfNumeric()==True
assert isListOfNumeric([40, 20, -6])==True
assert isListOfNumeric(["42"])==False
assert isListOfNumeric([42,"foo",13])==False
``````
• Write `isListOfString` that returns `True` if the list is a list consisting of only int and float values, or is an empty list, otherwise returns `False`

`````` assert isListOfString([])==True
assert isListOfString(23)==False
assert isListOfString()==False
assert isListOfString(["42"])==True
assert isListOfString(["foo", "42", "bar"])==True
assert isListOfString(["foo",13])==False
``````
• Write a function `runningSum(numlist)` that, for a list of numbers, returns the running sum of that list.
`````` assert runningSum([10,5,10,5,-5,10])==[10,15,25,30,25,35]
assert runningSum([1,2,3,4,5])==[1,3,6,10,15]
``````

For bonus points, throw ValueError if the parameter is not a list, or if any element of the list is not numeric (int or float). (You may use a call to `isListOfNumeric1`)

• Write a function lengthOfEach that takes a list of strings, and returns the length of the each string on the list.
`````` assert lengthOfEach(["UCSB","UCI","Chico State")==[4,3,11]
assert lengthOfEach(["Santa Barbara","Ventura","Oxnard"])==[13,7,6]
``````
• Write a function makeEvenLength that takes a list of strings, and returns that same list of strings, except that any string with odd length has an extra space added to the end to make it have even length

`````` assert makeEvenLength(["UCSB","UCI","Chico State")==["UCSB","UCI ","Chico State "]
assert makeEvenLength(["Santa Barbara","Ventura","Oxnard"])==["Santa Barbara ","Ventura ","Oxnard"]
``````

# Functions over lists of dictionaries

• Write a function that calculates the GPA of a list of courses, where each course is a dictionary with keys `units`, `grade`, `course`. Course is the name of the course (e.g. `"CHEM 1A"`, units is an int representing number of units, and grade is a letter grade, e.g. `A`, `A-`, `B+`, etc.

`````` def test_1():
assert computeGPA( [  {"units": 4, "grade": "A" , "course": "CMPSC 8" },
{"units": 5, "grade": "B+" , "course": "MATH 8" },
{"units": 4, "grade": "A-" , "course": "MATH 6B" } ])  == pytest.approx(3.63846153846)

def test_2():
assert computeGPA( [  {"units": 4, "grade": "A" , "course": "CMPSC 8" },
{"units": 5, "grade": "A" , "course": "MATH 8" },
{"units": 4, "grade": "A" , "course": "MATH 6B" } ] ) == pytest.approx(4.00)

def test_3():
assert computeGPA( [  {"units": 4, "grade": "C" , "course": "CMPSC 8" },
{"units": 5, "grade": "C" , "course": "MATH 8" },
{"units": 4, "grade": "C" , "course": "MATH 6B" } ])  == pytest.approx(2.00)
``````