importrandomimportarray# maximum length of password needed# this can be changed to suit your password lengthMAX_LEN=12# declare arrays of the character that we need in out password# Represented as chars to enable easy string concatenationDIGITS=['0','1','2','3','4','5','6','7','8','9']LOCASE_CHARACTERS=['a','b','c','d','e','f','g','h','i','j','k','m','n','o','p','q','r','s','t','u','v','w','x','y','z']UPCASE_CHARACTERS=['A','B','C','D','E','F','G','H','I','J','K','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']SYMBOLS=['@','#','$','%','=',':','?','.','/','|','~','>','*','(',')','<']# combines all the character arrays above to form one arrayCOMBINED_LIST=DIGITS+UPCASE_CHARACTERS+LOCASE_CHARACTERS+SYMBOLS# randomly select at least one character from each character set aboverand_digit=random.choice(DIGITS)rand_upper=random.choice(UPCASE_CHARACTERS)rand_lower=random.choice(LOCASE_CHARACTERS)rand_symbol=random.choice(SYMBOLS)# combine the character randomly selected above# at this stage, the password contains only 4 characters but# we want a 12-character passwordtemp_pass=rand_digit+rand_upper+rand_lower+rand_symbol# now that we are sure we have at least one character from each# set of characters, we fill the rest of# the password length by selecting randomly from the combined# list of character above.forxinrange(MAX_LEN-4):temp_pass=temp_pass+random.choice(COMBINED_LIST)# convert temporary password into array and shuffle to# prevent it from having a consistent pattern# where the beginning of the password is predictabletemp_pass_list=array.array('u',temp_pass)random.shuffle(temp_pass_list)# traverse the temporary password array and append the chars# to form the passwordpassword=""forxintemp_pass_list:password=password+x# print out passwordprint(password)