jefryjeyjonson
@jefryjeyjonson
Юный программист

Как реализовать функции 'sqrt' и 'clear'?

Пишу свой первый калькулятор ,на киви. Возникли сложности с реализацией кнопок '√' и 'c'.

В случае с корнем, программа тупо вылетает ,при нажатии ' = '; А с ' c ' тоже ,но по нажатию на "c".
код
from kivy.app import App

from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout



from kivy.config import Config

Config.set('graphics', 'resizable', 0)
Config.set('graphics', 'width', 400)
Config.set('graphics', 'height', 500)
class CulcApp(App):
    def clear_str(self):                # вылетает
         self.formula = ' '
         self.update_label()

    def update_label(self):
        self.lbl.text = self.formula

    def addnumber(self,  instance):
        if self.formula == '0':
           self.formula = ' '
        
        self.formula += str(instance.text)
        self.update_label()
    
    def culc_result(self, instance):                   
        self.lbl.text = str(eval(self.lbl.text))
        self.formula = '0'

    def addoperation(self, instance):
        if str(instance.text).lower() == 'x':
            self.formula += '*'
        else:
            self.formula += str(instance.text)

        if str(instance.text).lower() == '√':
            self.formula += 'sqrt'
        
        else:
            self.formula += str(instance.text)

        self.update_label()

     

    def build(self):
        self.formula = '0'

        bl = BoxLayout(orientation = 'vertical', padding = 11)
        gl = GridLayout(cols = 4, spacing = 3, size_hint = (1, .6))
        
        self.lbl = Label(
            text = '0', font_size = 40,
             size_hint = (1, .4),
              valign = "center",
               halign = 'right',
               text_size = (400 - 50, 500 * .4 - 50))
        
        bl.add_widget( self.lbl)

        gl.add_widget( Button(text = '%', on_press = self.addoperation))
        gl.add_widget( Button(text = '√', on_press = self.addoperation)) # прописать ему отдельную функци
        gl.add_widget( Button(text = '/', on_press = self.addoperation))
        gl.add_widget( Button(text = 'С', on_press = self.clear_str))

        gl.add_widget( Button(text = '7', on_press = self.addnumber))
        gl.add_widget( Button(text = '8', on_press = self.addnumber))
        gl.add_widget( Button(text = '9', on_press = self.addnumber))
        gl.add_widget( Button(text = 'x', on_press = self.addoperation))

        gl.add_widget( Button(text = '4', on_press = self.addnumber))
        gl.add_widget( Button(text = '5', on_press = self.addnumber))
        gl.add_widget( Button(text = '6', on_press = self.addnumber))
        gl.add_widget( Button(text = '-', on_press = self.addoperation))

        gl.add_widget( Button(text = '1', on_press = self.addnumber))
        gl.add_widget( Button(text = '2', on_press = self.addnumber))
        gl.add_widget( Button(text = '3', on_press = self.addnumber))
        gl.add_widget( Button(text = '+', on_press = self.addoperation))

        gl.add_widget( Widget())
        gl.add_widget( Button(text = '0', on_press = self.addnumber))
        gl.add_widget( Button(text = '.', on_press = self.addnumber))
        gl.add_widget( Button(text = '=', on_press = self.culc_result))
        
        bl.add_widget( gl)
        return bl

if __name__ == '__main__':
    CulcApp().run()



Прошу совета, аргументированной критики ну или ссылку на учебный материал по этой теме.
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
longclaps
@longclaps
sqrt следует импортировать из math.
Что до [c] - разберись сам, тебе поможет простейший приём отладки - выведи в консоль текст, который передёшь в eval.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Popmechanic Москва
от 100 000 до 150 000 руб.
Panda Media Нижний Новгород
от 70 000 руб.
НЛ Континент Новосибирск
от 60 000 до 100 000 руб.
15 авг. 2018, в 11:49
700 руб./в час
15 авг. 2018, в 11:44
2000 руб./за проект
15 авг. 2018, в 11:01
700 руб./в час