Welcome (back) to IST 338 ! Wow – I see the resemblance Average of these two? Alien Wally Homework 0 due Sun. night (11:59pm) Problem 0: Already complete! Problem 1: Four-fours program: Can be done for lab... Problem 2: Rock-paper-scissors program (Maybe done already!) Problems 3-5: Picobot! empty room (3) maze (4) + extra (5) Problem 6: Reading + response… Welcome (back) to IST 338 ! Wow – I see the resemblance Picobot! Alien Wally Homework 0 due Sun. night (11:59pm) Problem 0: Already complete! Problem 1: Four-fours program: Can be done for lab... Problem 2: Rock-paper-scissors program (Maybe done already!) Problems 3-5: Picobot! empty room (3) maze (4) + extra (5) Problem 6: Reading + response… Welcome back (from) Baltimore! world's expert on badgebased incentive systems for education… Extreme RPS!? They call that an alien? Spock mind-melds three-eyed aliens! Provably. http://www.youtube.com/watch?v=iapcKVn7DdY http://www.youtube.com/watch?v=yuEZEyDdmvQ Last time… CS != Programming What about the Python programming language ? Python ? One possible relationship... vs. Python ! One possible relationship... vs. Happy co-existence… It can even be comfy! Exclusive Choices if ... elif ... else if perc > .95: print 'A' elif perc > .90: print 'A-' 4 mutually exclusive blocks elif perc > .70: print 'Pass' else: print 'Aargh!' elif and else are optional in a single control structure When using if . elif … . else at most one block will run: the first whose test is True. If all fail, the else will run What's the difference? mutually exclusive blocks nonexclusive blocks if perc > .95: print 'A' if perc > .95: print 'A' elif perc > .90: print 'A-' if perc > .90: print 'A-' elif perc > .70: print 'Pass' if perc > .70: print 'Pass' What if perc == .99 ? (How would we set it?) How many separate control structures does each side have? What will this do? Does this program print the correct RPS result this time? Does it always? comp = 'rock' user = 'paper' if comp == 'paper' and user == 'paper': print 'We tie. Try again?' elif comp == 'rock': if user == 'scissors': print 'I win! *_*' else: print 'You win. Aargh!' # of BLOCKS ? try it: RPS example #1 # of TESTS ? # of Control Structures ? Counting... comp = 'rock' user = 'rock' # of BLOCKS # of TESTS if comp == 'rock': if user == 'paper': print 'I win *_*!' elif user == 'scissors': print 'You win.' Printing… else: print 'Tie.' print 'Ties go to the runner.' print ' - and I am running!' try it: RPS example #2 ... what if the else were indented? What does this print? How many possible “input cases” are there? For how many is this program correct? comp = 'rock' user = 'rock' if comp == 'rock': print 'I win *_*!' if user == 'paper': print 'You win.' else: print 'An awful tie' try it: RPS example #3 How many possible “input cases” are there? For how many is this program correct? What does this print? comp if comp == 'rock': print 'I win *_*!' if user == 'paper': print 'You win.' else: print 'An awful tie' 'scissors' 'paper' user 'paper' 'scissors' 'rock' 'rock' comp = 'rock' user = 'rock' … how efficiently can RPS be represented by program? • Fewest number of blocks? • Fewest number of tests? This week: hw0pr1 shell prompt > or $ Python prompt >>> Python source code, a plain-text file (here, edited by the Sublime text editor) shell or commandline or terminal (the execution environment) get Python running on your own machine Commanding the command-line in Windows' plain cmd Mac/Linux/Windows Powershell cd . pwd print working directory (current path) dir ls list cd cd change directory .. . .. . (current directory) shortcut for "directory above" shortcut for "current directory" move mv move (source/from) (destination/to) copy cp copy (source/from) (destination/to) mkdir mkdir make directory (name of new dir) Desktop Mental model .. . CS5 CS5 start pico3.txt pico4.txt (folder) (folder) (file) (file) usual picture ~ a window into the underlying structure a couple of shortcuts… Up arrow • Brings back previously-typed commands • Down arrow ~ scrolls the other way Tab key • Completes the file or folder name you start • Cycles through possibilities (older versions would pause…) Desktop Mental model .. . CS5 (folder) $ cd .. cd $ pwd dir $ ls CS5 $ cd C start $ mkdir BotFiles $ cd B copy $ cp ../pico3.txt $ move $ mv p .. . pico3.txt pico4.txt (folder) (file) (file) Desktop Mental model .. . pico3.txt CS5 (file) (folder) $ cd .. cd . $ pwd dir $ ls CS5 $ cd C end $ mkdir BotFiles pico4.txt BotFiles (folder) (file) (folder) $ cd B copy $ cp ../pico3.txt pico3.txt $ move $ mv p . BotFiles .. (folder) (file) Try it! Desktop Draw the changes these shell commands will make… CS5 (folder) $ mkdir Week0 $ cd W move $ mv ../h CS5 . $ cd .. start hw0pr0.py hw0pr1.py (folder) (file) (file) $ mkdir Week1 $ cd W copy $ cp ../h . $ $ $ Extra #2: What line here would copy the hw0pr0.py file to the current location? See if you can use tabs… Extra #1: What is the current folder here? Not to mention… python where which type cat tree find . if you don't want to type the full path: c:\python27\python add ;c:\python27 ping may need to install curl or wget This is a window into the directory tree… XKCD's perspective… Command line?!? The Operating System's Window Manager Consume Computational interactions (files, folders, data…) Compose Physical interactions (arithmetic and storage) Crazy! not really fair… Command line?!? The Operating System's Window Manager Consume Computational interactions (files, folders, data…) Compose Physical interactions (arithmetic and storage) Commoditized! Useful? Consuming Composing Useful? Consuming Everything at the command line is automatable and programmable… Composing Useful! Consuming Everything at the command line is automatable and programmable… Composing Another language already? Python Picobot! General-purpose language you might see 50% by the end of the term even then, <1% of its libraries! Picobot Special-purpose language you'll see 100% in the next 10 minutes The Picobot simulator www.cs.hmc.edu/picobot HW problems 3 and 4: Picobot! Goal: full-room coverage with only local sensing… walls Picobot area not covered (yet!) area already covered Inspiration? Picobot can't tell… HW problems 3 and 4: Picobot! Goal: full-room coverage with only local sensing… walls Picobot area not covered (yet!) area already covered Roomba! can't tell "vacuumed" from "unvacuumed" area Picobot can't tell… Surroundings Picobot can only sense things directly to the N, E, W, and S N E W S For example, here its surroundings are NxWx N E W S Surroundings are always in NEWS order. What are these surroundings? Surroundings are always in NEWS order. N E W S NxWx Wow - this one is disgusting! Surroundings How many distinct surroundings are there? N E W S Surroundings How many distinct surroundings are there? N E W 24 == 16 possible S xxxx Nxxx xExx xxWx xxxS NExx NxWx xEWx xExS xxWS NEWx NExS NxWS xEWS NxxS NEWS (won’t happen) State I am in state 0. My surroundings are xxWS. 0 Picobot's memory is a single number, called its state. State is the internal context of a computation, i.e., the subtask. Picobot always starts in state 0. State and surroundings represent everything Picobot knows about the world self-contained but not simplistic Rules I am in state 0. My surroundings are xxWS. Picobot acts through a set of rules: state 0 Notes surroundings xxWS direction new state N 0 Picobot checks its rules from the top each time. When it finds a matching rule, that rule runs. Rules I am in state 0. My surroundings are xxWS. Picobot acts through a set of rules Each rule expresses your intent for Picobot! state 0 surroundings xxWS If I'm now in state 0 seeing xxWS, direction new state N 0 Then I move North, and "change" to state 0. Wildcards I only care about NORTH being EMPTY Asterisks * are wild cards. They match walls or empty space: state surroundings 0 x*** direction new state N 0 EWS may be wall or empty space N must be empty (A) A rule that sends Picobot to the North as far as it can go: state 0 surroundings x*** direction new state -> N 0 -> W 1 -> S 1 (B) What does this next rule do? 0 N*** (C) What about this one? 1 ***x (D) How could we stop at the bottom and return up through the same column? One rule to rule them all? Precious! The Rule: One step per rule Picobot's world How many times does rule (A) run? ___________________ How many times does rule (B) run? ___________________ P How many times does rule (C) run? ___________________ How many times does rule (D) run? ___________________ Where does Picobot stop? Why? Try it! Extra! What additional rules would be needed in order to ensure that Picobot fully explores the empty room (not this crazy room) from any starting spot? (this is problem 3…) Picobot hw problems problem 3 problem 4 Extra! (#5) Your rules must work regardless of Picobot's starting position… ! Picobot's revenge! problem 3 problem 4 Extra! (#5) Your rules must work regardless of Picobot's starting position… ! Be Picobot! (1) How many times does the 1st rule run? _________ (2) How many times does the 2nd rule run? _________ (3) How many times does the 3rd rule run? _________ A more intricate picobot world (4) In English, what does state 0 do? (5) How could this help clear the empty room? … just a thought experiment "Run" this Picobot program: top of stalagmite P state surr 0 0 0 ***x *x*S *E*S -> -> -> dir newstate S E X 0 0 1 (6) Add 2-3 rules that will, in state 1, get Picobot to the top of the stalagmite, then stop. (Extra!) What approach could get Picobot to travel around the whole outer edge? 1st rule 2nd rule 3rd rule Maze strategies? Maze strategies? Right Hand Rule Why might this be difficult for Picobot? Maze strategies? Right Hand Rule facing State 0 State 1 State 2 State 3 We'll need to use state to represent the direction Picobot is facing. Suppose Picobot wants to traverse a maze with its right hand always on the wall. We use state 0 to represent that “Picobot is facing North” (A) Here is a single rule that tells Picobot: If you're facing N with a wall at right and space ahead then go forward” 0 xE** -> N 0 0 (A) (B) Let's write a single rule that tells Picobot: “If you're facing North and lose the wall, then get over to the wall now!” 0 0 -> (B) (C) (for HW) Write 1 or 2 rules to tell Picobot to do the right thing if it hits a dead end. Repeat this IDEA for all four states, representing all four facing directions. 0 (C) Problem 6 this week… Typically an article on CS or an application... Submit a one-paragraph response Small part (5 pts) A few sentences that raise or address questions, using the article as a guide. 5 – insightful, careful 4 – thoughtful 3 – complete, on topic 0-2 – less than complete This week's article might not seem like CS at first… and I thought my language was alien! Seventy years ago, in 1940, a popular science magazine published a short article that set in motion one of the trendiest intellectual fads of the 20th century. At first glance, there seemed little about the article to augur its subsequent celebrity. Neither the title, “Science and Linguistics,” nor the magazine, M.I.T.’s Technology Review, was most people’s idea of glamour. And the author, a chemical engineer who worked for an insurance company and moonlighted as an anthropology lecturer at Yale University, was an unlikely candidate for international superstardom. And yet Benjamin Lee Whorf let loose an alluring idea about language’s power over the mind, and his stirring prose seduced a whole generation into believing that our mother tongue restricts what we are able to think. and I thought my language was alien! Seventy years ago, in 1940, a popular science magazine published a short article that set in motion one of the trendiest intellectual fads of the 20th century. At first glance, there seemed little about the article to augur its subsequent celebrity. Neither the title, “Science and Linguistics,” nor the magazine, M.I.T.’s Technology Review, was most people’s idea of glamour. And the author, a chemical engineer who worked for an insurance company and moonlighted as an anthropology lecturer at Yale University, was an unlikely candidate for international superstardom. And yet Benjamin Lee Whorf let loose an alluring idea about language’s power over the mind, and his stirring prose seduced a whole generation into believing that our mother tongue restricts what we are able to think. CS ~ complexity science problem 3 problem 4 Extra! (5) Shortest Picobot program: Shortest Picobot program: Shortest Picobot program: 6 rules 8 rules ? rules complexity is deeper than simply the # of rules… As you head northwards… You are not alone! I can attest to that! Tutoring hours all weekend in the LAC lab also, weekday evenings @ LAC lab, too Lead on! I will follow. Each week's lab… 0) Feel free to stay for the final hour… 1) … to work on the problems 2) Also, you can use the CS5 lab and tutoring times, linked from the site Encouraged: bring your laptop Tutoring schedule… Seek help! every day there are tutoring hours in the LAC computer lab Linde Activities Center this link: HMC office + tutoring locations Tutoring hours are in the Linde Activities Center computer lab (LAC lab) Enter through Olin building west-side entrance Beckman B163 ~ office location Each week's lab… 0) Feel free to stay for the final hour… 1) … to work on the problems 2) Also, you can use the CS5 lab and tutoring times, linked from the site Encouraged: bring your laptop The shell ~ yet another language… Programming as learning a foreign language 1) Expect it to be different! 2) You don't need to know all the details No one does! 3) Immersion ~ Experimentation 4) Key benefit == new mindset go/went It's all language …but it's not all languages Say hello. Cow Fibonacci Whitespace Hello world Var'aq Fibonacci Malbolge Hello world 0 lI'moH A cher 1 lI'moH B cher A cha' B cha' 18 { A B boq latlh cha' B "A" cher "B" cher } vangqa' MoO moO MoO mOo MOO OOM MMM moO moO MMM mOo mOo moO MMM mOo MMM moO moO MOO MOo mOo MoO moO moo mOo mOo moo Piet Fibonacci (=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{ ^Lx8%$Xmrkpohm_Ni;gsedcba`_^]\[ZYXWVUTSR QPONMLKJIHGFEDCBA@?>=<;:9876543s+O<oLm Fortunately, CS 5 does NOT goto the fringe of the programming-language universe ! Who are you calling fringe? The foreign language of python… syntax semantics intent How it looks What it does What it should do name = raw_input('Hi... what is your name? ') print # prints a blank line if name == 'Eliot' or name == 'Ran': print 'I\'m "offline." Try later.' elif name == 'Zach': # is it Zach? print 'Zach Quinto...?', 'No?', 'Oh.' else: # in all other cases... print 'Welcome', name, '!' my_choice = random.choice( [ 'R','P','S' ] ) print 'My favorite object is', my_choice, "!" The foreign language of python… syntax semantics intent How it looks What it does What it should do name = raw_input('Hi... what is your name? ') print # prints a blank line if name == 'Eliot' or name == 'Ran': print 'I\'m "offline." Try later.' elif name == 'Zach': # is it Zach? print 'Zach Quinto...?', 'No?', 'Oh.' else: # in all other cases... print 'Welcome', name, '!' my_choice = random.choice( [ 'R','P','S' ] ) print 'My favorite object is', my_choice, "!" The foreign language of python… syntax semantics intent How it looks What it does What it should do name = raw_input('Hi... what is your name? ') print # prints a blank line if name == 'Eliot' or name == 'Ran': print 'I\'m "offline." Try later.' elif name == 'Zach': # is it Zach? print 'Zach Quinto...?', 'No?', 'Oh.' else: # in all other cases... print 'Welcome', name, '!' my_choice = random.choice( [ 'R','P','S' ] ) print 'My favorite object is', my_choice, "!" The foreign language of python… syntax semantics intent How it looks What it does What it should do name = raw_input('Hi... what is your name? ') print # prints a blank line if name == 'Eliot' or name == 'Ran': print 'I\'m "offline." Try later.' elif name == 'Zach': # is it Zach? print 'Zach Quinto...?', 'No?', 'Oh.' else: # in all other cases... print 'Welcome', name, '!' my_choice = random.choice( [ 'R','P','S' ] ) print 'My favorite object is', my_choice, "!" a graphical view of a program's semantics ‘Eliot’ 'Zach'or ‘Ran’ Zach Eliot or Ran 'Chris' Chris Zach What about me? The foreign language of python… syntax semantics intent How it looks What it does What it should do www.theonion.com How Python looks! • how punctuation is used • the language keywords used • use of whitespace • peculiarities of formatting • how behavior is affected … The foreign language of python… syntax semantics intent How it looks What it does What it should do www.theonion.com How Python looks! • how punctuation is used • the language keywords used • use of whitespace • peculiarities of formatting • how behavior is affected … The challenge of programming… syntax semantics intent How it looks What it does What it should do www.theonion.com humantyped input machineproduced output ? humandesired output Syntax challenge! import random (1) Find and correct as many errors as you can here… (2) This line is doing three things… what are they? user = raw_input( "Choose your weapon! " ) comp = random.choice( ['rock','paper','scissors") ] print 'user (you) chose:', 'user' print 'comp (me!) chose:' comp if user == rock and comp = 'paper' print 'The result is, YOU LOSE!' print 'unless you're a CS 5 grader, then YOU WIN!' (3) What are the 6-7 punctuation marks used in more than one way here? Syntax challenge! every block of code must line up! import random (1) Find and correct as many errors as you can here… (2) This line is doing three things… what are they? (1) prints the "weapon" prompt (2) gets user's input from the kbd (3) assigns that input to the variable user set-equals always uses ONE equals sign user = raw_input( "Choose your weapon! " ) comp = random.choice( ['rock','paper','scissors'] ) print 'user (you) chose:', user match brackets and quotes ! print 'comp (me!) chose:', comp test-equals uses TWO equals signs The comma prints a space and does NOT go to the next line. if user == rock and comp == 'paper': every block of code must line up! a colon starts a new block print 'The result is, YOU LOSE.' print 'unless you\'re a CS 5 grader, then YOU WIN!' a backslash handles special characters flattering - or flouting graders is encouraged! (3) Punctuation characters used in more than one way: ().'=,: Tear off that page Pass those to the aisles + Southward… only 1 "quiz" is needed per pair … then turn back into the packet The Rule: One step per rule One rule to rule them all? Using the ruleset above… Picobot's world This is precious! How many times does rule (A) run? ___________________ How many times does rule (B) run? ___________________ How many times does rule (C) run? ___________________ How many times does rule (D) run? ___________________ P In a phrase, what do state 0 and state 1 do? Where does Picobot stop? Why? Extra! What additional rules would be needed in order to ensure that Picobot fully explores the empty room (not this crazy room) from any starting spot? (this is problem 3…) Quiz! Solve this on the back page first… Pico-reminders… Picobot! Picobot follows a set of rules: state surroundings direction new state 0 x*** -> N 0 0 N*** -> W 0 Picobot takes ONE STEP each time a rule runs. The programmer uses states to create behaviors! Each week's lab… 0) Find the lab! Sign in… 1) Get Python running… 2) Run and submit a file… Encouraged: bring your laptop in Platt Evening lab? You can pickup a keycard from HMC's F&M dep't. Shanahan coffee Map to CS Lab Laptop? Bring it! Koi Edwards Macalister Pryne cool machines - drills, lathes, etc. other keyboard-free machines Your account for CS submissions: Physicists, chemists & other parenthesisneeding individuals, B102 B100 Galileo Beckman CS Hallway and Labs passwd: Big Beckman (B126) or Olin B105 to Olin (Bio + CS) Biologists, bees, spiders and other arachnophiles Choices, choices! Suppose we set the value of perc to 0.91... perc = 0.91 if perc > print elif perc print elif perc print else: print # of BLOCKS here: # of TESTS here: 0.95: 'A' > 0.90: 'A-' > 0.70: 'Pass' 'Aargh!' What will this program print, if perc is 0.91? in a fiercely contested game of RPS... Does this program print the correct RPS result this time? Does it always? comp = 'rock' user = 'paper' if comp == 'paper' and user == 'paper': print 'We tie. Try again?' elif comp == 'rock': if user == 'scissors': print 'I win! *_*' else: print 'You win. Aargh!' # of BLOCKS here: # of TESTS here: Choices, choices! Suppose that the value of perc is 0.91... perc = 0.91 if perc > print elif perc print elif perc print else: print 0.95: 'A' > 0.90: 'A-' > 0.70: 'Pass' 'Aargh!' # of BLOCKS here: # of TESTS here: What will this program print, if perc is 0.91? Choices, choices! perc = 0.80 perc = 0.80 if perc > print elif perc print elif perc print else: print if perc > print elif perc print elif perc print else: print 0.95: 'A' > 0.90: 'A-' > 0.70: 'Pass' 'Aargh!' 0.00: 'Aargh!' > 0.70: 'Pass' > 0.90: 'A-' 'A' What does each of these programs print out, if perc is 0.8? What value of perc gives an 'A-' on the right? How can you get a better grade on the right than the left? What's the difference? nonexclusive blocks mutually exclusive blocks if perc > .95: print 'A' if perc > .95: print 'A' elif perc > .90: print 'A-' if perc > .90: print 'A-' elif perc > .70: print 'Pass' if perc > .70: print 'Pass' What if perc == .99 ? How many separate control structures does each side have? in a fiercely contested game of RPS... Does this program print the correct RPS result this time? Does it always? comp = 'rock' user = 'paper' if comp == 'paper' and user == 'paper': print 'We tie. Try again?' elif comp == 'rock': if user == 'scissors': print 'I win! *_*' else: print 'You win. Aargh!' # of BLOCKS here: # of TESTS here: First: Pick up your CS lab login + password and look up your submission-site login Pair up with someone nearby – and answer these questions together… "Quiz" Name ______________________ Name ______________________ Your favorite __________ is ____________. Your favorite __________ is ____________. Your least favorite ____________ is ____________. Your least favorite ____________ is ____________. What is something non-Claremont-collegey you have in common? Then, try these Python q's: (0) How many tests and blocks are here? (1) What output does this code print? comp = 'rock' user = 'rock' if comp == 'rock': if user == 'paper': print 'I win *_*!' elif user == 'scissors': print 'You win.' else: print 'Tie.' (2) As written, what output does this print? comp = 'rock' user = 'rock' if comp == 'rock': print 'I win *_*!' if user == 'paper': print 'You win.' else: print 'Tie.' (3) Change these inputs to produce a completely correct RPS output here. (4) How many RPS cases are there? How many of them does this code handle correctly? (5) What is the smallest number of tests and blocks of code you'll need to correctly handle a full game of RPS? (Extra) What if it were RPS-5, with Lizard and Spock? RPS-101? Counting... comp = 'rock' user = 'rock' # of BLOCKS # of TESTS if comp == 'rock': if user == 'paper': print 'I win *_*!' elif user == 'scissors': print 'You win.’ else: print 'Tie.' print 'Ties go to the runner!' print ' - and I'm running.' ... what if the else were indented? What does this print? How many possible “inputs” are there? For how many is this program correct? comp = 'rock' user = 'rock' if comp == 'rock': print 'I win *_*!‘ if user == 'paper': print 'You win.‘ else: print 'An awful tie' … how efficiently can RPS be represented? • Fewest number of blocks? • Fewest number of tests? What is CS? 'HUMAN' 'CHIMPANZEE' How can it be done? How well can it be done? Can it be done at all? Can you solve the problem? Can you create a process to solve such problems? What is the Longest Common Subsequence between 2 strings? biology's string-matching problem, "LCS" 'CGCTGAGCTAGGCA...' 'ATCCTAGGTAACTG...' +109more Eye oneder if this haz othur aplications? Feels like home! What is CS? How can it be done? How well can it be done? Can it be done at all? How quickly can you find a solution? Is your solution the "best" possible? How much work is needed to simulate N stars? physics's "N-body" problem official alien of CS 5 Gold Why here? official mascot of CS 5 Black Placement based on experience, not ability: • Gold is for students mostly new to CS, • Black for students with a good amount of previous CS • Tradeoff: more careful coverage – a few more applications • Green is for those who'd like biology-flavored CS! official turtle of CS 5 Green • All of Gold Black and Green will prepare you well for • CS 60 • Future computational work • A happy and fulfilling life :-) switching? … and who is this Mudder, 35 years later? Jon “Dean” Jacobsen, 1979 What is programming ? Programming as "recipe-writing" vs. Programming as learning a foreign language What is programming ? Programming as "recipe-writing" vs. Programming as learning a foreign language 1) Expect it to be different! 2) Don’t feel you need to memorize it 3) Immersion == Experimentation go/went Why CS 5 ? 2 Broad, constructive tour in CS 1 recursion 3 simulation 4 design 5 Python Programming? in pictures? Python Programming? One possibility... Python Programming? One possibility... Happy co-existence! It can even be comfy! Python Programming? Python (language) and IDLE (editor) open-source, free, powerful, and common We will be using Python 2.7.3 ~ the “Enthought” distribution Plain old Python 2.7.x is certainly OK, too. Don't get 3.1 or 3.x! "Editor" and "Shell" Editor (IDLE): typing code Here, you can save and change programs. Hitting F5 runs your program over in the shell Shell window: running code Here, you can try things out at the command prompt >>> The foreign language of python… name = raw_input('Hi... what is your name? ') print # prints a blank line if name == 'Eliot' or name == 'Ran': print 'I\'m "offline." Try later.' elif name == 'Zach': # is it Zach? print 'Zach Quinto...?', 'No?', 'Oh.' else: # in all other cases... print 'Welcome', name, '!' my_choice = random.choice( [ 'R','P','S' ] ) print 'My favorite object is', my_choice, "!" Lab 0 – Tues. / Wed. is to run and submit “this” program The foreign language of python… syntax semantics intent How it looks What it does What it should do name = raw_input('Hi... what is your name? ') print # prints a blank line if name == 'Eliot' or name == 'Ran': print 'I\'m "offline." Try later.' elif name == 'Zach': # is it Zach? print 'Zach Quinto...?', 'No?', 'Oh.' else: # in all other cases... print 'Welcome', name, '!' my_choice = random.choice( [ 'R','P','S' ] ) print 'My favorite object is', my_choice, "!" ‘Eliot’ or ‘Ran’ 'Zach' Zach Eliot or Ran 'Chris' Chris Zach What about me? The foreign language of python… syntax semantics intent How it looks What it does What it should do www.theonion.com Syntax • how punctuation is used • the language keywords that are used • use of whitespace • peculiarities of formatting • how behavior is affected … How Python looks! Language is language...? Intercal PLEASE DO ,1 <- #13 DO ,1 SUB #1 <- #238 DO ,1 SUB #2 <- #112 DO ,1 SUB #3 <- #112 DO ,1 SUB #4 <- #0 DO ,1 SUB #5 <- #64 DO ,1 SUB #6 <- #238 DO ,1 SUB #7 <- #26 DO ,1 SUB #8 <- #248 DO ,1 SUB #9 <- #168 DO ,1 SUB #10 <- #24 DO ,1 SUB #11 <- #16 DO ,1 SUB #12 <- #158 DO ,1 SUB #13 <- #52 PLEASE READ OUT ,1 PLEASE GIVE UP v >v"Hello world!"0< ,: ^_25*,@ Befunge (DEFUN HELLO-WORLD () (PRINT (LIST 'HELLO 'WORLD))) LISP Scheme int main() { printf("%s\n", "Hello, world!"); } HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE print 'Hello, World!' Python LOLCODE C C++ Language is language...? Intercal PLEASE DO ,1 <- #13 DO ,1 SUB #1 <- #238 DO ,1 SUB #2 <- #112 DO ,1 SUB #3 <- #112 DO ,1 SUB #4 <- #0 DO ,1 SUB #5 <- #64 DO ,1 SUB #6 <- #238 DO ,1 SUB #7 <- #26 DO ,1 SUB #8 <- #248 DO ,1 SUB #9 <- #168 DO ,1 SUB #10 <- #24 DO ,1 SUB #11 <- #16 DO ,1 SUB #12 <- #158 DO ,1 SUB #13 <- #52 PLEASE READ OUT ,1 PLEASE GIVE UP v >v"Hello world!"0< ,: ^_25*,@ Befunge (DEFUN HELLO-WORLD () (PRINT (LIST 'HELLO 'WORLD))) LISP Scheme int main() { printf("%s\n", "Hello, world!"); } HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE print 'Hello, World!' Python LOLCODE C C++ Second looks? name = raw_input('Hi... what is your name? ') print # prints a blank line if name == 'Eliot' or name == 'Ran': print 'I\'m "offline." Try later.' elif name == 'Zach': # is it Zach? print 'Zach Quinto...?', 'No?', 'Oh.' else: # in all other cases... print 'Welcome', name, '!' my_choice = random.choice( [ 'R','P','S' ] ) print 'My favorite object is', my_choice, "!" Punctuation? Spacing? Color information? Strings? Variables? CS’s motto ? details are temporary… print print print print 'hv', 'dcle\naemdoe' 'ryu', 'lg!' …but CS thinking isn’t ! print print print print 'whteo' 'aerub\nv', 'aeo\nyraoo' 'egdne' CS’s motto ? details are temporary… …but CS thinking isn’t ! whteo aerub v aeo yraoo egdne hv dcle aemdoe ryu lg! print print print print 'hv', 'dcle\naemdoe' 'ryu', 'lg!' print print print print 'whteo' 'aerub\nv', 'aeo\nyraoo' 'egdne' We agree... Whatever you are, be a good one. - Abraham Lincoln ... more and more, CS can help! (0) Be sure to sign in! Lab 0! (1) Pick up this page (2) Login to your own laptop OR a CS machine and open a browser, e.g., Safari (3) Go to Lab 0 and work through it... (a) (or later) Change your CS password (b) Try Python & its "shell" (with your CS account) anything but IE Google for "HMC CS" – click "Schedule" – then CS5 . Or, type www.cs.hmc.edu/twiki/bin/view/CS5/ (c) Submit hw0pr1 of the assignment (d) Complete the CS policy forms (e) Finish hw0pr2 (if you'd like...) (4) Either before or after changing your CS password, feel free to use your own laptop instead... Questions? Ask us! comp = 'rock' user = 'rock' if comp == 'rock': if user == 'paper': print 'I win *_*!' elif user == 'scissors': print 'You win.' else: print 'Tie.' print 'Ties go to the runner!' print 'I'm running - are you?' What does this print? How many RPS-legal inputs are there? For how many is this program correct? comp = ??? user = ??? if comp == 'rock': print 'I win *_*!' if user == 'paper': print 'You win.' else: print 'Tie.' print '-- a horrible tie!' What does this print? Why CS ? Information is life’s fundamental building block. Genetic Code: DNA Our senses and experiences GTAGCACAITTAGC… More coffee required… us CS is a set of fundamental techniques for understanding and leveraging this information… “constructing with” How I spent my summer vacation... visiting Google Irvine serving as a historical consultant! ... and programming flying robots, too... No worries... CS is deceptively easy. What is CS? creativity / design commodity skills It's a big span What is CS? creativity / design commodity skills It's a big span The Atari 2600 game, Adventure! Why Python ? Python is a general-purpose computer language skills apply to all special-purpose languages Physics: LabView Biology: Lasergene, DNA* Engineering: Matlab Mathematics: Maple, Mathematica ALL of these seem alien at first! You’re telling me! Language is language ? Perls of wisdom ? eval evalq.q>trd!Uj:%L<061:%C<csnvo:%f<fsddo0:%c<cmtd:%x<xdmmnv:%I<011:%u<251:%bs<bsd`udSdbu`ofmd:%w<lnwd:%U<2:%t<L`hoVhoenv,? odv),idhfiu<?314-,vheui<?254(:%b<%t,?B`ow`r:%b,?bnoghftsd),vheui<?%u-,idhfiu<?311(:%b,?q`bj)(:s)3-3-%u-001-%c(:s)3-081-%u-311 -%f(:s)3-001-%u-031-%f(:s)3-1-%u-34-%f(:gns)%{<1:%{=%u:%{*<71(zs)%{-01-%{*51-54-%f-%f(:|s)3-1-%u-04-cm`bj(:%b,?%bs)3-1-%u-311 (:%G<,041:v)1-%L-31-C-%x(:v)%G-%L-,021-C-%x(:%B<,91:v),31-041-,4-B-%c(:v),91-041-,74-B-%c(:%E<,%I:v)1-021-31-E-%x(:v),%I-021-, 91-E-%x(:%K<,231:v),71-81-,31-@-%C(:v),301-81-,%L-@-%C(:v),%u-81-,211-@-%C(:%M<,%u:v),51-61-1-F-%C(:v),%L-61-,021-F-%C(:v),%u -61-,211-F-%C(:%J<%u:v)751-41-791-[-%C(:v)401-41-441-[-%C(:v)%u-41-291-[-%C(:%b,?bsd`udNw`m)063-080-091-088-,u`fr<?G-,ghmm<?f sddo5(:S)1(:%b,?sdqd`u)%I-]'t(:%t,?choe)&=Envo?&<?rtczS),0(:'V:%b,?%w)G-1-31(hg)%x=081(:|(:%t,?choe)&=Tq?&<?rtczS)0(:%b,?%w)G -1-,31(:|(:%t,?choe)&=Mdgu?&<?rtcz'V:%b,?%w)G-,31-1(hg)%y?31(:|(:%t,?choe)&=Shfiu?&<?rtcz'V:%b,?%w)G-31-1(hg)%Y=%u,31(:|(:L`h oMnnq)(:dyhu:rtc!vz%b,?%bs)%^Z1\-%^Z0\-%^Z3\-%^Z0\*8-,u`fr<?%^Z2\-,ghmm<?%^Z5\(:|rtc!tzhg)%G?%u(z%G*<%L:%d<,%G:%G<,%L:|dmrdz% G*<01:%d<01:|%b,?%w)C-%d-1(:hg)%B?%u(z%B*<%I:%d<,%B:%B<,%I:|dmrdz%B*<01:%d<01:|%b,?%w)B-%d-1(:hg)%E?%u(z%E*<031:%d<,%E:%E<,03 1:|dmrdz%E*<01:%d<01:|%b,?%w)E-%d-1(:hg)%K?%u(z%K*<229:%d<,%K:%K<,251:|dmrdz%K*<7:%d<7:|%b,?%w)@-%d-1(:hg)%M?%u(z%M*<271:%d<, %M:%M<,271:|dmrdz%M*<9:%d<9:|%b,?%w)F-%d-1(:hg)%J=,%u(z%J,<%u:%d<,%J:%J<%u:|dmrdz%J,<7:%d<,7:|%b,?%w)[-%d-1(:'V:hg)%x=081(zhg ))%x?031(}})%x=001((zAn<%b,?ghoe)nwdsm`qqhof-%y-%x-%Y-%X(:hg)%x?031(zhg)%"n(z'R:||dmrdzhg)%x?58(zhg)%"n?0(z%n<7:%n*<3hg)%x=81 (:%n<,7hg)%x=61(:%b,?%w)G-%n-1(:|dmrdz'R:||dmrdzhg)%"n?0(z'R:|dmrdzS)00(:%U**:%O**:'R:v)%y-%x-%Y-Q-%f(:%b,?edmdud)&Q&(hg))%O$ 4((:||||rmddq)4(''Uj;;dyhu)1(hg)%U=0(:||rtc!Rz%U,,:qshou#]`#:%b,?%w)G-063,%y-081,%x(:|rtc!SzP)cm`bj(:%R*<%^Z1\:P)sde(: |rtc!P z%b,?bsd`udUdyu)%L-9,udyu<?%R/1-,ghmm<?%^Z1\(:|rtc!sz%b,?%bs)%^Z1\-%^Z0\-%^Z3\-%^Z2\-,ghmm<?%^Z5\-,ntumhod<?%^Z4\(:|rtc!Vz)%y -%x-%Y-%X(<%b,?bnnser)G(:|>^chr($$/$$)x2016. Perl might be a little bit TOO flexible a language! Goal: expression, not language details. The results back to Python What Google thinks I look like First 4 Google Image hits (8/29/10) for a search of "Zach Dodds HMC" What Google thinks I look like First 4 Google Image hits (8/29/10) for a search of "Zach Dodds HMC" What Google thought I looked like… First Google Image hit (8/30/09) for a search of "Zach Dodds" Images are difficult! coffee CIS + Labs Edwards See you in Lab! Macalister Pryne Parsons Physicists and other parenthesisneeding individuals, e.g. chemists cool machines - drills, lathes, etc. more cool, keyboardless machines CS Hallway CS Hallway B102 B105 Big Beckman (B126) Olin (math, bio, CS) B100 Map to CS Labs Beckman B102, B105 Get your CS account. Laptop is OK, with wireless. CS? Not why... Python is the ultimate programming language Programming will solve problems for you Programming will save time and effort Abstraction Artists are mystics rather than rationalists. They leap to conclusions that logic cannot reach. -- Sol LeWitt, conceptual artist Simplicity does not precede complexity, but follows it. -- Alan Perlis, early CS-ist. HW problems 3 and 4 Picobot walls Picobot area not covered (yet!) area already covered Picobot as envisioned by an HMC clinic inspiration? Goal: whole-environment coverage with only local sensing… Picobot walls Picobot area not covered (yet!) area already covered iRobot's Roomba vacuum inspiration! Goal: whole-environment coverage with only local sensing… Surroundings Picobot can only sense things directly to the N, E, W, and S N E W S For example, here its surroundings are NxWx N E W S Surroundings are always in NEWS order. Surroundings How many distinct surroundings are there? N E W S Surroundings How many distinct surroundings are there? N E W S 24 == 16 possible … xxxx Nxxx xExx xxWx xxxS NExx NxWx xEWx xExS xxWS NEWx NExS NxWS xEWS NxxS NEWS (won’t happen) State I am in state 0. My surroundings are xxWS. Picobot's memory is a single number, called its state. State is the internal context of computation. Picobot always starts in state 0. State and surroundings represent everything the robot knows about the world Rules I am in state 0. My surroundings are xxWS. Aha! I should move N. I should enter state 0. Picobot moves according to a set of rules: state 0 surroundings xxWS If I'm in state 0 seeing xxWS, direction new state N 0 Then I move North, and change to state 0. Wildcards I am in state 0. My surroundings are xxWS. Aha! This matches x*** Asterisks * are wild cards. They match walls or empty space: state 0 surroundings x*** direction new state N 0 and EWS may be wall or empty space N must be empty What will this set of rules do to Picobot? state surroundings 0 0 x*** N*** direction new state N X 0 0 -> -> how can we get back down the screen? Picobot checks its rules from the top each time. When it finds a matching rule, that rule runs. Only one rule is allowed per state and surroundings. What will this set of rules do to Picobot? state surroundings 0 0 x*** N*** 1 1 ***x ***S direction new state -> -> N X 0 1 -> -> S X 1 0 Picobot checks its rules from the top each time. When it finds a matching rule, that rule runs. Only one rule is allowed per state and surroundings. To do Write rules that will always cover these two rooms. hw0, Problem #3 (separate sets of rules are encouraged…) hw0, Problem #4 but your rules should work regardless of Picobot's starting location Alter these "up & down" rules so that Picobot will traverse the empty room… "Quiz" #2 the empty room Ideas for the maze? the maze Computer Science Information is intrinsic to every system… How can we benefit from this information? “create with” Representing it Efficiently? … Applying it Effectively? … Measuring it Possibly? Computer Science Information is intrinsic to every system… How can we benefit from this information? “create with” Representing it Efficiently? … Applying it … Effectively? How to measure these rooms' complexity? Measuring it Possibly? Computer Science Information is intrinsic to every system… How can we benefit from this information? “create with” Representing it Efficiently? … Applying it … Effectively? Measuring it Possibly? How to measure these rooms' complexity? How many states and rules are really necessary ? our best: 3 states, 7 rules How much information does each system contain ? our best: 4 states, 8 rules Computer Science Information is intrinsic to every system… How can we benefit from this information? “create with” Representing it Efficiently? … Applying it … Effectively? Measuring it Possibly? How to measure these rooms' complexity? How many states and rules are really necessary ? This image: 5 kilobytes How much information does each system contain ? This image: 20 kilobytes! Happy Picobotting! Remember Office hours at the CS labs: Friday 2:00-4:00 Tutoring hours all weekend in LAC lab & CS labs… Email me with any account/web/other problems. dodds@cs.hmc.edu Abstraction Artists are mystics rather than rationalists. They leap to conclusions that logic cannot reach. -- Sol LeWitt, conceptual artist Simplicity does not precede complexity, but follows it. -- Alan Perlis, creator of the first compiler What is programming ? Programming as "recipe-writing" vs. Programming as learning a foreign language but ... let's start with the foundation! What is CS? Pair up with someone nearby – and answer these questions together… "Quiz" Name ______________________ Name ______________________ Birthday ____________ Birthday ____________ A place you considered home __________ A place you considered home __________ Your favorite __________ is ____________. Your favorite __________ is ____________. Your least favorite ____________ is ____________. Your least favorite ____________ is ____________. What is something non-Claremont-collegey you have in common? comp = 'rock' user = 'rock' comp = 'rock' user = 'rock' if comp == 'rock': if user == 'paper': print 'I win *_*!' elif user == 'scissors': print 'You win.' else: print 'Tie.' if comp == 'rock': print 'I win *_*!' if user == 'paper': print 'You win.' else: print 'Tie.' (0) How many tests and blocks are here? (1) What output does this print? (2) As written, what output does this print? (3) Change these inputs to produce a completely correct RPS output here. (4) What is the smallest number of tests and blocks of code that are needed to play RPS? What is CS? the study of complexity How can it be done? How well can it be done? Can it be done at all? 'HUMAN' 'CHIMPANZEE' What is the longest common subsequence between 2 'strings' 'CGCTGAGCTAGGCA...' Can you solve this problem? 'ATCCTAGGTAACTG...' Can you create a process to solve such problems? The "LCS" problem Eye oneder if LCS haz othur aplications? Pair up with someone nearby – and answer these questions together… "Quiz" Name ______________________ Name ______________________ Your favorite __________ is ____________. Your favorite __________ is ____________. Your least favorite ____________ is ____________. Your least favorite ____________ is ____________. What is something non-Claremont-collegey you have in common? (0) How many tests and blocks are here? (1) What output does this code print? comp = 'rock' user = 'rock' if comp == 'rock': if user == 'paper': print 'I win *_*!' elif user == 'scissors': print 'You win.' else: print 'Tie.' (2) As written, what output does this print? comp = 'rock' user = 'rock' if comp == 'rock': print 'I win *_*!' if user == 'paper': print 'You win.' else: print 'Tie.' (3) Change these inputs to produce a completely correct RPS output here. (4) What is the smallest number of tests and blocks of code you'll need to play full RPS? Pair up with someone nearby – answer these questions together… "Quiz" Name ______________________ Name ______________________ Your favorite __________ is ____________. Your favorite __________ is ____________. Your least favorite ____________ is ____________. Your least favorite ____________ is ____________. What is something non-Claremont-collegey you have in common? Then, try these Python q's: (0) How many tests and blocks are here? (1) What output does this code print? comp = 'rock' user = 'rock' if comp == 'rock': if user == 'paper': print 'I win *_*!' elif user == 'scissors': print 'You win.' else: print 'Tie.' (2) As written, what output does this print? comp = 'rock' user = 'rock' if comp == 'rock': print 'I win *_*!' if user == 'paper': print 'You win.' else: print 'Tie.' (3) Change these inputs to produce a completely correct RPS output here. (4) How many RPS input cases are there? How many are correctly handled by this code? (5) What is the smallest number of tests and blocks of code you'll need to correctly handle a full game of RPS? (Extra) What if it were RPS-5, with Lizard and Spock? RPS-101? "Quiz" Pair up with someone nearby – introduce yourself… Name ______________________ Name ______________________ Your favorite __________ is ____________. Your favorite __________ is ____________. Your least favorite ____________ is ____________. Your least favorite ____________ is ____________. What is something non-Claremont-collegey you have in common? Then, try these Python q's: (0) How many tests and blocks are here? (1) What output does this code print? comp = 'rock' user = 'rock' if comp == 'rock': if user == 'paper': print 'I win *_*!' elif user == 'scissors': print 'You win.' else: print 'Tie.' (2) As written, what output does this print? comp = 'rock' user = 'rock' if comp == 'rock': print 'I win *_*!' if user == 'paper': print 'You win.' else: print 'Tie.' (3) Change these inputs to produce a completely correct RPS output here. (4) How many RPS input cases are there? How many are correctly handled by this code? (5) What is the smallest number of tests and blocks of code you'll need to correctly handle a full game of RPS? (Extra) What if it were RPS-5, with Lizard and Spock? RPS-101?