# Lab 5
# Your names and email addresses here

import string
import random

# returns a copy of the input string s
# study this copy function and understand why it works!
# Talk to your instructor if you are confused about any of it.
# These are the basis of several later functions
def copy(s):
    t = ""
    for c in s:
        t = t + c
    return t

def copy2(s):
    t = ""
    for i in range(len(s)):
        t = t + s[i]
    return t

def copy3(s):
    t = ""
    i = 0
    while i < len(s):
        t = t + s[i]
        i = i + 1
    return t


# Create a function that takes a single string parameter
# and returns a new string that is 
# the same as the original string except all vowels are
# replaced with a '*' character.
# A grawlix is a word where characters in a profanity have
#   been replaced by non-pronouncable symbols.
#   Comics and cartoons occasionally use grawlixes
# do not use any string functions other than len()
def stars(s):
    return None


# Create a function removePunctuation that takes a single
# string parameter and returns a string containing just
# letters (no spaces, digits, or other special characters). 
# do not use any string functions other than len()
def removePunctuation(s):
    return None


# Create a function reverse that takes a single string parameter 
# and returns a string that contains the orginal string's characters 
# in reverse order.
# don't use a built-in python reverse() function!
def reverse(s):
    return None


# Create a function that takes a single string parameter
# and returns true if all the letters are lowercase
# Hint: use a loop, the in operator, string.ascii_letters,
#       and string.ascii_lowercase
# do not use any string functions other than len()
def allLower(s):
    return None


# Create a function that takes a single string parameter
# and returns true if it contains at least one uppercase letter
# and at least one lowercase letter
# Hint: use a loop, the in operator, string.ascii_letters,
#       string.ascii_lowercase, and string.ascii_uppercase
# do not use any string functions
def hasMixedCase(s):
    return None


# phrase same forward of backward, excluding case,
# whitespace, and punctuation.
# use your removePunctuation() and reverse()
# use python's lower() or upper() methods:
#    t = s.lower()   OR   t = s.upper()
def palindrome(s):
    return None


# Create a function that takes a single string parameter
# and returns true if it might be considered a strong
# password:
#    1. it is at least 8 characters long
#    2. it contains at least one upper and one lower case letter
#    3. it contains at least one digit (string.digits)
#    4. At least one punctuation character (string.punctuation)
def strongPassword(s):
    return None


# Create a function that takes a single string parameter
# and returns a single characters from a
# randomly generated position in the original string.
def randomChar(s):
    return None


# Create a function that takes a single string parameter and
# returns a new string that is 5 characters long with each 
# character in the new string coming from a randomly generated
# position in the original string.
def rand5(s):
    return None


#  returns binary representation of n
#  Use the + operator for strings
#  use //2 and %2
#  6 (ten) = 110 (two)
# don't use the binary() function!
def bits(n):
    return None


# returns the scrabble score of the string, nonletters have value 0
# other letters have the values indicated below
# ignore case
# A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P   Q  R  S  T  U  V  W  X  Y   Z
# 1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10
def scrabbleScore(s):
    return None


# Don't change main
def main():
    print("items of note")
    print(string.ascii_letters)
    print(string.ascii_lowercase)
    print(string.ascii_uppercase)
    print(string.digits)
    print(string.hexdigits)
    print(string.punctuation)
    print()
	
    if True:
        for j in range(20):
            for i in range(40):
                print(random.randrange(10),end=" ")
            print()
    
    print("copy:")
    print(copy("computer")) 
    print("#"+copy("")+"#") 
    print(copy2("2: computer")) 
    print("#"+copy2("")+"#") 
    print(copy3("3: computer")) 
    print("#"+copy3("")+"#") 
   
    print("stars:")
    print(stars("shot")) # sh*t
    print(stars("FORT")) # F*RT
    print(stars("pass")) # p*ss
    print(stars("sequoia")) # s*q****
    print(stars("grawlix")) # gr*wl*x
    print(stars("Why!!!")) # Why!!! - don't change y
   
    print("removePunctuation:") 
    print(removePunctuation("speed of art!")) # speedofart: not at the pool!
    print(removePunctuation("childrens wear!")) # children swear: uh-oh
   
    print("reverse:")
    print(reverse("live")) # evil
    print(reverse("reknits")) # stinker
    print(reverse("desserts")) # stressed
    print(reverse("12345")) # 54321
   
    print("allLower:")
    print(allLower("")) # true
    print(allLower("computer")) # true
    print(allLower("cOmPuTeR")) # false
    print(allLower("Computer")) # false
    print(allLower("computeR")) # false
   
    print("hasMixedCase:")
    print(hasMixedCase("")) # false
    print(hasMixedCase("computer")) # false
    print(hasMixedCase("cOmPuTeR")) # true
    print(hasMixedCase("Computer")) # true
    print(hasMixedCase("computeR")) # true
    print(hasMixedCase("COMPUTER")) # false
    print(hasMixedCase("ABC123")) # false
    print(hasMixedCase("abc123")) # false
    print(hasMixedCase("Albion, MI 49224")) # true
   
    print("palindrome:")
    print(palindrome("bob")) # true
    print(palindrome("dave")) # false
    print(palindrome("A man, a plan, a canal: Panama.")) # true
    print(palindrome("Oozy rat in a sanitary zoo.")) # true
    print(palindrome("computer science")) # false
   
    print("strongPassword:")
    print(strongPassword("hexagon")) # false
    print(strongPassword("Hexagon")) # false
    print(strongPassword("abcd1234")) # false
    print(strongPassword("Abcd1234")) # false
    print(strongPassword("ABC-1234")) # false
    print(strongPassword("ABC-1234")) # false
    print(strongPassword("Triangle123!")) # true
   
    print("randomChar:")
    print(randomChar(string.ascii_lowercase)) # a - maybe
    print(randomChar(string.ascii_uppercase)) # B - maybe
    print(randomChar(string.ascii_letters))   # c - maybe
    print(randomChar(string.ascii_letters))   # D - maybe
    print(randomChar(string.digits)) # 7 - maybe
    print(randomChar("albion")) # n - maybe

    print("rand5:")
    print(rand5(string.ascii_lowercase)) # bkfst - maybe
    print(rand5(string.ascii_uppercase)) # BKFST - maybe
    print(rand5(string.ascii_letters))   # BkFsT - maybe
    print(rand5(string.digits))  # 13579 - maybe
    print(rand5("abcdefghijklmnopqurstuvwxyz")) # lunch - maybe
    print(rand5("abcdefghijklmnopqurstuvwxyz")) # super - maybe
    print(rand5("abcdefghijklmnopqurstuvwxyz")) # snack - maybe
    print(rand5("a")) # aaaaa
   
    print("bits(0) =", bits(0), "should equal", bin(0)[2:]) # 0      
    print("bits(1) =", bits(1), "should equal", bin(1)[2:]) # 1      
    print("bits(2) =", bits(2), "should equal", bin(2)[2:]) # 10   
    print("bits(6) =", bits(6), "should equal", bin(6)[2:]) # 110
    print("bits(10) =", bits(10), "should equal", bin(10)[2:]) # 1010
    print("bits(127) =", bits(127), "should equal", bin(127)[2:]) # 1111111
   
    print("scrabbleScore:")
    print(scrabbleScore("compute")) # 13
    print(scrabbleScore("quiz"))    # 22
    print(scrabbleScore("Pack my box with five dozen liquor jugs.")) # 93

main()



