variavel não fixa valor passado pela função no Python

09/01/2023

0

Galera, estou atribuindo valor 1 ou 2 via função, para variável formula, pra poder fazer um if, porém está ficando só com o valor que usei lá em cima para declarar, já tentei declarar ela no MyBoxLayout.


from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
formula = 0

class MyBoxLayout(BoxLayout):

def horas(self):
formula= 1
print(formula)


def minutos(self):
formula= 2
print(formula)

def calcular(self):
if formula == 1:
volume=float(self.ids.vol_input.text)
tempo=float(self.ids.tempo_input.text)
resultado_macro = float((volume) / (3 * tempo))
resultado_micro= float (volume/tempo)
self.ids.label_resultado.text = (''Resultado é {:.2f} em Macrogotas e {:.2f} em Microgotas''.format(resultado_macro, resultado_micro))
print(formula)
else:
volume = float(self.ids.vol_input.text)
tempo = float(self.ids.tempo_input.text)
resultado_macro = float(volume * 20/tempo)
resultado_micro = float(volume * 60 / tempo)
self.ids.label_resultado.text = (''Resultado é {:.2f} em Macrogotas e {:.2f} em Microgotas''.format(resultado_macro, resultado_micro))
print(formula)
Iury

Iury

Responder

Posts

31/01/2023

Lucas Bazan

Bom dia, amigo! Você está usando a classe da maneira errada :(

A classe precisa ter um método construtor para capturar os atributos para posteriormente utilizar nos métodos (funções dentro da classe), por exemplo:

class MyBoxLayout(BoxLayout):
    def __init__(self, formula=0):
        self.formula = formula

    def calcular(self):
        if self.formula == 1:
            volume=float(self.ids.vol_input.text)
            tempo=float(self.ids.tempo_input.text)
            
            resultado_macro = float((volume) / (3 * tempo))
            resultado_micro= float (volume/tempo)
            
            self.ids.label_resultado.text = (''Resultado é {:.2f} em Macrogotas e {:.2f} em Microgotas''.format(resultado_macro, resultado_micro))
            
            print(self.formula)
        else:
            volume = float(self.ids.vol_input.text)
            tempo = float(self.ids.tempo_input.text)
            
            resultado_macro = float(volume * 20/tempo)
            resultado_micro = float(volume * 60 / tempo)
            
            self.ids.label_resultado.text = (''Resultado é {:.2f} em Macrogotas e {:.2f} em Microgotas''.format(resultado_macro, resultado_micro))
            
            print(self.formula)


MyBoxLayout(1).calcular()
MyBoxLayout(2).calcular()


Recomendo dar uma revisada nesse artigo sobre a introdução em classes e métodos -> https://www.devmedia.com.br/como-criar-minha-primeira-classe-em-python/38912

Abraços xD
Responder

31/01/2023

Lucas Bazan

Galera, estou atribuindo valor 1 ou 2 via função, para variável formula, pra poder fazer um if, porém está ficando só com o valor que usei lá em cima para declarar, já tentei declarar ela no MyBoxLayout.


from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
formula = 0

class MyBoxLayout(BoxLayout):

def horas(self):
formula= 1
print(formula)


def minutos(self):
formula= 2
print(formula)

def calcular(self):
if formula == 1:
volume=float(self.ids.vol_input.text)
tempo=float(self.ids.tempo_input.text)
resultado_macro = float((volume) / (3 * tempo))
resultado_micro= float (volume/tempo)
self.ids.label_resultado.text = (''Resultado é {:.2f} em Macrogotas e {:.2f} em Microgotas''.format(resultado_macro, resultado_micro))
print(formula)
else:
volume = float(self.ids.vol_input.text)
tempo = float(self.ids.tempo_input.text)
resultado_macro = float(volume * 20/tempo)
resultado_micro = float(volume * 60 / tempo)
self.ids.label_resultado.text = (''Resultado é {:.2f} em Macrogotas e {:.2f} em Microgotas''.format(resultado_macro, resultado_micro))
print(formula)

veja meu post acima hehe
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar