Калькулятор Kivy: как запретить ввод одинаковых знаков (+,-,*) подряд: 4++3

449 просмотра
0
0 Комментариев

Есть код на Kivy:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.config import Config
from kivy.uix.label import Label
 
Config.set('graphics','resizable','0')
Config.set('graphics','width','400')
Config.set('graphics','height','450')
 
 
class Calculator(App):
    def calculat_e(self,instance):
        self.lbl.text = str(eval(self.lbl.text))
        self.formula = ''
 
    def update_label(self):
            if self.formula != '+' and self.formula != '*' and self.formula != '-' and self.formula != '.' :
                # if '*' in mas:
                self.lbl.text  = self.formula
 
    def add_number(self,instance):
        if self.formula == '0' :
            self.formula = ''
        if self.formula == '+':
            self.formula = ''
        if self.formula == '-':
            self.formula = ''
        if self.formula == '*':
            self.formula = ''
        if self.formula == '.':
            self.formula = ''
        # if self.lbl.text[len(self.lbl.text)-1] != '**':
        if len(self.lbl.text) != 13:
            self.formula += str(instance.text)
            self.update_label()
 
    def clear_(self,instance):
        self.lbl.text = '0'
        self.formula = ''
 
    def build(self):
 
        self.formula = "0"
 
        bl = BoxLayout(orientation='vertical')
        gl = GridLayout(cols=4,spacing=3,padding=[10])
        self.lbl = (Label(text='0',font_size= 50,size_hint=[1,.35],text_size=(400-20,450 * .35 -20 ),halign='right',valign='center'))
        bl.add_widget(self.lbl)
        gl.add_widget(Button(text='7',on_press= self.add_number))
        gl.add_widget(Button(text='8',on_press= self.add_number))
        gl.add_widget(Button(text='9',on_press= self.add_number))
        gl.add_widget(Button(text='*',background_color=[0,0,1,1],on_press= self.add_number))
        gl.add_widget(Button(text='4',on_press= self.add_number))
        gl.add_widget(Button(text='5',on_press= self.add_number))
        gl.add_widget(Button(text='6',on_press= self.add_number))
        gl.add_widget(Button(text='-',background_color=[0,0,1,1],on_press= self.add_number))
 
        gl.add_widget(Button(text='1',on_press= self.add_number))
        gl.add_widget(Button(text='2',on_press= self.add_number))
        gl.add_widget(Button(text='3',on_press= self.add_number))
        gl.add_widget(Button(text='+',background_color=[0,0,1,1],on_press= self.add_number))
        gl.add_widget(Button(text='C',on_press=self.clear_,background_color=[0,1,1,1]))
        gl.add_widget(Button(text='0',on_press= self.add_number))
        gl.add_widget(Button(text='.',on_press= self.add_number))
        gl.add_widget(Button(text='=',background_color=[0,0,1,1],on_press = self.calculat_e))
 
        bl.add_widget(gl)
        return bl
 
Calculator().run()

Это мой первый калькулятор на Kivy.Но никак не могу придумать как запретить ввод одинаковых знаков (+,-,*), т.е,чтобы не было 4+++++++4 или 3…………..5,уже 2 день мучаюсь,подскажите кто знает.Желательно не меняя этот код — просто добавляя новый

Используется Python 3.5


Добавить комментарий

2 Answers

Python Опубликовано 10.12.2018
0

def __init__(self):
    self.formula = ''
    self.items = ['*', '-', '+', '.']
 
def add_number(self, instance):
    if self.formula in self.items:
        return

Добавить комментарий
0

Вместо этого:

if len(self.lbl.text) != 13:
  self.formula += str(instance.text)
  self.update_label()

Вставьте это:

char = str(instance.text) # Вы уверены, что нужно приводить к строке?
 
if char in '+-*\.':
  if char != self.formula[-1]:
    self.formula += char
    self.update_label()
else:
  self.formula += char
  self.update_label()

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up