In: Computer Science
python3
(3a) Write a function, frequent, with one parameter, psw, a
string. If psw is in a list of
frequently used passwords ['password', '12345', 'qwerty',
'letmein', 'trustno1',
'000000', 'passw0rd'], frequent should return False; otherwise,
return True. Be sure
to include at least three good test cases in the docstring.
(3b) Password Protection SecuriCorp has recently been the victim of
a number of
security breaches. Internal analysis has determined that employees
use simple
passwords that are too easy to guess. You have been hired to write
a password
checking program. This program should contain a function
passwordChecker which
takes a password and returns one of the following security
regulation codes:
Ø Passwords must be at least 5 characters long
Ø Passwords must contain at least one upper case letter
Ø Passwords must contain at least two numbers
Ø Passwords may not contain the characters "E" or "e"
Ø Passwords must include at least one non-alphanumeric
character.
Ø A password may not be a frequently used password: 'password',
'12345',
'qwerty', 'letmein', 'trustno1', '000000', 'passw0rd'
Consultants suggest writing a separate function to test a password
against each of
these conditions.
These functions could then
be called from the passwordChecker function. However,
implementation details are
left to you.
reference code:
# problem 1
# problem 1a
def checklen(astring, le):
'''
(str) -> Boolean
Returns True if length of astring is at
least le characters long, else False
>>> checklen('', 1)
False
>>> checklen('four', 5)
False
>>> checklen('check', 5)
True
>>> checklen('check6', 6)
True
'''
return len(astring) >= le
# problem 1b
# empty string needs to be treated
# as a separate condition
def is_nonalnum(astring):
'''
(str) -> Boolean
Returns True if astring contains at
least one non-alphanumeric character;
returns False otherwise.
>>> is_nonalnum('')
False
>>> is_nonalnum('abc123')
False
>>> is_nonalnum('#123')
True
'''
if len(astring) == 0:
return False
else:
return not(astring.isalnum())
# problem 1c
# if vs. elif - either is ok here
# return True must be outside of for-block!
def is_noEe(astring):
'''
(str) -> Boolean
Returns True if astring does NOT
contain characters 'E' or 'e';
returns False otherwise.
>>> is_noEe('')
True
>>> is_noEe('e')
False
>>> is_noEe('CHEM 101')
False
>>> is_noEe('abcd')
True
'''
if 'E' in astring:
return False
elif 'e' in astring:
return False
else:
return True
# prolbe 1c
# different algorithm/same solution
"""
def is_noEe(astring):
'''
(str) -> Boolean
Returns True if astring does NOT
contain characters 'E' or 'e';
returns False otherwise.
>>> is_noEe('')
True
>>> is_noEe('e')
False
>>> is_noEe('CHEM 101')
False
>>> is_noEe('abcd')
True
'''
lowere = 'e' in astring
uppere = 'E' in astring
return not(lowere or uppere)
"""
# problem 1d
def is_uc_alpha(astring):
'''
(str) -> Boolean
return True if any char in s is an
uppercase letter, otherwise return False
>>> is_uc_alpha('CIS122')
True
>>> is_uc_alpha('Ducks')
True
>>> is_uc_alpha('testing')
False
'''
for c in astring:
if c.isupper():
return True
return False
# problem 1e
def is_2numbers(astring):
'''
(str) -> Boolean
returns True if astring has at least two numbers,
otherwise return False
>>> is_2numbers('CIS122')
True
>>> is_2numbers('Ducks')
False
>>> is_2numbers('ABC-1')
False
'''
digits_ctr = 0
for c in astring:
if c.isdigit():
digits_ctr += 1
return digits_ctr >= 2
# problme 1f
def is_special_char(astring):
'''
(str) -> Boolean
returns True if string contains a
special character:!, @, #, $, %, ^, &
otherwise returns False
>>> is_special_char('CIS122')
False
>>> is_special_char('CIS-122')
False
>>> is_special_char('CIS122!')
True
'''
special = '!@#$%^&'
for c in astring:
if c in special:
return True
return False
doctest.testmod()
Write the code (passwordChecker function and auxiliary
functions) and execute it for
a sufficient number of test cases that SecuriCorp will be confident
of their
passwords.
Please give the thumbs up, if it is helpful for you!!. Let me know if you have any doubts.
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 7 01:32:35 2018
@author:
"""
def checklen(astring, le):
'''
(str) -> Boolean
Returns True if length of astring is at least le characters long,
else False
'''
return len(astring) >= le
def is_nonalnum(astring):
'''
(str) -> Boolean
Returns True if astring contains at least one non-alphanumeric
character;
returns False otherwise.
'''
if len(astring) == 0:
return False
else:
return not(astring.isalnum())
def is_noEe(astring):
'''
(str) -> Boolean
Returns True if astring does NOT contain characters 'E' or
'e';
returns False otherwise.'''
lowere = 'e' in astring
uppere = 'E' in astring
return not(lowere or uppere)
def is_uc_alpha(astring):
'''
(str) -> Boolean
return True if any char in s is an uppercase letter,
otherwise return False'''
for c in astring:
if c.isupper():
return True
return False
def is_2numbers(astring):
'''
(str) -> Boolean
returns True if astring has at least two numbers, otherwise return
False
'''
digits_ctr = 0
for c in astring:
if c.isdigit():
digits_ctr += 1
return digits_ctr >= 2
def is_special_char(astring):
'''
(str) -> Boolean
returns True if string contains a special character:!, @, #, $, %,
^, &
otherwise returns False'''
special = '!@#$%^&'
for c in astring:
if c in special:
return True
return False
def frequent(psw):
'''
(str) -> Boolean
returns True if string psw contain in the list
['password', '12345', 'qwerty', 'letmein', 'trustno1','000000',
'passw0rd']
otherwise returns False'''
lst=['password', '12345', 'qwerty', 'letmein', 'trustno1','000000',
'passw0rd']
if psw in lst:
return False
else:
return True
def passwordChecker(string):
pass1=checklen(string,5)
pass2=is_nonalnum(string)
pass3=is_noEe(string)
pass4=is_uc_alpha(string)
pass5=is_2numbers(string)
pass6=is_special_char(string)
pass7=frequent(string)
if pass1==False:
return ("Password must be at least 5 characters long")
if pass2==False:
return ("Passwords must include at least one non-alphanumeric
character.")
if pass3==False:
return ("Passwords may not contain the characters E or e")
if pass4==False:
return ("Passwords must contain at least one upper case
letter")
if pass5==False:
return ("Passwords must contain at least two numbers")
if pass6==False:
return ("password must contains at least special character from
[!@#$%^&]")
if pass7==False:
return ('''A password may not be a frequently used password:
'password', '12345',
'qwerty', 'letmein', 'trustno1', '000000', 'passw0rd''')
if pass1==True and pass2==True and pass3==True and pass4==True and
pass5==True \
and pass6==True and pass7==True:
return ("\npassword meets the criteria.!!")
else:
return ("\npassword meets the criteria.!!")
def main():
string=input('Enter the password: ')
res=passwordChecker(string)
print(res)
main()
Output: