Chapter 10: Creating and Modifying Text Text Text is the universal medium We can convert any other media to a text representation. We can convert between media formats using text. Text is simple. Like sound, text is usually processed in an arraya long line of characters We refer to one of these long line of characters as strings. In many (especially older) programming languages, text
is actually manipulated as arrays of characters. Its horrible! Python actually knows how to deal with strings. Strings Strings are defined with quote marks. Python actually supports three kinds of quotes: >>> print this is a >>> print this is a >>> print this is a
'this is a string' string "this is a string" string """this is a string""" string Use the right one that allows you to embed quote marks you want >>> aSingleQuote = " ' >>> print aSingleQuote '
" Why would you want to use triple quotes? To have long quotations with returns and such inside them. >>> print aLongString() This is a long string >>> def aLongString():
return """This is a long string""" Encodings for strings Strings are just arrays of characters In most cases, characters are just single bytes. The ASCII encoding standard maps between single byte values and the corresponding characters More recently, characters are two bytes. Unicode uses two bytes per characters so that
there are encodings for glyphs (characters) of other languages Java uses Unicode. The version of Python we are using is based in Java, so our strings are actually using Unicode. ASCII encoding through ord() >>> str = "Hello" >>> for char in str: ... print ord(char) ... 72 101 108 108 111
There are more characters than we can type Our keyboards dont have all the characters available to us, and its hard to type others into strings. Backspace? Return? ? We use backslash escapes to get other characters in to strings Backslash escapes
\b is backspace \n is a newline (pressing the Enter key) \t is a tab \uXXXX is a Unicode character, where XXXX is a code and each X can be 0-9 or A-F. http://www.unicode.org/charts/ Must precede the string with u for Unicode to work Testing strings >>> print "hello\tthere\ nMark"
hello there Mark >>> print u"\uFEED" >>> print u"\u03F0" >>> print "This\bis\na\ btest" Thisis atest Manipulating strings We can add strings and get their lengths using the kinds of programming features
seen previously. >>> hello weve = "Hello" >>> print len(hello) 5 >>> mark = ", Mark" >>> print len(mark) 6 >>> print hello+mark Hello, Mark >>> print len(hello+mark) 11 Getting parts of strings We use the square bracket 
notation to get parts of strings. string[n] gives you the nth character in the string string[n:m] gives you the nth up to (but not including) the mth character. Getting parts of strings >>> hello = "Hello" >>> print hello e >>> print hello H >>> print hello[2:4] ll
H e l l o 0 1 2
3 4 Start and end assumed if not there >>> print hello Hello >>> print hello[:3] Hel >>> print hello[3:] lo >>> print hello[:] Hello Dot notation
All data in Python are actually objects Objects not only store data, but they respond to special functions that only objects of the same type understand. We call these special functions methods Methods are functions known only to certain objects To execute a method, you use dot notation Object.method()
Capitalize is a method known only to strings >>> test="this is a test." >>> print test.capitalize() This is a test. >>> print capitalize(test) A local or global name could not be found. NameError: capitalize >>> print 'this is another test'.capitalize() This is another test >>> print 12.capitalize() A syntax error is contained in the code -- I can't read it as Python. Useful string methods startswith(prefix) returns true if the
string starts with the given suffix endswith(suffix) returns true if the string ends with the given suffix find(findstring) and find(findstring,start) and find(findstring,start,end) finds the findstring in the object string and returns the index number where the string starts. You can tell it what index number to start from, and even where to stop looking. It returns -1 if it fails. There is also rfind(findstring) (and variations) that searches from the end of the string toward the front. Demonstrating startswith
>>> letter = "Mr. Mark Guzdial requests the pleasure of your company..." >>> print letter.startswith("Mr.") Remember 1 that Python >>> print letter.startswith("Mrs.") sees 0 as 0 false and anything else (including 1) as true
Demonstrating endswith >>> filename="barbara.jpg" >>> if filename.endswith(".jpg"): ... print "It's a picture" ... It's a picture Demonstrating find >>> print letter Mr. Mark Guzdial requests the pleasure of your company... >>> print letter.find("Mark") 4
>>> print letter.find("Guzdial") 9 >>> print len("Guzdial") 7 >>> print letter[4:9+7] Mark Guzdial >>> print letter.find("fred") -1 Interesting string methods upper() translates the string to uppercase lower() translates the string to lowercase swapcase() makes all upper->lower and vice versa title() makes just the first characters
uppercase and the rest lower. isalpha() returns true if the string is not empty and all letters isdigit() returns true if the string is not empty and all numbers Replace method >>> print letter Mr. Mark Guzdial requests the pleasure of your company... >>> letter.replace("a","!") 'Mr. M!rk Guzdi!l requests the ple!sure of your comp!ny...' >>> print letter Mr. Mark Guzdial requests the pleasure of your company...
Strings are sequences >>> for i in "Hello": ... print i ... H e l l o Lists Weve seen lists beforethats what range() returns.
Lists are very powerful structures. Lists can contain strings, numbers, even other lists. They work very much like strings You get pieces out with  You can add lists together You can use for loops on them We can use them to process a variety of kinds of data. Demonstrating lists >>> mylist = ["This","is","a", 12]
>>> print mylist ['This', 'is', 'a', 12] >>> print mylist This >>> for i in mylist: ... print i ... This is a 12 >>> print mylist + ["Really!"] ['This', 'is', 'a', 12, 'Really!'] Useful methods to use with lists:
But these dont work with strings append(something) puts something in the list at the end. remove(something) removes something from the list, if its there. sort() puts the list in alphabetical order reverse() reverses the list count(something) tells you the number of times that something is in the list. max() and min() are functions (weve seen them before) that take a list as input and give you the maximum and minimum value in the list.
Converting from strings to lists >>> print letter.split(" ") ['Mr.', 'Mark', 'Guzdial', 'requests', 'the', 'pleasure', 'of', 'your', 'company...'] Extended Split Example def phonebook(): def findPhone(person): return """ for people in phones(): Mary:893-0234:Realtor: if people == person: Fred:897-2033:Boulder crusher: print "Phone number for",person,"is",people
Barney:234-2342:Professional bowler:""" def phones(): phones = phonebook() phonelist = phones.split('\n') newphonelist =  for list in phonelist: newphonelist = newphonelist + [list.split(":")] return newphonelist Running the Phonebook >>> print phonebook() Mary:893-0234:Realtor: Fred:897-2033:Boulder crusher: Barney:234-2342:Professional bowler: >>> print phones()
[[''], ['Mary', '893-0234', 'Realtor', ''], ['Fred', '897-2033', 'Boulder crusher', ''], ['Barney', '234-2342', 'Professional bowler', '']] >>> findPhone('Fred') Phone number for Fred is 897-2033 Strings have no font Strings are only the characters of text displayed WYSIWYG (What You See is What You Get) WYSIWYG text includes fonts and styles The font is the characteristic look of
the letters in all sizes The style is typically the boldface, italics, underline, and other effects applied to the font In printers terms, each style is its own font Encoding font information Font and style information is often encoded as style runs A separate representation from the string
Indicates bold, italics, or whatever style modification; start character; and end character. The old brown fox runs. Could be encoded as: "The old brown fox runs." [[bold 0 6] [italics 5 12]] How do we encode all that? Is it a single value? Not really. Do we encode it all in a complex list? We could. How do most text systems handle this? As objects
Objects have data, maybe in many parts. Objects know how to act upon their data. Objects methods may be known only to that object, or may be known by many objects, but each object performs that method differently. What can we do with all this? Answer: Just about anything! Strings and lists are about as powerful as one gets in Python By powerful, we mean that we can do a lot of different
kinds of computation with them. Examples: Pull up a Web page and grab information out of it, from within a function. Find a nucleotide sequence in a string and print its name. Manipulate functions source But first, we have to learn how to manipulate files Files: Places to put strings and other stuff Files are these named large collections of bytes.
Files typically have a base name and a suffix barbara.jpg has a base name of barbara and a suffix of .jpg Files exist in directories (sometimes called folders) Tells us that the file 640x480.jpg is in the folder mediasources in Directories Directories can contain files or other directories. There is a base directory on your
computer, sometimes called the root directory A complete description of what directories to visit to get to your file is called a path We call this structure a tree C:\ is the root of the tree. It has branches, each of which is a directory Any directory (branch) can contain more
directories (branches) and files (leaves) C:\ Documents and Settings Mark Guzdial mediasource s 640x480.j pg
Windows cs1315 Why do I care about all this? If youre going to process files, you need to know where they are (directories) and how to specify them (paths). If youre going to do movie processing, which involves lots of files, you need to be able to write programs that process all the files in a directory (or even several directories) without having to write down each and every name of the
files. Using lists to represent trees >>> tree = [["Leaf1","Leaf2"], [["Leaf3"], ["Leaf4"],"Leaf5"]] >>> print tree [['Leaf1', 'Leaf2'], [['Leaf3'], ['Leaf4'], 'Leaf5']] >>> print tree Leaf5 ['Leaf1', 'Leaf2'] >>> print tree Leaf1 [['Leaf3'], ['Leaf4'],
Leaf3 'Leaf5'] Leaf4 Leaf2 >>> print tree ['Leaf3'] >>> print tree The Point: Lists ['Leaf4'] >>> print tree allow us to represent Leaf5 complex How to open a file
For reading or writing a file (getting characters out or putting characters in), you need to use open open(filename,how) opens the filename. If you dont provide a full path, the filename is assumed to be in the same directory as JES. how is a two character string that says what you want to do with the string. rt means read text wt means write text rb and wb means read or write bytes
We wont do much of that Methods on files: Open returns a file object open() returns a file object that you use to manipulate the file Example: file=open(myfile,wt) file.read() reads the whole file as a single string. file.readlines() reads the whole file into a list where each element is one line.
read() and readlines() can only be used once without closing and reopening the file. file.write(something) writes something to the file file.close() closes the filewrites it out to the disk, and wont let you do any more to it without re-opening it. Reading a file >>> program=pickAFile() >>> print program C:\Documents and Settings\Mark Guzdial\My Documents\pyprograms\littlepicture.py >>> file=open(program,"rt")
>>> contents=file.read() >>> print contents def littlepicture(): canvas=makePicture(getMediaPath("640x480.jpg")) addText(canvas,10,50,"This is not a picture") addLine(canvas,10,20,300,50) addRectFilled(canvas,0,200,300,500,yellow) addRect(canvas,10,210,290,490) return canvas >>> file.close() Reading a file by lines >>> file=open(program,"rt") >>> lines=file.readlines() >>> print lines ['def littlepicture():\n', '
canvas=makePicture(getMediaPath("640x480. jpg"))\n', ' addText(canvas,10,50,"This is not a picture")\n', ' addLine(canvas,10,20,300,50)\n', ' addRectFilled(canvas,0,200,300,500,yellow )\n', ' addRect(canvas,10,210,290,490)\ n', ' return canvas'] >>> file.close() Silly example of writing a file >>> writefile = open("myfile.txt","wt") Notice the >>> writefile.write("Here is some text.") \n to make >>> writefile.write("Here is some more.\n") new lines >>> writefile.write("And now we're done.\n\ nTHE END.")
>>> writefile.close() >>> writefile=open("myfile.txt","rt") >>> print writefile.read() Here is some text.Here is some more. And now we're done. THE END. >>> writefile.close() How you get spam def formLetter(gender ,lastName ,city ,eyeColor ): file = open("formLetter.txt","wt") file.write("Dear ") if gender =="F": file.write("Ms. "+lastName+":\n") if gender =="M": file.write("Mr. "+lastName+":\n")
file.write("I am writing to remind you of the offer ") file.write("that we sent to you last week. Everyone in ") file.write(city+" knows what an exceptional offer this is!") file.write("(Especially those with lovely eyes of"+eyeColor+"!)") file.write("We hope to hear from you soon .\n") file.write("Sincerely ,\n") file.write("I.M. Acrook , Attorney at Law") file.close () Trying out our spam generator >>> formLetter("M","Guzdial","Decatur","brown")
r Mr. Guzdial: m writing to remind you of the offer that we t to you last week. Everyone in Decatur knows what exceptional offer this is!(Especially those with ely eyes of brown!)We hope to hear from you soon. cerely, . Acrook, orney at Law Only use this power for good! Writing a program to write programs First, a function that will automatically change the text string that the program littlepicture draws
As input, well take a new filename and a new string. Well find() the addText, then look for the first double quote, and then the final double quote. Then well write out the program as a new string to a new file. Changing the little program automatically def changeLittle(filename,newstring): # Get the original file contents programfile=r"C:\Documents and Settings\Mark Guzdial\My Documents\py-programs\littlepicture.py" file = open(programfile,"rt") contents = file.read() file.close()
# Now, find the right place to put our new string addtext = contents.find("addText") firstquote = contents.find('"',addtext) #Double quote after addText endquote = contents.find('"',firstquote+1) #Double quote after firstquote # Make our new file newfile = open(filename,"wt") newfile.write(contents[:firstquote+1]) # Include the quote newfile.write(newstring) newfile.write(contents[endquote:]) newfile.close() changeLittle("sample.py","Here is a sample of changing a program") Original:
def littlepicture(): canvas=makePicture(getMediaP ath("640x480.jpg")) addText(canvas,10,50,"This is not a picture") addLine(canvas,10,20,300,50) addRectFilled(canvas,0,200,3 00,500,yellow) addRect(canvas,10,210,290,49 0) return canvas Modified: def littlepicture(): canvas=makePicture(getMediaP ath("640x480.jpg"))
addText(canvas,10,50,"Here is a sample of changing a program") addLine(canvas,10,20,300,50) addRectFilled(canvas,0,200,3 00,500,yellow) addRect(canvas,10,210,290,49 0) return canvas Thats how vector-based drawing programs work! Editing a line in AutoCAD doesnt change the pixels. It changes the underlying
representation of what the line should look like. It then runs the representation and creates the pixels all over again. Is that slower? Who cares? (Refer to Moores Law) Finding data on the Internet The Internet is filled with wonderful data, and almost all of it is in text! Later, well write functions that directly grab files from the Internet, turn them into strings, and pull
information out of them. For now, lets assume that the files are on your disk, and lets process them from there. Many Eyes http://www-958.ibm.com/software/data/ cognos/manyeyes/ Visualizations of Historical Data Can download their data And play with it
This is an example in SciPy (Scientitific Python). It uses the same methods were using in this chapter. Example: Finding the nucleotide sequence There are places on the Internet where you can grab DNA sequences of things like parasites.
What if youre a biologist and want to know if a sequence of nucleotides that you care about is in one of these parasites? We not only want to know yes or no, but which parasite. What the data looks like >Schisto unique AA825099 gcttagatgtcagattgagcacgatgatcgattgaccgtgagatcgacga gatgcgcagatcgagatctgcatacagatgatgaccatagtgtacg >Schisto unique mancons0736 ttctcgctcacactagaagcaagacaatttacactattattattattatt
accattattattattattattactattattattattattactattattta ctacgtcgctttttcactccctttattctcaaattgtgtatccttccttt How are we going to do it? First, we get the sequences in a big string. Next, we find where the small subsequence is in the big string. From there, we need to work backwards until we find > which is the beginning of the line with the sequence name. From there, we need to work forwards to the end of the line. From > to the end of the line is the name of the sequence Yes, this is hard to get just right. Lots of debugging
prints. The code that does it def findSequence(seq): sequencesFile = getMediaPath("parasites.txt") file = open(sequencesFile,"rt") sequences = file.read() file.close() # Find the sequence seqloc = sequences.find(seq) #print "Found at:",seqloc if seqloc <> -1: # Now, find the ">" with the name of the sequence nameloc = sequences.rfind(">",0,seqloc) #print "Name at:",nameloc
endline = sequences.find("\n",nameloc) print "Found in ",sequences[nameloc:endline] if seqloc == -1: print "Not found" Why -1? If .find or .rfind dont find something, they return -1 If they return 0 or more, then its the index of where the search string is found. Whats <>? Thats notation for not equals
You can also use != Running the program >>> findSequence("tagatgtcagattgagcacgatgatcgattgacc") Found in >Schisto unique AA825099 >>> findSequence("agtcactgtctggttgaaagtgaatgcttccaccgatt ") Found in >Schisto unique mancons0736 Example: Get the temperature The weather is always available on the Internet.
Can we write a function that takes the current temperature out of a source like http://www.ajc.com/weather or http://www.weather.com? The Internet is mostly text Text is the other unimedia. Web pages are actually text in the format called HTML (HyperText Markup Language) HTML isnt a programming language,
its an encoding language. It defines a set of meanings for certain characters, but one cant program in it. We can ignore the HTML meanings for now, and just look at patterns in the text. Wheres the temperature? The word temperatur e doesnt really show up. But the temperature always follows the
word Currently, and always comes before the °
Currently Partly sunny 54°< /font>F
We can use the same algorithm weve seen previously Grab the content out of a file in a big string. (Weve saved the HTML page previously. Soon, well see how to grab it directly.) Find the starting indicator
(Currently) Find the ending indicator (°) Read the previous characters Finding the temperature def findTemperature(): weatherFile = getMediaPath("ajc-weather.html") file = open(weatherFile,"rt") weather = file.read() file.close() # Find the Temperature curloc = weather.find("Currently") if curloc <> -1: # Now, find the "°" following the temp temploc = weather.find("°",curloc)
tempstart = weather.rfind(">",0,temploc) print "Current temperature:",weather[tempstart+1:temploc] if curloc == -1: print "They must have changed the page format -can't find the temp" Adding new capabilities: Modules What we need to do is to add capabilities to Python that we havent seen so far. We do this by importing external modules. A module is a file with a bunch of additional functions and objects defined within it. Some kind of module capability exists in virtually every programming language.
By importing the module, we make the modules capabilities available to our program. Literally, we are evaluating the module, as if wed typed them into our file. Pythons Standard Library Python has an extensive library of modules that come with it. The Python standard library includes
modules that allow us to access the Internet, deal with time, generate random numbers, andaccess files in a directory. Accessing pieces of a module We access the additional capabilities of a module using dot notation, after we import the module. How do you know what pieces are there? Check the documentation. Python comes with a Library Guide. There are books like Python Standard
Library that describe the modules and provide examples. The OS Module The OS module offers a number of powerful capabilities for dealing with files, e.g., renaming files, finding out when a file was last modified, and so on. We start accessing the OS module by typing: import os The function that knows about directories
is listdir(), used as os.listdir() listdir takes a path to a directory as input. Using os.listdir >>> import os >>> print getMediaPath("barbara.jpg") C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\barbara.jpg >>> print getMediaPath("pics") Note: There is no file at C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\ pics C:\Documents and Settings\Mark Guzdial\My
Documents\mediasources\pics >>> print os.listdir("C:\Documents and Settings\ Mark Guzdial\My Documents\mediasources\pics") ['students1.jpg', 'students2.jpg', 'students5.jpg', 'students6.jpg', 'students7.jpg', 'students8.jpg'] Writing a program to title pictures Well input a directory Well use os.listdir() to get each filename in the directory Well open the file as a picture. Well title it. Well save it out as titled- and the
filename. Titling Pictures import os def titleDirectory(dir): for file in os.listdir(dir): picture = makePicture(file) addText(picture,10,10,"This is from My CS CLass") writePictureTo(picture,"titled-"+file) Okay, that didnt work >>> titleDirectory("C:\Documents and Settings\Mark Guzdial\My Documents\ mediasources\pics") makePicture(filename): There is no file
at students1.jpg An error occurred attempting to pass an argument to a function. Why not? Is there a file where we tried to open the picture? Actually, no. Look at the output of os.listdir() again >>> print os.listdir("C:\Documents and Settings\ Mark Guzdial\My Documents\mediasources\pics") ['students1.jpg', 'students2.jpg', 'students5.jpg', 'students6.jpg', 'students7.jpg', 'students8.jpg'] The strings in the list are just the base
names No paths Creating paths If the directory string is in the placeholder variable dir, then dir+file is the full pathname, right? Closeyou still need a path delimiter, like / But its different for each platform! Python gives us a notation that works: // is as a path delimiter for any platform. So: dir+//+file
A Working Titling Program import os def titleDirectory(dir): for file in os.listdir(dir): print "Processing:",dir+"//"+file picture = makePicture(dir+"//"+file) addText(picture,10,10,"This is from My CS Class") writePictureTo(picture,dir+"//"+"titled-"+file ) Showing it work >>> titleDirectory("C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\pics") Processing: C:\Documents and Settings\Mark Guzdial\My Documents\
mediasources\pics//students1.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\ mediasources\pics//students2.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\ mediasources\pics//students5.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\ mediasources\pics//students6.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\ mediasources\pics//students7.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\ mediasources\pics//students8.jpg >>> print os.listdir("C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\pics") ['students1.jpg', 'students2.jpg', 'students5.jpg', 'students6.jpg', 'students7.jpg', 'students8.jpg', 'titled-students1.jpg', 'titledstudents2.jpg', 'titled-students5.jpg', 'titled-students6.jpg', 'titled-students7.jpg', 'titled-students8.jpg']
Inserting a copyright on pictures What if you want to make sure youve got JPEG files? import os def titleDirectory(dir): for file in os.listdir(dir): print "Processing:",dir+"//"+file if file.endswith(".jpg"): picture = makePicture(dir+"//"+file) addText(picture,10,10,"This is from My CS Class") writePictureTo(picture,dir+"//"+"titled-"+file )
Say, if thumbs.db is there >>> titleDirectory("C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\ pics") Processing: C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\pics//students1.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\pics//students2.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\pics//students5.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\pics//students6.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\pics//students7.jpg Processing: C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\pics//students8.jpg Processing: C:\Documents and Settings\Mark Guzdial\My
Documents\mediasources\pics//Thumbs.db >>> print os.listdir("C:\Documents and Settings\Mark Guzdial\My Documents\mediasources\ pics") ['students1.jpg', 'students2.jpg', 'students5.jpg', 'students6.jpg', 'students7.jpg', 'students8.jpg', 'Thumbs.db', 'titled-students1.jpg', 'titled-students2.jpg', 'titledstudents5.jpg', 'titled-students6.jpg', 'titled-students7.jpg', 'titledstudents8.jpg'] Another interesting module: Random >>> import random >>> for i in range(1,10): ... print random.random() ... 0.8211369314193928 0.6354266779703246 0.9460060163520159 0.904615696559684
0.33500464463254187 0.08124982126940594 0.0711481376807015 0.7255217307346048 0.2920541211845866 Randomly choosing words from a list >>> for i in range(1,5): ... print random.choice(["Here", "is", "a", "list", "of", "words", "in","random","order"]) ... list a Here
list Randomly generating language Given a list of nouns, verbs that agree in tense and number, and object phrases that all match the verb, We can randomly take one from each to make sentences. Random sentence generator import random def sentence(): nouns = ["Mark", "Adam", "Angela", "Larry", "Jose", "Matt", "Jim"]
verbs = ["runs", "skips", "sings", "leaps", "jumps", "climbs", "argues", "giggles"] phrases = ["in a tree", "over a log", "very loudly", "around the bush", "while reading the newspaper"] phrases = phrases + ["very badly", "while skipping","instead of grading", "while typing on the Internet."] print random.choice(nouns), random.choice(verbs), random.choice(phrases) Running the sentence generator >>> sentence() Jose leaps while reading the newspaper >>> sentence() Jim skips while typing on the Internet.
>>> sentence() Matt sings very loudly >>> sentence() Adam sings in a tree >>> sentence() Adam sings around the bush >>> sentence() Angela runs while typing on the Internet. >>> sentence() Angela sings around the bush >>> sentence() Jose runs very badly How much smarter can we make this? Can we have different kinds of lists
so that, depending on the noun selected, picks the right verb list to get a match in tense and number? How about reading input from the user, picking out key words, then generating an appropriate response? if input.find(mother) <> -1: print Tell me more about your mother Joseph Weizenbaums Eliza Created a program that acted like a Rogerian therapist. Echoing back to the user whatever they
said, as a question. It had rules that triggered on key words in the users statements. It had a little memory of what it had said before. People really believed it was a real therapist! Convinced Weizenbaum of the dangers of computing. Session with the Doctor
>>>My mother bothers me. Tell me something about your family. Note that this is all >>>My father was a caterpillar. generated automaticall You seem to dwell on your family. y. >>>My job isn't good either. Is it because of your plans that you say your job is not good either? Many other Python Standard Libraries datetime and calendar know about
dates. What day of the week was the US Declaration of Independence signed? Thursday. math knows about sin() and sqrt() zipfile knows how to make and read .zip files email lets you (really!) build your own spam program, or filter spam, or build an email tool for yourself.
SimpleHTTPServer is a complete working Web server.
SSH supports using an authentication agent. Program that runs in the user's local machine (or on a smartcard connected to it) Agent holds the user's private RSA keys. In the Unix environment, the agent . Starts as a parent of...
L'impressionnisme Les impressionnistes, loin des sujets nobles de l'académisme, s'intéressent aussi aux scènes du quotidien. Le symbolisme A la fin du siècle, en réaction contre le réalisme et le naturalisme, le mouvement symboliste renoue avec le goût pour le rêve...
Chase - vary production rates to meet changes in demand. Often used when inventory cannot be used or when resources are flexible and inexpensive to change. Level - establish average demand level and set production rate to that level. Often...
AMP r Null: Varying pH will have no effect on the transformation of E. coli. Alternative: pH variation will alter transformation efficiency in DH5-alpha E. coli. Micropipettes + Sterile Tips Micro tubes Spreader Bars Ethanol and Bunsen burner Incubator pH...
How did Anglo-Saxonism help foster American imperialism? What are the factors that led the U.S. to realize an imperialist vision in the 1890s? Why did the U.S. assert itself as a world power? ... The Imperialist Vision Last modified by:
Announcements Project 2 artifacts—vote now!! Project 3 questions? Start thinking about final project ideas, partners Recovering 3D from images So far, we've relied on a human to provide depth cues parallel lines, reference points, etc.
Target Setting: Issues & Experience Overview 1. Systems Approach The importance of measurement and targets throughout the system. Process The Role of Stakeholders in target-setting 3. Whither goest thou? Where are your targets taking you? 4.
Ready to download the document? Go ahead and hit continue!