- Make sure you have Python 3 installed (I will be using Python 3.9.6)
- Windows can install it here
- Mac I suggest using Homebrew
- Ensure you have a SQL (Mysql or MSSQL) database running
- There is a MSSQL Docker container here for ease
-
What is Python?
- Syntax
- Modules
- Comments
- Best practice
-
Variables
- Cannot start with a number
- Case-sensitive
- Generally lowercase with underscores
-
User input
data = input("Message to prompt user")
-
Data Types
- Simple:
str
,int
,float
,bool
,None
- Concatenating
- Casting
- Simple:
Write a script that asks the user for their name and age as 2 separate questions.
Then print the following string with the correct data:
{name} will be {age} years old next year
-
Complex:
list
,tuple
,dict
,set
- List
names = ['mike', 'charlie', 'ash']
- Tuple
names = ('mike', 'charlie', 'ash')
- Set: can make immutable with
frozenset()
names = {'mike', 'charlie', 'ash'}
- Dictionary
person = {"name": "Mike", "age": 28, "location": "Bath"}
- List
-
Working with array types
- 1. Output the first and last name of each person in this data, each person on a different line:
people = [{"firstname": "Mike", "lastname": "Oram"}, {"firstname": "Sarah", "lastname": "Jackson"}]
- 2. Add 7000 after 6000 is the following data:
data = [10, 20, [300, 400, [5000, 6000], 500], 30, 40]
- 3. Replace the first occurance of the number 20 with the number 200 from the below list:
data = [5, 10, 15, 20, 25, 50, 20]
- 4. Take the odd index items from list1 and the even index items from list2 and put them into a new list
list1 = [3, 6, 9, 12, 15, 18, 21]
list2 = [4, 8, 12, 16, 20, 24, 28]
- 5. Stretch goal: add the list ["h", "i", "j"] after the "g" in the sub list of the following data:
list1 = ["a", "b", ["c", ["d", "e", ["f", "g"], "k"], "l"], "m", "n"]
-
Operators
- Math:
+ - * / % ** //
- Assignment:
= += -= *= /=
- Comparison:
== != > < >= <= in
- Logical:
and, or, not
- Math:
-
Conditionals
- if
- elif
- if ... else
- Shorthand/ternary
Fence Calculator - Posts and Railings
Create a script that can:
1) Calculate how many posts and railings are needed to build a fence of a certain length
2) Calculate the maximum length fence that can be created with any amount of posts and railings
Fences must meet the following spec:
A fence must consist of atleast 2 posts and 1 railing
Every railing must have a post before and after it
Posts cannot be place next to each other
Posts are 0.1m wide
Railings are 1.5m wide
When given a length, the calculator must create a fence that spans atleast that length
Stretch goals:
Display how many spare posts/railings there are when calculating the fence length
Display the overshoot when calculating how many posts and railings are needed for a fence length
- Loops
- while
- for
- break
- continue
- else
Write a short program that prints each number from 1 to 100 on a new line.
For each multiple of 3, print "Fizz" instead of the number.
For each multiple of 5, print "Buzz" instead of the number.
For numbers which are multiples of both 3 and 5, print "FizzBuzz" instead of the number.
-
Functions
- What are they for?
- Syntax
- PEP8
- Args/Params
- return
- Lambda
- Scope
- Type Hinting
-
Modules
- What are they?
- importing
- aliasing
- importing parts of a module
Create a function in a module that can take an unlimited amount of numbers
and return the sum of those numbers, excluding negative numbers and numbers
over 100.
# Output the names of the adults (18 and over) in age order (ASC):
people = [
{"name": "Mike", "age": 28},
{"name": "Jenny", "age": 12},
{"name": "Sarah", "age": 21},
{"name": "Robert", "age": 6},
{"name": "Felix", "age": 41}
]
-
Package manager: PIP
- What is a package manager?
- How to find packages
- How to pick packages
-
Working with files
- Opening files
- Reading data
- Writing data
- Closing files
- Working with CSVs
-
MSSQL
- Connecting -
pyodbc
- Cursor
- Running queries
- fetchall
- fetchone
- Prepared statements
- Running mulitple queries
- Connecting -
Use this database
Create a module with the following functions:
- get_people_by_company
- get_person_by_id
Each function should query the database using the function parameter, and return the data
Use your functions to find:
- All the people who work for Babbleblab
- The person with id 65
- OO Python
- What is OO?
- What is a class?
- Syntax
Additional reading:
Additional Exercise:
Blackjack
Write a blackjack like game. The game will randomly "draw" 4 cards, assign 2 to the player and 2 to the dealer.
Calculate the score the player and the dealer got, the higher score wins, unless the score is over 21 in which
case they "go bust" and the other player wins. If the scores are equal, it is a draw and neither player wins.
- Number cards are worth their numerical value
- Jack, Queen and King are worth 10
- Ace is worth 11
You must output the cards drawn by each player.
No card can be drawn more than once.
Stretch goal:
If the players score is under 14, ask them if they would like to draw another card.
If they do, add the card value to their score.
Allow the player to continue drawing cards until their score is 21 or they go bust.