Ошибка в kivy( TypeError: can't multiply sequence by non-int of type 'str')

Код Python:

...
def get(a,b,c,d):

    float(a)
    float(b)
    float(c)
    float(d)
    Ans = str((a*c+b*d)/(c+d))

    return {'C':Ans}


class Cont(GridLayout):

    def cal(self):



        i1 = self.c1.text
        i2 = self.c2.text
        i3 = self.m1.text
        i4 = self.m2.text

        gett = get(i1,i2,i3,i4)


        if self.c.text == '?':
            print(gett.get('C'))



class App(App):
    def build(self):



        return Cont()

...

Код kivy:

<Cont>:
    rows: 2

    c: C
    c1: C1
    c2: C2
    m1: M1
    m2: M2

    BoxLayout:
        orientation: 'vertical'
        padding: [70]
        spacing: 100

        TextInput
            id: C
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        TextInput
            id: C1
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        TextInput
            id: C2
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        TextInput
            id: M1
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        TextInput
            id: M2
            size_hint: (1, .1)
            font_size: (100)
            multiline: False



    BoxLayout:
        size_hint: (1,.2)
        padding: [40,0,40,20]

        Button:
            text: 'test'
            on_press: root.cal()

При нажатии на кнопку выдаёт ошибку: введите сюда описание изображения

Долго тупил и не могу понять, как можно это исправить?(я просто язык *.kv начал изучать, раньше без него писал)

Можете помочь, надо чтоб из TextInput'ов, значания которых вводит пользователь, заполнялось вместо знака '?' на выходе записывался ответ(переменная Ans).


Ответы (1 шт):

Автор решения: Xander

Исправьте

float(a)
float(b)
float(c)
float(d)

на

a = float(a)
b = float(b)
c = float(c)
d = float(d)

float сам по себе не меняет тип той переменной, которую вы ему скармливаете. Он просто возвращает новый объект соответствующего типа. И если вы это возвращаемое значение никуда не присвоите, то оно просто пропадёт.

Поэтому код вида

float(x)

по сути не делает вообще ничего, он никак не меняет состояние чего-либо в вашей программе.

→ Ссылка