Skip to content
Snippets Groups Projects
Select Git revision
  • eda69ca6d71e79d96218c211dfd529768c72965d
  • main default protected
2 results

main.py

Blame
  • main.py 1.68 KiB
    from math import inf
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.properties import NumericProperty, StringProperty, ListProperty
    
    
    class Field(BoxLayout):
        index = NumericProperty()
        entry = StringProperty()
    
    
    class Fields(BoxLayout):
        entries = ListProperty([])  # elements are strings (some may not be valid numbers)
    
        def rebuild(self):
            while len(self.children) > len(self.entries):
                self.remove_widget(self.children[0])
            while len(self.children) < len(self.entries):
                self.add_widget(Field(index=len(self.children)))
    
        def on_entries(self, _, __):
            self.rebuild()
            for field, entry in zip(reversed(self.children), self.entries):
                field.entry = entry
    
    
    class SmallestPositiveApp(App):
        entries = ListProperty([])  # elements are strings (some may not be valid numbers)
        result = NumericProperty(inf)
    
        def add_field(self):
            self.entries.append('')
    
        def remove_field(self):
            try:
                self.entries.pop()
            except IndexError:
                pass
    
        @staticmethod
        def _find_smallest_positive(entries):
            smallest_positive = inf
            for entry in entries:
                try:
                    value = float(entry)
                    if 0 < value < smallest_positive:
                        smallest_positive = value
                except ValueError:
                    pass
            return smallest_positive
    
        def on_entries(self, _, __):
            self.result = SmallestPositiveApp._find_smallest_positive(self.entries)
    
        def set_entry(self, index, entry):
            self.entries[index] = entry
    
    
    if __name__ == '__main__':
        app = SmallestPositiveApp()
        app.run()