Spring 2015
Evolving Lists & Lights On! Caesar Cipher Looks Good!
encipher(S, n) Rotates the string S by n characters Example:
encipher('AbC', 2) returns 'CdE' encipher('xYz', 4) returns 'bCd'
decipher(S) Retrieve the original string from an
enciphered version (with unknown rotation)
Recursion Rotate character individually
Rules: Lower-case → lower-case Upper-case → upper-case Otherwise → unchanged
Character checking: 'a' <= c <= 'z' 'A' <= c <= 'Z'
Character rotation: using ASCII values
ASCII values
Useful functions: ord('a') returns 97 chr(66) returns 'B' Example: rotate 'b' by 22 characters:chr(ord('b') + 22) returns 'x'
Note: need to take care of wrapping around
A B C … X Y Z
65 66 67 … 88 89 90
a b c … x y z
97 98 99 … 120 121 122
Unknown number of rotation → Test 26 cases and pick out the best
Techniques: English letter appearance probability
(provided!) Scrabble scores (roughly a reverse of
the above) Any other heuristics (i.e. rules of thumb)
Should work well on large strings
Create a list of all possibilities (there are 26)#['Dmc', 'End', 'Foe', ...]
For each possibility, calculate the sum of the probability of the letters#[0.0766, 0.1943, 0.1802, ...]
Return the one with the largest sum (using recursion? using for loop?)
See class web-site for set-up instruction
Goals: Write basic image editing tools At least 3, one from each of the
following:▪ Group 1: negative, gray scale▪ Group 2: vertical flip, horizontal flip, vertical
mirror, horizontal mirror▪ Group 3: scale, blur, random grid
An image is a 2 dimensional list (i.e. list of lists) of pixels
Example:pixels = [[pixel, pixel], [pixel, pixel], [pixel, pixel]]
Note: An image is a list of rows
A row is a list of pixels len(pixels) returns height len(pixels[0]) returns width
A pixel is a tuple of 3 colors red, green, blue
Color value is from 0 to 255 Example:
(255,0,0) is red (100,100,100) is gray (112, 48, 160) is purple
List uses [ ], tuple uses ( ) No difference (for now)
pixels =[[(255,0,0), (0,255,0)], [(0,0,255), (100,100,100)], [ (0,0,0), (112,48,160)]]
The beginningfrom modifyBase import *label = "Brighten" # change thisordinal = 1
Similarity in roles to problem 1: modify(pic) is similar to evolve(L) setNewPixel is similar to setNewElement
In general, modifying setNewPixel is enough, but feel free to do anything else.
Group 1 (individual pixel): Negative: new color value = 255 – original
value Grayscale (values of red, green & blue are
equal) Group 2 (change pixel position):
Flip/Mirror horizontally/vertically Group 3 (using multiple pixels):
Scale Blur: take an average of surrounding pixels Random Grid: Use random.shuffle(L)
Have fun + Good luck