-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerator.py
81 lines (60 loc) · 2.49 KB
/
generator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import string
import random
def generate_alphabet():
# Generate alphabets from 'a-z and A-Z'
alphabets = string.ascii_letters
return alphabets
def generate_numbers():
# Generate numbers from '0-9'
numbers = string.digits
return numbers
def generate_special_characters():
# Generate special characters "!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
special_characters = string.punctuation
return special_characters
def generate_password(length, include_letters = False, include_numbers = False,
include_symbols = False):
# If user choose to include all 3 option
if include_letters and include_numbers and include_symbols:
number_of_letters = length // 3
number_of_numbers = length // 3
number_of_symbols = length - (number_of_letters + number_of_numbers)
# If user choose to include only alphabets and numbers
elif include_letters and include_numbers:
number_of_letters = length // 2
number_of_numbers = length - number_of_letters
# If user choose to include only alphabets and special characters
elif include_letters and include_symbols:
number_of_letters = length // 2
number_of_symbols = length - number_of_letters
# If user choose to include only numbers and special characters
elif include_numbers and include_symbols:
number_of_numbers = length // 2
number_of_symbols = length - number_of_numbers
# If user choose to include only alphabets
elif include_letters:
number_of_letters = length
# if user choose to include only numbers
elif include_numbers:
number_of_numbers = length
# If user choose to include only special characters
elif include_symbols:
number_of_symbols = length
# Generate an empty list of every option
letters = []
numbers = []
symbols = []
# Add item to list if they are True
if include_letters:
letters += random.choices(generate_alphabet(), k = number_of_letters) # Only generate a specified number of item
if include_numbers:
numbers += random.choices(generate_numbers(), k = number_of_numbers)
if include_symbols:
symbols += random.choices(generate_special_characters(), k = number_of_symbols)
# combine them into a bigger list
password = letters + numbers + symbols
# Shuffle all the items
random.shuffle(password)
# Join all item in the list into a string
password = ''.join(password)
return password