I've optimised the code by using the string module to provide the letters, numbers, and symbols for the project. In addition, using lists are redundant as we can just use strings.
Ensures at least half of the password is letters by adding the ceiling amount of letters initially, then generating the rest via length minus ceiling of half of length. The whole password is the shuffled to ensure randomness.
Fixes #3