def __call__(self, screen: Screen, buttons) -> None: if self.button.value is None or screen.screen_number is None: return # TODO: can the concatenated number have a dot or a sign? # If the screen number contains a sign or a dot, yield error if not screen.screen_number.value.is_integer(): screen.set_error() else: # Concatenate number on the right new_screen_repr = (ScreenNumber.str(screen.screen_number.value) + ScreenNumber.str(self.button.value)) screen.update_str(new_screen_repr)
def __call__(self, screen: Screen, buttons) -> None: if screen.screen_number is None: return if not screen.screen_number.value.is_integer(): # Yield error if the number is not whole screen.set_error() return elif screen.screen_number.value >= 0: screen_repr = ScreenNumber.str(screen.screen_number.value) # Reverse screen number new_screen_repr = screen_repr[::-1] else: screen_repr = ScreenNumber.str(screen.screen_number.value) # Reverse without taking the sign, but keep it new_screen_repr = '-' + screen_repr[:0:-1] screen.update_str(new_screen_repr)
def __call__(self, screen: Screen, buttons) -> None: if screen.screen_number is None: return # TODO: what happens with dot? screen_repr = ScreenNumber.str(screen.screen_number.value) new_screen_repr = ''.join([ (str(10 - int(d)) if d.isdigit() and int(d) > 0 else d) for d in screen_repr ]) screen.update_str(new_screen_repr)
def __call__(self, screen: Screen, buttons) -> None: if screen.screen_number is None: return if not screen.screen_number.value.is_integer(): # Yield error if the number is not whole screen.set_error() else: # Compute sum of digits and keep sign screen_repr = ScreenNumber.str(screen.screen_number.value) sign = 1 if screen.screen_number.value >= 0 else -1 digits = screen_repr if sign == 1 else screen_repr[1:] digit_sum: int = sum(map(int, digits)) screen.update_float(float(sign * digit_sum))
def __call__(self, screen: Screen, buttons) -> None: if screen.screen_number is None: return if not screen.screen_number.value.is_integer(): screen.set_error() else: screen_repr = ScreenNumber.str(screen.screen_number.value) if screen_repr.startswith('-') and len(screen_repr) < 3: new_screen_repr = '0' elif len(screen_repr) < 2: new_screen_repr = '0' else: new_screen_repr = screen_repr[:-1] screen.update_str(new_screen_repr)
def __call__(self, screen: Screen, buttons) -> None: if screen.screen_number is None: return # TODO: what happens with dot if not screen.screen_number.value.is_integer(): # Yield error if the number is not whole screen.set_error() else: # Keep sign in front screen_repr = ScreenNumber.str(screen.screen_number.value) sign = 1 if screen.screen_number.value >= 0 else -1 digits = screen_repr if sign == 1 else screen_repr[1:] shifted = ('' if sign == 1 else '-') + digits[-1] + digits[:-1] screen.update_str(shifted)
def __call__(self, screen: Screen, buttons) -> None: if screen.screen_number is None: return # ERROR if the number is not whole # If the number has a minus sign, do not concatenate the sign screen_repr = ScreenNumber.str(screen.screen_number.value) # Reverse and concatenate new_screen_repr = screen_repr + screen_repr[::-1] # If the number was negative, a trailing - was added, remove it if screen.screen_number.value < 0: new_screen_repr = new_screen_repr[:-1] # If the number had a dot originally, it will be duplicated # thereby creating an invalid float repr. which will be caught # by Screen.update() screen.update_str(new_screen_repr)
def __call__(self, screen: Screen, buttons) -> None: if screen.screen_number is None: return # TODO: make sure it follows the game's behaviour # For now, use str.replace on the screen's str representation # After it replaces one substring, continues on the *modified* result screen_repr: str = ScreenNumber.str(screen.screen_number) src_repr: str = self.button.value1 dst_repr: str = self.button.value2 # Yield error if screen number is not whole if not screen.screen_number.value.is_integer(): screen.set_error() else: new_screen_repr = screen_repr.replace(src_repr, dst_repr) screen.update_str(new_screen_repr)
def __call__(self, screen: Screen, buttons) -> None: if screen.screen_number is None: return # Load value into button self.button.value = ScreenNumber.str(screen.screen_number.value)