Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarion <marion.zepf@gmail.com>2013-08-12 16:46:29 (GMT)
committer Marion <marion.zepf@gmail.com>2013-08-12 16:46:29 (GMT)
commit89099d7b2daaba664a4cef5e103c00b9bf0c8314 (patch)
treeb3e89787bd9d6b3da89d07dfa19b3fd6d8e4b3b3
parent3c1781ed7b21c22bc6df2b4960b3ec0a5963ae26 (diff)
add Primitve for the 'square root' block
-rw-r--r--TurtleArt/tabasics.py42
-rw-r--r--TurtleArt/taexportpython.py3
2 files changed, 29 insertions, 16 deletions
diff --git a/TurtleArt/tabasics.py b/TurtleArt/tabasics.py
index f6ea917..97ce4fd 100644
--- a/TurtleArt/tabasics.py
+++ b/TurtleArt/tabasics.py
@@ -99,6 +99,8 @@ class Palettes():
"convert_value_for_move": Primitive(self.convert_value_for_move,
export_me=False),
"convert_for_cmp": Primitive(Primitive.convert_for_cmp,
+ constant_args={'decimal_point': self.tw.decimal_point}),
+ "convert_to_number": Primitive(Primitive.convert_to_number,
constant_args={'decimal_point': self.tw.decimal_point})
} # avoid several Primitives of the same function
@@ -685,7 +687,6 @@ blocks'))
lambda self, x, y:
primitive_dictionary['remainder'](x, y))
- primitive_dictionary['sqrt'] = self._prim_sqrt
palette.add_block('sqrt',
style='number-style-1arg',
label=_('√'),
@@ -694,7 +695,13 @@ blocks'))
logo_command='tasqrt',
help_string=_('calculates square root'))
self.tw.lc.def_prim('sqrt', 1,
- lambda self, x: primitive_dictionary['sqrt'](x))
+ Primitive(sqrt,
+ slot_wrappers={0: Primitive(self.check_non_negative,
+ slot_wrappers={0: Primitive(self.check_number,
+ slot_wrappers={0:
+ self.prim_cache["convert_to_number"]},
+ export_me=False)},
+ export_me=False)}))
primitive_dictionary['random'] = self._prim_random
palette.add_block('random',
@@ -1183,11 +1190,27 @@ variable'))
def check_number(self, value):
''' Check if value is a number. If yes, return the value. If no,
- raise an error. '''
+ raise a logoerror. '''
if not _num_type(value):
raise logoerror("#notanumber")
return value
+ def check_non_negative(self, x, msg="#negroot"):
+ ''' Raise a logoerror iff x is negative. Otherwise, return x
+ unchanged.
+ msg -- the name of the logoerror message '''
+ if x < 0:
+ raise logoerror(msg)
+ return x
+
+ def check_non_zero(self, x, msg="#zerodivide"):
+ ''' Raise a logoerror iff x is zero. Otherwise, return x
+ unchanged.
+ msg -- the name of the logoerror message '''
+ if x == 0:
+ raise logoerror(msg)
+ return x
+
def after_right(self, *ignored_args):
if self.tw.lc.update_values:
self.tw.lc.update_label_value(
@@ -1366,19 +1389,6 @@ variable'))
except ValueError:
raise logoerror("#syntaxerror")
- def _prim_sqrt(self, x):
- ''' Square root '''
- if _num_type(x):
- if x < 0:
- raise logoerror("#negroot")
- return sqrt(x)
- try:
- return sqrt(self._string_to_num(x))
- except ValueError:
- raise logoerror("#negroot")
- except TypeError:
- raise logoerror("#notanumber")
-
def _prim_random(self, x, y):
''' Random integer '''
if _num_type(x) and _num_type(y):
diff --git a/TurtleArt/taexportpython.py b/TurtleArt/taexportpython.py
index 0816d9f..c87757d 100644
--- a/TurtleArt/taexportpython.py
+++ b/TurtleArt/taexportpython.py
@@ -38,6 +38,9 @@ from tautils import (debug_output, find_group, find_top_block)
_SETUP_CODE_START = """\
#!/usr/bin/env python
+from math import sqrt
+from random import uniform
+
from pyexported.window_setup import *