-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathComplete Python Codification.xml
More file actions
1 lines (1 loc) · 70.2 KB
/
Copy pathComplete Python Codification.xml
File metadata and controls
1 lines (1 loc) · 70.2 KB
1
<project name="cs10bb" app="Snap! 4.0, http://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" tempo="60" threadsafe="false" lines="round" codify="true" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list id="2"></list></costumes><sounds><list id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="-26" y="-150" heading="90" scale="1" rotation="1" draggable="true" costume="0" color="80,80,80" pen="tip" id="8"><costumes><list id="9"></list></costumes><sounds><list id="10"></list></sounds><variables></variables><blocks></blocks><scripts><comment x="20" y="20" w="408" collapsed="false">drag any example script into this ring:</comment><comment x="20" y="162.000004" w="408" collapsed="false">try the current script by executing it:</comment><script x="20" y="216.000004"><block s="doHideVar"><l>code</l></block><block s="doHideVar"><l>script</l></block><block s="doRun"><block var="script"/><list></list></block></script><script x="20" y="300.000004"><block s="doHideVar"><l>code</l><comment w="90" collapsed="true">Snap!</comment></block><block s="doShowVar"><l>script</l></block></script><script x="20" y="362.000004"><custom-block s="map to Python"><comment w="164" collapsed="true">Click here when you're ready!</comment></custom-block><block s="doHideVar"><l>script</l></block><block s="doShowVar"><l>code</l></block><block s="doSetVar"><l>code</l><block s="reportMappedCode"><block var="script"/></block><comment w="90" collapsed="false">TO EXPORT:</comment></block></script><script x="25" y="76"><block s="doSetVar"><l>script</l><block s="reifyScript"><script><custom-block s="main %cs"><script></script><comment w="128" collapsed="false">Place your code here! Make it's wrapped in the main command!</comment></custom-block></script><list></list></block></block></script></scripts></sprite><watcher var="script" style="normal" x="1.5" y="1" color="243,118,29" hidden="true"/><watcher var="code" style="normal" x="1" y="0.9999999999999574" color="243,118,29"/></sprites></stage><hidden> reportCONS reportCDR reportListContainsItem doDeleteFromList doInsertInList doReplaceInList reifyScript reifyReporter reifyPredicate doWarp doStopBlock doStop doStopAll fork evaluate doCallCC reportCallCC receiveOnClone createClone removeClone</hidden><headers><reportQuotient># This applies only to Python 2.6-2.7 Environments
from __future__ import division</reportQuotient><reportURL># Mapping for Snap! http:// block
def snapGetURL(url):
 # Import the proper URL library for python 2 or 3
 try:
 from urllib2 import urlopen
 except:
 from urllib.request import urlopen

 u = urlopen('http://' + str(url))
 raw = u.readall()
 # encodingA = u.getheader('Accept-Charset')
 # encodingB = u.getheader('Context-Type')
 # Currently try decoding as UTF-8, but we could be smarter
 try:
 return raw.decode('utf-8')
 except: # Can't decode, just return raw data.
 return raw
</reportURL><doSetFastTracking># Mapping for Turbo mode settings
def snapSetTurbo(value):
 """
 Change the settings for turbo mode
 """
 # If value isn't a boolean, exit.
 if not isinstance(value, bool):
 return
 
 _TURBO_ON = value
 if _TURBO_ON:
 _SPRITE.speed(0) # disable all sprite animations, go fast as possible.
 else:
 _SPRITE.speed(10)
 
</doSetFastTracking><doAsk># Map ask X and wait in Snap
def ask(quest):
 """
 Return an answer from the terminal, but this is Python 2.x and 3.x safe.
 """
 try:
 ans = raw_input(quest + ' ') # Python 2
 except NameError:
 ans = input(quest + ' ') # Python 3
 
 return ans
</doAsk><reportDate># Mapping for Snap! current(DATE) block
def snapCurrentDate(item):
 """
 item should be one of:
 year, month, date, day of week, hour, minute, second, time in milliseconds
 Note, in practice, you could make this code more compact with more complex
 syntax, but we're hoping to make things easily readable and understandable.
 """
 from datetime import datetime
 now = datetime.now()
 if item == 'year':
 return now.year
 elif item == 'month':
 return now.month
 elif item == 'date':
 return now.date
 elif item == 'day of week':
 # Snap weekdays are 1-7 sunday-saturday, Python is 0-6 monday to Sunday
 day = (now.weekday() + 2) % 7
 # Make sat be 7 instead of 0, since we used mod.
 return day if day != 0 else 7
 elif item == 'hour':
 return now.hour
 elif item == 'minute':
 return now.minute
 elif item == 'second':
 return now.second
 elif item == 'time in milliseconds':
 return time.time() #time module must be imported! (We did this already)
 else:
 return ''</reportDate><reportTextSplit># Mapping for Snap! split block
