diff options
author | Marion <marion.zepf@gmail.com> | 2013-08-12 16:46:29 (GMT) |
---|---|---|
committer | Marion <marion.zepf@gmail.com> | 2013-08-12 16:46:29 (GMT) |
commit | 89099d7b2daaba664a4cef5e103c00b9bf0c8314 (patch) | |
tree | b3e89787bd9d6b3da89d07dfa19b3fd6d8e4b3b3 | |
parent | 3c1781ed7b21c22bc6df2b4960b3ec0a5963ae26 (diff) |
add Primitve for the 'square root' block
-rw-r--r-- | TurtleArt/tabasics.py | 42 | ||||
-rw-r--r-- | TurtleArt/taexportpython.py | 3 |
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 * |