Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
lunalovegood

Python Variáveis mudam de valor usando Classe em Python

Recommended Posts

Boa tarde, fiz esse código que opera números complexos usando Python, estou começando a usar POO e surgiu uma dúvida: até a parte da soma ele calcula e imprime tudo corretamente, mas quando chega na parte da multiplicação os valores de c1.real e c1.imag estão mudados. Ao invés de continuarem com os valores 2 e 3, eles passam a ser o resultado calculado na soma, 6 e 8, isso faz com que a multiplicação dê -16 + 62i ao invés de -7 + 22i. Colocar (c1.real, c1.imag) = (2, 3) antes de calcular a multiplicação foi a solução que encontrei, mas não entendo porque os valores dessas duas variáveis foram trocados pelos de soma. Como consertar isso sem ser pela gambiarra que fiz? Obrigada.

class Complexo:
    def __init__(self, a, b):
        self.real = a
        self.imag = b
        print(self)
        
    def soma(self, a, b, c, d):
        self.real = a+c
        self.imag = b+d
        return (self)

    def mult(self, a, b, c, d):
        self.real = ((a*c) - (b*d))
        self.imag = ((a*d) + (b*c))
        return (self)

    def __str__(self):
        s = "%2.f + %2.fi"%(self.real, self.imag)
        return s

print ("Complexo 1 = ", end="")
c1 = Complexo(2, 3)
print ("Complexo 2 = ", end="")
c2 = Complexo(4, 5)
print ("Soma =", c1.soma(c1.real, c1.imag, c2.real, c2.imag))
#(c1.real, c1.imag) = (2, 3)
print ("Multiplicação =", c1.mult(c1.real, c1.imag, c2.real, c2.imag))

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Consegui "resolver" dessa maneira, mas dessa forma o método __str__ fica quase inútil, pois não imprime mais os resultados da soma e da multiplicação. Continuo sem entender a dúvida anterior.

     

    class Complexo:
        def __init__(self, a, b):
            self.real = a
            self.imag = b
            print(self)
            
        def soma(self, a, b, c, d):
            print ("Soma = %2.f + %2.fi"%(a+c, b+d))
    
        def mult(self, a, b, c, d):
            print ("Multiplicação = %2.f + %2.fi"%(a*c - b*d, a*d + b*c))
    
        def __str__(self):
            s = "%2.f + %2.fi"%(self.real, self.imag)
            return s
    
    print ("Complexo 1 = ", end="")
    c1 = Complexo(2, 3)
    print ("Complexo 2 = ", end="")
    c2 = Complexo(4, 5)
    c1.soma(c1.real, c1.imag, c2.real, c2.imag)
    c1.mult(c1.real, c1.imag, c2.real, c2.imag)

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Eles não estão sendo mudados magicamente, você que os está mudando ué '-'... você está alterando self.real e self.imag. Existem algumas soluções.

    class Complexo:
        def __init__(self, a, b):
            (self.real, self.imag) = (a, b)
            
        def soma(self, c):
            return Complexo(self.real + c.real, self.imag + c.imag)
    
        def mult(self, c):
            return Complexo(self.real * c.real - self.imag * c.imag, self.real * c.imag + self.imag * c.real)
    
        def __str__(self):
            return "%2.f + %2.fi" % (self.real, self.imag)

    A ideia aqui é que cada método que realiza uma operação recebe um outro número complexo, cria um terceiro número complexo com o resultado da operação e retorna esse número. As operações não alteram mais nenhum dos dois operandos. É um padrão muito usado, então tente entender o padrão aqui.

    Não vou postar as linhas abaixo de teste atualizadas para o novo código, para que você mesmo tenha que entender para usar.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×