def snapSplit(st, delim):
 """
 Split items, if not delimeter is provided, split by strings.
 """
 st = str(st) # force conversion to string, if input isn't already.
 if delim == '':
 return list(st)
 return st.split(delim)
</reportTextSplit><reportRandom># Mapping for Random Numbers
def snpGetRandom(start, stop):
 """
 You must import the random module in Python for random numbers.
 The randint function is inclusive, just like Snap!'s
 """
 from random import randint
 return randint(start, stop) </reportRandom></headers><code><string>"<#1>"</string><tempvars_delim>,</tempvars_delim><delim>,</delim><doSayFor>print(<#1>)</doSayFor><bubble>print(<#1>)</bubble><doIf>if <#1>:
 <#2></doIf><doIfElse>if <#1>:
 <#2>
else: 
 <#3></doIfElse><reportSum>(<#1> + <#2>)</reportSum><reportDifference>(<#1> - <#2>)</reportDifference><reportProduct>(<#1> * <#2>)</reportProduct><reportQuotient>(<#1> / <#2>)</reportQuotient><reportModulus>(<#1> % <#2>)</reportModulus><reportLessThan>(<#1> < <#2>)</reportLessThan><reportEquals>(<#1> == <#2>)</reportEquals><reportGreaterThan>(<#1> > <#2>)</reportGreaterThan><reportAnd>(<#1> & <#2>)</reportAnd><reportOr>(<#1> | <#2>)</reportOr><reportNot>(!<#1>)</reportNot><reportTrue>True</reportTrue><reportFalse>False</reportFalse><reportJoinWords>(<#1>, <#2>)</reportJoinWords><reportStringSize>len(<#1>)</reportStringSize><doSetVar><#1> = <#2></doSetVar><doChangeVar><#1> += 1</doChangeVar><doShowVar>print(<#1>)</doShowVar><doDeclareVariables>#variables <#1></doDeclareVariables><reportNewList>[<#1>]</reportNewList><reportListLength>len(<#1>)</reportListLength><reportListItem>snapItemOf(<#1>, <#2>)</reportListItem><doAddToList><#2>.append(<#1>)</doAddToList><doReport>return <#1></doReport><reportDate>snapCurrentDate("<#1>")</reportDate><parms_delim>,</parms_delim><forward>__SPRITE.forward(<#1>)</forward><turn>__SPRITE.right(<#1>)</turn><turnLeft>__SPRITE.left(<#1>)</turnLeft><setHeading>__SPRITE.setjeading(<#1>)</setHeading><doFaceTowards>notImplemented('POIINT TOWARDS')</doFaceTowards><gotoXY>__SPRITE.setpos(<#1>, <#2>)</gotoXY><doGotoObject>notImplemented('GOTO')</doGotoObject><doGlide>__SPRITE.setpos(<#1>, <#2>)
notImplemented('GLIDE time')
</doGlide><changeXPosition>__SPRITE.setx(__SPRITE.xcor() + <#1>)</changeXPosition><setXPosition>__SPRITE.setx(<#1>)</setXPosition><changeYPosition>__SPRITE.sety(__SPRITE.ycor() + <#1>)</changeYPosition><setYPosition>__SPRITE.sety(<#1>)</setYPosition><bounceOffEdge>notImplemented('ON EDGE BOUNCE')</bounceOffEdge><xPosition>__SPRITE.xcor()</xPosition><yPosition>__SPRITE.ycor()</yPosition><direction>__SPRITE.heading()</direction><doBroadcast>notImplemented('BROADCAST')</doBroadcast><doBroadcastAndWait>notImplemented('BROADCAST WAIT')</doBroadcastAndWait><getLastMessage>notImplemented('MESSAGE')</getLastMessage><doWait>notImplemented('WAIT <#1> SEC')</doWait><doStopThis>notImplemented('STOP')</doStopThis><doStopOthers>notImplemented('STOP <#1>')</doStopOthers><doPauseAll>notImplemented('PAUSE ALL')</doPauseAll><doForever>while (True):
 <#1></doForever><doRepeat>for i in range(0, <#1>):
 <#2></doRepeat><doUntil>while (not <#1>):
 <#2></doUntil><doRun><#1></doRun><doThinkFor>print(<#1>)</doThinkFor><doThink>print(<#1>)</doThink><show>__SPRITE.showturtle()</show><hide>__SPRITE.hideturtle()</hide><doSwitchToCostume>notImplemented('SWITCH TO COSTUME')</doSwitchToCostume><doWearNextCostume>notImplemented('NEXT COSTUME')</doWearNextCostume><changeEffect>notImplemented('CHANGE EFFECT')</changeEffect><setEffect>notImplemented('SET EFFECT')</setEffect><clearEffects>notImplemented('CLEAR EFFECTS')</clearEffects><changeScale>notImplemented('CHANGE SIZE')</changeScale><setScale>notImplemented('SET SIZE')</setScale><comeToFront>notImplemented('GO TO FRONT')</comeToFront><goBack>notImplemented('GO BACK <#1> LAYERS')</goBack><getScale>notImplemented('SIZE')</getScale><getCostumeIdx>notImplemented('COSTUME #')</getCostumeIdx><reportURL>snapGetURL("<#1>")</reportURL><doAsk>__ANSWER = ask("<#1>")</doAsk><getLastAnswer>__ANSWER</getLastAnswer><doResetTimer>__TIME = time.time()</doResetTimer><getTimer># difference between now and the timer's time
time.time() - __TIMER</getTimer><reportTouchingObject>notImplemented("TOUCHING")</reportTouchingObject><reportTouchingColor>notImplemented("COLOR TOUCHING?")</reportTouchingColor><reportColorIsTouchingColor>notImplemented("COLOR IS TOUCHING COLOR?")</reportColorIsTouchingColor><reportMouseX>notImplemented('MOUSE X')</reportMouseX><reportMouseY>notImplemented('MOUSE Y')</reportMouseY><reportMouseDown>notImplemented('MOUSE DOWN')</reportMouseDown><doSetFastTracking>snapSetTurbo(<#1>)</doSetFastTracking><reportIsFastTracking>__TURBO_ON</reportIsFastTracking><reportAttributeOf>notImplemented("OF")</reportAttributeOf><playSound>notImplemented('PLAY SOUNCE <#1>')</playSound><doPlaySoundUntilDone>notImplemented('PLAY <#1> UNTIL DONE')</doPlaySoundUntilDone><doStopAllSounds>notImplemented('STOP ALL SOUNDS')</doStopAllSounds><doRest>notImplemented('REST FOR <#1> BEATS')</doRest><doPlayNote>notImplemented('PLEASE NOTE')</doPlayNote><doChangeTempo>notImplemented('CHANGE TEMPO')</doChangeTempo><doSetTempo>notImplemented('SET TEMPO')</doSetTempo><getTempo>notImplemented('TEMPO')</getTempo><reportRound>round(<#1>)</reportRound><reportMonadic>notImplemented('SNAP MATH FUNCTION')</reportMonadic><reportRandom>snapRandom(<#1>, <#2>)</reportRandom><reportTextSplit>snapSplit(<#1>, <#2>)</reportTextSplit><reportLetter><#2>[<#1> - 1]</reportLetter><reportUnicode>ord('<#1>')</reportUnicode><reportUnicodeAsLetter>chr(<#1>)</reportUnicodeAsLetter><reportIsA>notImplemented('IS A TYPE')</reportIsA><reportIsIdentical>notImplemented('IS IDENTIICAL')</reportIsIdentical><clear>turtle.clear()</clear><down>__SPRITE.down()</down><up>__SPRITE.up()</up><setColor>noImplemented("Setting Pen color")</setColor><changeHue>notImplemented('CHANGE PEN COLOR')</changeHue><setHue>notImplemented('SET PEN COLOR')</setHue><changeBrightness>notImplemented('CHANGE PEN SHADE')</changeBrightness><setBrightness>notImplemented('SET PEN SHADE')</setBrightness><changeSize>_SPRITE.pensize(__SPRITE.pensize() + <#1>)</changeSize><setSize>__SPRITE.pensize(<#1>)</setSize><doStamp>__SPRITE.stamp()</doStamp><doHideVar>notImplemented('HIDE VARIABLE')</doHideVar></code><blocks><block-definition s="while %'test' %'action'" type="command" category="control"><header></header><code>while <#1>:
 <#2>
</code><inputs><input type="%boolUE"></input><input type="%cs"></input></inputs><script><block s="doIf"><block s="evaluate"><block var="test"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><custom-block s="while %boolUE %cs"><block s="evaluate"><block var="test"/><list></list></block><block var="action"/></custom-block></script></block></script></block-definition><block-definition s="new List" type="reporter" category="lists"><header></header><code>[]</code><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="is %'thing' a Number?" type="predicate" category="operators"><header></header><code># Python supports two types of numbers, ints and floats (decimal numbers)
type(<#1>) is int or type(<#1>) is float</code><inputs><input type="%s">5</input></inputs><script><block s="doReport"><block s="reportIsA"><block var="thing"/><l><option>number</option></l></block></block></script></block-definition><block-definition s="main %'script'" type="command" category="control"><header>"""
BJC Beyond Blocks
This sets up mappings to make Snap! behave a bit more like Python
It is designed to be compatible with both 2.6+ and 3.3+ for use with online
interpreters where possible.
Functions should be heavily commented and readable by a novice.

The basic header sets inputs and variables that are global to the entire script. 
Individual functions import modules as necessary. 

Currently, this is designed to be done 1 script at a time, with only one sprite.
"""
# Basic Environment Setup
# __future__ must be first in a python program! Needed for 2.6+ only.
from __future__ import division, print_function
# For sprites, pens, and the timer
import turtle, time
# Setup a Global time.
__TIME = time.time()
# Global answer variable
__ANSWER = ''
# Set a turbo mode checker
__TURBO = False
# Create a 'Sprite'
__SPRITE = turtle.Turtle()
turtle.mode('logo')
__SPRITE.up()
__SPRTIE.speed(10)
# Doesn't account for bigger snap stages.
turtle.screensize(320, 480)


def notImplemented(b):
 print(b + " has not been implemented.\n")</header><code><#1></code><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="%'num' as text" type="reporter" category="operators"><header></header><code>str(<#1>)</code><inputs><input type="%n">5</input></inputs><script><block s="doReport"><block var="num"/></block></script></block-definition><block-definition s="for %'i' = %'start' to %'end' %'action'" type="command" category="control"><header></header><code>for <#1> in range(<#2>, <#3>):
 <#4></code><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">5</input><input type="%cs"></input></inputs><script><block s="doSetVar"><l>i</l><block var="start"/></block><custom-block s="while %boolUE %cs"><block s="reportLessThan"><block var="i"/><block s="reportSum"><block var="end"/><l>1</l></block></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></custom-block></script></block-definition><block-definition s="map to Python" type="command" category="other"><header></header><code></code><inputs></inputs><script><custom-block s="python code headers"></custom-block><custom-block s="python code motion"></custom-block><custom-block s="python code control"></custom-block><custom-block s="python code looks"></custom-block><custom-block s="python code sensing"></custom-block><custom-block s="python code sound"></custom-block><custom-block s="python code operators"></custom-block><custom-block s="python code pen"></custom-block><custom-block s="python code variables"></custom-block><custom-block s="python code lists"></custom-block></script></block-definition><block-definition s="join %'a' %'b'" type="reporter" category="operators"><header></header><code>(<#1> + <#2>)</code><inputs><input type="%txt">hello</input><input type="%txt">World</input></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="! %'n'" type="reporter" category="operators"><header>def fact(n):
 <body></header><code>fact(<#1>)</code><inputs><input type="%n">5</input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="n"/><l>0</l></block><script><block s="doReport"><l>1</l></block></script><script><block s="doReport"><block s="reportProduct"><block var="n"/><custom-block s="! %n"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block></block></block></script></block></script></block-definition><block-definition s="fib %'n'" type="reporter" category="operators"><header>def fib(n):
 <body></header><code>fib(<#1>)</code><inputs><input type="%n">7</input></inputs><script><block s="doIfElse"><block s="reportLessThan"><block var="n"/><l>2</l></block><script><block s="doReport"><block var="n"/></block></script><script><block s="doReport"><block s="reportSum"><custom-block s="fib %n"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block><custom-block s="fib %n"><block s="reportDifference"><block var="n"/><l>2</l></block></custom-block></block></block></script></block></script></block-definition><block-definition s="python code headers" type="command" category="other"><header></header><code></code><inputs></inputs><script><block s="doMapStringCode"><l>"<#1>"</l></block><block s="doMapListCode"><l><option>delimiter</option></l><l><option>variables</option></l><l>,</l></block><block s="doMapListCode"><l><option>delimiter</option></l><l><option>collection</option></l><l>,</l></block><block s="doMapListCode"><l><option>delimiter</option></l><l><option>parameters</option></l><l>,</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="main %cs"><script></script></custom-block></script><list></list></block><l><option>header</option></l><l>"""
BJC Beyond Blocks
This sets up mappings to make Snap! behave a bit more like Python
It is designed to be compatible with both 2.6+ and 3.3+ for use with online
interpreters where possible.
Functions should be heavily commented and readable by a novice.

The basic header sets inputs and variables that are global to the entire script. 
Individual functions import modules as necessary. 

Currently, this is designed to be done 1 script at a time, with only one sprite.
"""
# Basic Environment Setup
# __future__ must be first in a python program! Needed for 2.6+ only.
from __future__ import division, print_function
# For sprites, pens, and the timer
import turtle, time
# Setup a Global time.
__TIME = time.time()
# Global answer variable
__ANSWER = ''
# Set a turbo mode checker
__TURBO = False
# Create a 'Sprite'
__SPRITE = turtle.Turtle()
turtle.mode('logo')
__SPRITE.up()
__SPRTIE.speed(10)
# Doesn't account for bigger snap stages.
turtle.screensize(320, 480)


def notImplemented(b):
 print(b + " has not been implemented.\n")</l><comment w="90" collapsed="false">Setup All Global Headers Here</comment></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportURL"><l></l></block></autolambda><list></list></block><l><option>header</option></l><l># Mapping for Snap! http:// block
def snapGetURL(url):
 # Import the proper URL library for python 2 or 3
 try:
 from urllib2 import urlopen
 except:
 from urllib.request import urlopen

 u = urlopen('http://' + str(url))
 raw = u.readall()
 # encodingA = u.getheader('Accept-Charset')
 # encodingB = u.getheader('Context-Type')
 # Currently try decoding as UTF-8, but we could be smarter
 try:
 return raw.decode('utf-8')
 except: # Can't decode, just return raw data.
 return raw
</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doSetFastTracking"><l/></block></script><list></list></block><l><option>header</option></l><l># Mapping for Turbo mode settings
def snapSetTurbo(value):
 """
 Change the settings for turbo mode
 """
 # If value isn't a boolean, exit.
 if not isinstance(value, bool):
 return
 
 _TURBO_ON = value
 if _TURBO_ON:
 _SPRITE.speed(0) # disable all sprite animations, go fast as possible.
 else:
 _SPRITE.speed(10)
 
</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doAsk"><l></l></block></script><list></list></block><l><option>header</option></l><l># Map ask X and wait in Snap
def ask(quest):
 """
 Return an answer from the terminal, but this is Python 2.x and 3.x safe.
 """
 try:
 ans = raw_input(quest + ' ') # Python 2
 except NameError:
 ans = input(quest + ' ') # Python 3
 
 return ans
</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportDate"><l><option>month</option></l></block></autolambda><list></list></block><l><option>header</option></l><l># Mapping for Snap! current(DATE) block
def snapCurrentDate(item):
 """
 item should be one of:
 year, month, date, day of week, hour, minute, second, time in milliseconds
 Note, in practice, you could make this code more compact with more complex
 syntax, but we're hoping to make things easily readable and understandable.
 """
 from datetime import datetime
 now = datetime.now()
 if item == 'year':
 return now.year
 elif item == 'month':
 return now.month
 elif item == 'date':
 return now.date
 elif item == 'day of week':
 # Snap weekdays are 1-7 sunday-saturday, Python is 0-6 monday to Sunday
 day = (now.weekday() + 2) % 7
 # Make sat be 7 instead of 0, since we used mod.
 return day if day != 0 else 7
 elif item == 'hour':
 return now.hour
 elif item == 'minute':
 return now.minute
 elif item == 'second':
 return now.second
 elif item == 'time in milliseconds':
 return time.time() #time module must be imported! (We did this already)
 else:
 return ''</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportTextSplit"><l></l><l></l></block></autolambda><list></list></block><l><option>header</option></l><l># Mapping for Snap! split block
def snapSplit(st, delim):
 """
 Split items, if not delimeter is provided, split by strings.
 """
 st = str(st) # force conversion to string, if input isn't already.
 if delim == '':
 return list(st)
 return st.split(delim)
</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>sqrt</option></l><l>10</l></block></autolambda><list></list></block><l><option>header</option></l><l></l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportRandom"><l>1</l><l>10</l></block></autolambda><list></list></block><l><option>header</option></l><l># Mapping for Random Numbers
def snpGetRandom(start, stop):
 """
 You must import the random module in Python for random numbers.
 The randint function is inclusive, just like Snap!'s
 """
 from random import randint
 return randint(start, stop) </l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><l><option>header</option></l><l># Mapping for the item of block for lists
def snapItemOf(n, lst):
 """
 This is a pretty simple function, but handles the 'any' and 'last' options.
 In Python, it's generally bad to name variables the same as built in
 functions, so we use 'lst' instead of 'list'.
 """
 if len(lst) < 1:
 return ''
 if n == 'any':
 from random import choice
 return choice(lst)
 elif n == 'last':
 return lst[len(lst) - 1]
 else:
 return lst[n - 1]
</l></block></script></block-definition><block-definition s="python code motion" type="command" category="motion"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="forward"><l>10</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.forward(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="turn"><l>15</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.right(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="turnLeft"><l>15</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.left(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setHeading"><l>90</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.setjeading(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doFaceTowards"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('POIINT TOWARDS')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="gotoXY"><l>0</l><l>0</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.setpos(<#1>, <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doGotoObject"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('GOTO')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doGlide"><l>1</l><l>0</l><l>0</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.setpos(<#1>, <#2>)
notImplemented('GLIDE time')
</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="changeXPosition"><l>10</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.setx(__SPRITE.xcor() + <#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setXPosition"><l>0</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.setx(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="changeYPosition"><l>10</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.sety(__SPRITE.ycor() + <#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setYPosition"><l>0</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.sety(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="bounceOffEdge"></block></script><list></list></block><l><option>code</option></l><l>notImplemented('ON EDGE BOUNCE')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="xPosition"></block></autolambda><list></list></block><l><option>code</option></l><l>__SPRITE.xcor()</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="yPosition"></block></autolambda><list></list></block><l><option>code</option></l><l>__SPRITE.ycor()</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="direction"></block></autolambda><list></list></block><l><option>code</option></l><l>__SPRITE.heading()</l></block></script></block-definition><block-definition s="python code control" type="command" category="control"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="main %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l><#1></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doIf"><l/><script></script></block></script><list></list></block><l><option>code</option></l><l>if <#1>:
 <#2></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doIfElse"><l/><script></script><script></script></block></script><list></list></block><l><option>code</option></l><l>if <#1>:
 <#2>
else: 
 <#3></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doReport"><l></l></block></script><list></list></block><l><option>code</option></l><l>return <#1></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="while %boolUE %cs"><l/><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>while <#1>:
 <#2>
</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="for %upvar = %n to %n %cs"><l>i</l><l>1</l><l>5</l><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>for <#1> in range(<#2>, <#3>):
 <#4></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doBroadcast"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('BROADCAST')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doBroadcastAndWait"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('BROADCAST WAIT')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="getLastMessage"></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('MESSAGE')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doWait"><l>1</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('WAIT <#1> SEC')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doStopThis"><l><option>all</option></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('STOP')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doStopOthers"><l><option>all but this script</option></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('STOP <#1>')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doPauseAll"></block></script><list></list></block><l><option>code</option></l><l>notImplemented('PAUSE ALL')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doForever"><script></script></block></script><list></list></block><l><option>code</option></l><l>while (True):
 <#1></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doRepeat"><l>10</l><script></script></block></script><list></list></block><l><option>code</option></l><l>for i in range(0, <#1>):
 <#2></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doUntil"><l/><script></script></block></script><list></list></block><l><option>code</option></l><l>while (not <#1>):
 <#2></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script></script><list></list></block><list></list></block></script><list></list></block><l><option>code</option></l><l><#1></l></block></script></block-definition><block-definition s="python code looks" type="command" category="looks"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doSayFor"><l>Hello!</l><l>2</l></block></script><list></list></block><l><option>code</option></l><l>print(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="bubble"><l>Hello!</l></block></script><list></list></block><l><option>code</option></l><l>print(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doThinkFor"><l>Hmm...</l><l>2</l></block></script><list></list></block><l><option>code</option></l><l>print(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doThink"><l>Hmm...</l></block></script><list></list></block><l><option>code</option></l><l>print(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="show"></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.showturtle()</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="hide"></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.hideturtle()</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doSwitchToCostume"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('SWITCH TO COSTUME')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doWearNextCostume"></block></script><list></list></block><l><option>code</option></l><l>notImplemented('NEXT COSTUME')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="changeEffect"><l><option>ghost</option></l><l>25</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('CHANGE EFFECT')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setEffect"><l><option>ghost</option></l><l>0</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('SET EFFECT')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="clearEffects"></block></script><list></list></block><l><option>code</option></l><l>notImplemented('CLEAR EFFECTS')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="changeScale"><l>10</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('CHANGE SIZE')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setScale"><l>100</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('SET SIZE')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="comeToFront"></block></script><list></list></block><l><option>code</option></l><l>notImplemented('GO TO FRONT')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="goBack"><l>1</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('GO BACK <#1> LAYERS')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="getScale"></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('SIZE')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="getCostumeIdx"></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('COSTUME #')</l></block></script></block-definition><block-definition s="python code sensing" type="command" category="sensing"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportURL"><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>snapGetURL("<#1>")</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportDate"><l><option>month</option></l></block></autolambda><list></list></block><l><option>code</option></l><l>snapCurrentDate("<#1>")</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doAsk"><l></l></block></script><list></list></block><l><option>code</option></l><l>__ANSWER = ask("<#1>")</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="getLastAnswer"></block></autolambda><list></list></block><l><option>code</option></l><l>__ANSWER</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doResetTimer"></block></script><list></list></block><l><option>code</option></l><l>__TIME = time.time()</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="getTimer"></block></autolambda><list></list></block><l><option>code</option></l><l># difference between now and the timer's time
time.time() - __TIMER</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportTouchingObject"><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented("TOUCHING")</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportTouchingColor"><color>145,26,68,1</color></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented("COLOR TOUCHING?")</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportColorIsTouchingColor"><color>145,26,68,1</color><color>145,26,68,1</color></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented("COLOR IS TOUCHING COLOR?")</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportMouseX"></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('MOUSE X')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportMouseY"></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('MOUSE Y')</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportMouseDown"></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('MOUSE DOWN')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doSetFastTracking"><l/></block></script><list></list></block><l><option>code</option></l><l>snapSetTurbo(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportIsFastTracking"></block></autolambda><list></list></block><l><option>code</option></l><l>__TURBO_ON</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportAttributeOf"><l><option>costume #</option></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented("OF")</l></block></script></block-definition><block-definition s="python code sound" type="command" category="sound"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="playSound"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('PLAY SOUNCE <#1>')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doPlaySoundUntilDone"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('PLAY <#1> UNTIL DONE')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doStopAllSounds"></block></script><list></list></block><l><option>code</option></l><l>notImplemented('STOP ALL SOUNDS')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doRest"><l>0.2</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('REST FOR <#1> BEATS')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doPlayNote"><l>60</l><l>0.5</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('PLEASE NOTE')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doChangeTempo"><l>20</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('CHANGE TEMPO')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doSetTempo"><l>60</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('SET TEMPO')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="getTempo"></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('TEMPO')</l></block></script></block-definition><block-definition s="python code operators" type="command" category="operators"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> + <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportDifference"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> - <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> * <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportQuotient"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> / <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportModulus"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> % <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportLessThan"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> < <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportEquals"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> == <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> > <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportAnd"><l/><l/></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> & <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportOr"><l/><l/></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> | <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportNot"><l/></block></autolambda><list></list></block><l><option>code</option></l><l>(!<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportTrue"></block></autolambda><list></list></block><l><option>code</option></l><l>True</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportFalse"></block></autolambda><list></list></block><l><option>code</option></l><l>False</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="join %txt %txt"><l>hello</l><l>World</l></custom-block></autolambda><list></list></block><l><option>code</option></l><l>(<#1> + <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportStringSize"><l>world</l></block></autolambda><list></list></block><l><option>code</option></l><l>(<#1>.length)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><custom-block s="is %s a Number?"><l>5</l></custom-block></autolambda><list></list></block><l><option>code</option></l><l>isinstance(<#1>, (int, long, float, complex))</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="%n as text"><l>5</l></custom-block></autolambda><list></list></block><l><option>code</option></l><l>str(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="! %n"><l>5</l></custom-block></autolambda><list></list></block><l><option>header</option></l><l>def fact(n):
 <body></l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="! %n"><l>5</l></custom-block></autolambda><list></list></block><l><option>code</option></l><l>fact(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="fib %n"><l>7</l></custom-block></autolambda><list></list></block><l><option>header</option></l><l>def fib(n):
 <body></l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="fib %n"><l>7</l></custom-block></autolambda><list></list></block><l><option>code</option></l><l>fib(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportRound"><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>round(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>sqrt</option></l><l>10</l></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('SNAP MATH FUNCTION')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportRandom"><l>1</l><l>10</l></block></autolambda><list></list></block><l><option>code</option></l><l>snapGetRandom(<#1>, <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportTextSplit"><l>hello world</l><l> </l></block></autolambda><list></list></block><l><option>code</option></l><l>snapSplit(<#1>, <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportLetter"><l>1</l><l>world</l></block></autolambda><list></list></block><l><option>code</option></l><l><#2>[<#1> - 1]</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportStringSize"><l>world</l></block></autolambda><list></list></block><l><option>code</option></l><l>len(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportUnicode"><l>a</l></block></autolambda><list></list></block><l><option>code</option></l><l>ord('<#1>')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportUnicodeAsLetter"><l>65</l></block></autolambda><list></list></block><l><option>code</option></l><l>chr(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportIsA"><l>5</l><l><option>number</option></l></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('IS A TYPE')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportIsIdentical"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>notImplemented('IS IDENTIICAL')</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="is %s a Number?"><l>5</l></custom-block></autolambda><list></list></block><l><option>code</option></l><l># Python supports two types of numbers, ints and floats (decimal numbers)
type(<#1>) is int or type(<#1>) is float</l></block></script></block-definition><block-definition s="python code lists" type="command" category="lists"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportNewList"><list></list></block></autolambda><list></list></block><l><option>code</option></l><l>[<#1>]</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="new List"></custom-block></autolambda><list></list></block><l><option>code</option></l><l>[]</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportListLength"><l/></block></autolambda><list></list></block><l><option>code</option></l><l>len(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><l><option>code</option></l><l>snapItemOf(<#1>, <#2>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doAddToList"><l>thing</l><l/></block></script><list></list></block><l><option>code</option></l><l><#2>.append(<#1>)</l></block></script></block-definition><block-definition s="python code pen" type="command" category="pen"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="clear"></block></script><list></list></block><l><option>code</option></l><l>turtle.clear()</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="down"></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.down()</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="up"></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.up()</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setColor"><color>145,26,68,1</color></block></script><list></list></block><l><option>code</option></l><l>noImplemented("Setting Pen color")</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="changeHue"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('CHANGE PEN COLOR')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setHue"><l>0</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('SET PEN COLOR')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="changeBrightness"><l>10</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('CHANGE PEN SHADE')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setBrightness"><l>100</l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('SET PEN SHADE')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="changeSize"><l>1</l></block></script><list></list></block><l><option>code</option></l><l>_SPRITE.pensize(__SPRITE.pensize() + <#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="setSize"><l>1</l></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.pensize(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doStamp"></block></script><list></list></block><l><option>code</option></l><l>__SPRITE.stamp()</l></block></script></block-definition><block-definition s="python code variables" type="command" category="variables"><header></header><code></code><inputs></inputs><script><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doSetVar"><l></l><l>0</l></block></script><list></list></block><l><option>code</option></l><l><#1> = <#2></l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doChangeVar"><l></l><l>1</l></block></script><list></list></block><l><option>code</option></l><l><#1> += 1</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doShowVar"><l></l></block></script><list></list></block><l><option>code</option></l><l>print(<#1>)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doHideVar"><l></l></block></script><list></list></block><l><option>code</option></l><l>notImplemented('HIDE VARIABLE')</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>a</l></list></block></script><list></list></block><l><option>code</option></l><l>#variables <#1></l></block></script></block-definition></blocks><variables><variable name="code"><l>"""
BJC Beyond Blocks
This sets up mappings to make Snap! behave a bit more like Python
It is designed to be compatible with both 2.6+ and 3.3+ for use with online
interpreters where possible.
Functions should be heavily commented and readable by a novice.

The basic header sets inputs and variables that are global to the entire script. 
Individual functions import modules as necessary. 

Currently, this is designed to be done 1 script at a time, with only one sprite.
"""
# Basic Environment Setup
# __future__ must be first in a python program! Needed for 2.6+ only.
from __future__ import division, print_function
# For sprites, pens, and the timer
import turtle, time
# Setup a Global time.
__TIME = time.time()
# Global answer variable
__ANSWER = ''
# Set a turbo mode checker
__TURBO = False
# Create a 'Sprite'
__SPRITE = turtle.Turtle()
turtle.mode('logo')
__SPRITE.up()
__SPRTIE.speed(10)
# Doesn't account for bigger snap stages.
turtle.screensize(320, 480)


def notImplemented(b):
 print(b + " has not been implemented.\n")

# Mapping for Snap! current(DATE) block
def snapCurrentDate(item):
 """
 item should be one of:
 year, month, date, day of week, hour, minute, second, time in milliseconds
 Note, in practice, you could make this code more compact with more complex
 syntax, but we're hoping to make things easily readable and understandable.
 """
 from datetime import datetime
 now = datetime.now()
 if item == 'year':
 return now.year
 elif item == 'month':
 return now.month
 elif item == 'date':
 return now.date
 elif item == 'day of week':
 # Snap weekdays are 1-7 sunday-saturday, Python is 0-6 monday to Sunday
 day = (now.weekday() + 2) % 7
 # Make sat be 7 instead of 0, since we used mod.
 return day if day != 0 else 7
 elif item == 'hour':
 return now.hour
 elif item == 'minute':
 return now.minute
 elif item == 'second':
 return now.second
 elif item == 'time in milliseconds':
 return time.time() #time module must be imported! (We did this already)
 else:
 return ''

print(snapCurrentDate("year"))</l></variable><variable name="script"><context id="1732"><inputs></inputs><variables></variables><script><custom-block s="main %cs"><script><block s="bubble"><block s="reportDate"><l><option>year</option></l></block></block></script><comment w="128" collapsed="false">Place your code here! Make it's wrapped in the main command!</comment></custom-block></script><receiver></receiver><context id="1742"><inputs></inputs><variables></variables><receiver></receiver></context></context></variable></variables></project>