---
# System prepended metadata

title: ACIT 1515 - Final Review
tags: [ACIT-1515]

---

<style>
    .markdown-body h1:first-of-type {
        margin-top: 24px;
    }
    .markdown-body h1 {
        margin-top: 64px;
    }
    .markdown-body h1 + h2 {
        margin-top: 32px;
    }
    .markdown-body h2 {
        margin-top: 48px;
    }
    .markdown-body h2.topics {
        font-size: 1.8em;
        border-bottom: none;
    }
    .markdown-body h3 {
        color: cornflowerblue;
    }
    .markdown-body h4 {
        color: cornflowerblue;
    }
    .markdown-body p strong {
    }
    .exercise {
        font-size: 150%;
        font-weight: bold;
        color: rgb(227,112,183);
    }
    .note {
        color: red;
    }
    ul ul ::marker {
        content: '- ';
    }
</style>

# ACIT 1515 - Final Review

<h2 class="topics">Topics</h2>

- [The Building Blocks of Python](#Review-The-Building-Blocks-of-Python)
- [Problem Solving: Strategies for Writing Programs](Problem-Solving-Strategies-for-Writing-Programs)

### The Building Blocks of Python

#### Variables and Data Types

```python=
name = 'Ed'    # string - any value between quotation marks, immutable
age = 12       # integer
mark = 85.5    # float
courses = []   # empty list - mutable, ordered
x = (1, 2)     # tuple - immutable
y = set()      # empty set - mutable, unordered, unique values only
z = {}         # empty dictionary, contains key/value pairs
dog = {        # dictionary
    "name": "Charlie",
    "age": 12
}

# Get the data type of a value or variable
print(type(10)) # <class 'int'>   
print(type(dog)) # <class 'dict'>
```

#### Basic Operators

```
Arithmetic
+, -, *, /, %, ** 

Assignment
=

Comparison
==, !=, >, <, >=, <=

Logical 
and, or, not
```

#### Loops

```python=
# For loop with range, use when a number or position is required
for i in range(10):
    print(i)
    
for i in range(len(name)):
    print(i, name[i])
    
# For loop with sequence, use when a value is required and position is not
for val in x:
    print(val)    # 1, 2
    
for val in name:
    print(val)    # 'E', 'd'
    
# For loop with dictionary
for k in d.keys():
    print(k) # prints keys
    
for v in d.values():
    print(v) # prints values
    
for k, v in d.items():
    print(k, v) # prints keys and values
    
# While loop
while True:
    # infinite loop until
    break
    
while value > 0:
    print(value)
    value -= 1
```

#### Conditional statements, in operator

```python=
# Comparison
if value > 10:
    print('greater than ten')

# Testing boolean value
if isWeekend:
    print('Relax')
    
# Testing multiple conditions using and/or
if isWeekend and tired:
    print('Relax')
    
if isWeekday or not tired:
    print('Work')
    
# Testing whether value is in a sequence
if 5 in numbers:
    print('The list contains the number 5')
    
# Testing whether value is a set
if 5 in number_set:
    print('The set contains the number 5')
    
# Testing whether key exists in dictionary
if name in student:
    print('Student contains the key "name"')
```

#### Functions

```python=
# Declare a function with no arguments
def f():
    print('Inside the function')
    
# Calling/running/executing/invoking the function
f()

# Declare a function with parameters:
def g(p, q):
    print(p, q)
    
# Calling function and passing arguments:
g(10, 20)

# Define default arguments for function parameters
def h(a, b = 20):
    print(a + b)

# Calling function with default parameter arguments
h(10, 30) # prints 40, a = 10, b = 30
h(10) # prints 30, a = 10, b = 20

# Ending function with the return keyword
def j(a, b):
    if type(a) != type(b):
        return
    print(a + b)
    
# Returning a value from a function using the return keyword
def k(a, b)
    if type(a) != type(b):
        return 
    return a + b

# Using the value returned from a function
result = k(10, 20)
print(result)
```

#### File operations

```python=
# Opening a file for reading
with open('test.txt', 'r') as file:
    # ...
    
# Opening a file for writing
with open('test.txt', 'w') as file:
    # ...
    
# Writing dictionaries/lists to JSON
with open('test.json', 'w') as file:
    json.dump(data, file)
    
# Reading objects/lists from JSON
with open('test.json', 'r') as file:
    data = json.load(file)
```

#### Exceptions

```python=
# Catch any runtime error
try:
    # code that may throw an exception
except:
    # handle the error and prevent the crash
    
# Catch any runtime error and print the interpreter's error message
try:
    # code that may throw an exception
except Exception as e:
    print(e) # prevent crash, print error message
    
# Catching specific error types
try:
    # code that may throw an exception
except ValueError:
    print('ValueError exception occurred')
except (FileNotFoundError, JSONDecodeError):
    print('Valid data not found')
except KeyError as e:
    print('KeyError exception:', e)
```

### Problem Solving: Strategies for Writing Programs

When presented with a new programming challenge:

* **Anticipate**: Take time before coding to try and define the problem for yourself, breaking it down into manageable pieces whenever possible. Ask yourself:
    * What parts are familiar?
    * What are the steps necessary to start and solve the problem?
    * What are the inputs (user input? files? network request?) and outputs
    * Once you think you have the basic idea in mind, challenge your assumptions - does your step-by-step plan cover all the edge cases and errors that may occur?

* **Translate**: Translate your ideas into data structures and programming constructs
    * What variables need to be created?
    * What data types should be used to represent information? Lists, sets, dictionaries?
    * Are functions, loops, or conditional statements required? 

* **Iterate**: Write code, small pieces at a time, testing and debugging often. As you proceed through the program you will naturally encounter problems that you did not anticipate. When that happens, don't be afraid to go back to the first step and start the process again. 