Python
Python → download → How to install Python (optional: VS Code)
| console applications | ||||
|---|---|---|---|---|
| # | console 1 | console 2 | console 3 | console adv |
| input output | iteration while | string manipulation | object oriented programming theory | |
| data types | iteration for | dictionaries | class, instance and method | |
| random numbers | recreate challenge iii | sets | constructor and instance variable | |
| branching if | recreate challenge iv | tuples | class variables | |
| branching if else | iteration nested | exercises E | inheritance | |
| recreate challenge i | exercises B | exercises F | polymorphic override and private | |
| branching and or not | exercises C | functions | ||
| recreate challenge ii | lists | recursion | ||
| nested & branching elif | recreate challenge v | importing separate files | ||
| exercises A | exercises D | files R/W |
roulette
card draw |
|
| mc test i answer sheet |
mc test ii answer sheet |
exceptions | ||
| unsorted | |||
|---|---|---|---|
| # | object-oriented | web scraping | other |
| card deck | installation | trader game | |
| doc types | first scrape | access | |
| variable scope | bs4 functions | unsorted | |
| multiple classes | combining data sources | unsorted | |
| autoteller console | legality of scraping |
spiral hello |
|
| merge (recursive) sort | HTML pages for web scraping |
Careflight data Glass artworks data |
|
| more practise | |||
|---|---|---|---|
| # | challenge or activity | ||
| exam 1 revision sheet | |||
| exam 2 revision sheet | |||
| exam 3 revision sheet | |||
| Coins Challenge | |||
| Dice Challenge | |||
| Multicopier Context | |||
| Bank Context | |||
| Fast Food Context | |||
print("Caesar Cipher")
plain_text = input("Enter plaintext message to encrypt: ")
cipher_text = []
for character in list(plain_text):
#normalise characters for shifting by using a base 26 (0-25) ordinal system:
plain_ordinal = ord(character) - ord("A") if character.isupper() else ord(character) - ord("a")
#shift +3, and wrap using Modulo operator (%) if over length of alphabet (26):
cipher_ordinal = (plain_ordinal + 3) % 26
#return cipher as all uppercase to avoid patterns, as randomness makes for stronger encryption:
cipher_text.append( chr( cipher_ordinal + ord("A") ) )
print("Encrypted ciphertext:", "".join(cipher_text))
key = "A5D75" #Australian Signals Directorate 75th Anniversary
fifty_cent_coin_hex_chars = """
E3B
8287D4
290F723381
4D7A47A291DC
0F71B2806D1A53B
311CC4B97A0E1CC2B9
3B31068593332F10C6A335
2F14D1B27A3514D6F7382F1A
D0B0322955D1B83D3801CDB2
287D05C0B82A311085A03329
1D85A3323855D6BC333119D
6FB7A3C11C4A72E3C17CCB
B33290C85B6343955CCBA3
B3A1CCBB62E341ACBF72
E3255CAA73F2F14D1B27A
341B85A3323855D6BB33
3055C4A53F3C55C7B22
E2A10C0B97A291DC0F
73E3413C3BE392819
D1F73B331185A33
23855CCBA2A3
206D6BE383
1108B""".replace('\n', '').replace('\r', '') #remove new line chars
def extend(key, length): #to extend key to length of encrypted text
return (key * (length//len(key) + 1))[:length]
def decrypt(a, b): #to XOR two hex (base 16) strings of the same length
return "".join(["%x" % (int(x,16) ^ int(y,16)) for (x, y) in zip(a, b)])
keyblock = extend(key, len(fifty_cent_coin_hex_chars))
result = decrypt(fifty_cent_coin_hex_chars, keyblock)
plaintext = bytes.fromhex(result).decode("ASCII")
print(plaintext)