Пример #1
0
        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)
Пример #2
0
        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)
Пример #3
0
        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)
Пример #4
0
        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))
Пример #5
0
        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)
Пример #6
0
        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)
Пример #7
0
        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)
Пример #8
0
        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)
Пример #9
0
        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)