Python Forum
Class method returning multiple values,dont know which is returned when.. - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Class method returning multiple values,dont know which is returned when.. (/thread-196.html)



Class method returning multiple values,dont know which is returned when.. - ujjwalrathod007 - Sep-29-2016

Dear all, Good morning from Germany,
I have a python code in which the function returns two values. Out of which, only one value changes at a time and other remains the same. I want to find which is changing and want to append it. The code looks as following
def calcrand(self,xlowrand,xhighrand):
        xalg = self.xalg
        yalg = self.yalg
        xlowrand = self.xlowrand
        xhighrand = self.xhighrand
                        
        if (len(xalg))>=2 and len(yalg)>=2:
            last = len(yalg)-1
            xPrevious = xalg[last-1]
            xLast = xalg[last]    
            yPrevious = yalg[last-1]
            yLast = yalg[last]
            prevdist= abs(yalg[last-1]-ygoal)
            currentdist= abs(yalg[last]-ygoal)
                                                          
            if currentdist<prevdist:
                m=float ((yLast-yPrevious)/(xLast-xPrevious)) 
                
                if m>0:
                    if yalg[last]< ygoal:
                        xlowrand=xalg[last]
                        return float(xlowrand),float(xhighrand),
                    else:
                        xhighrand=xalg[last]
                        return float(xlowrand),float(xhighrand)
                elif yalg[last]< ygoal:
                    xhighrand=xalg[last]
                    return float(xlowrand),float(xhighrand)
                else:
                    xlowrand=xalg[last]
                    return float(xlowrand),float(xhighrand)              
                                         
        elif (len(xalg))==1:
            return float(xlowrand),float(xhighrand)
    
        elif (len(xalg))<1:
            return float(xlowrand),float(xhighrand)

        else:
            print('there are no data')
            
        return float(xlowrand),float(xhighrand)
I run this in a loop...


RE: Class method returning multiple values,dont know which is returned when.. - Larz60+ - Sep-29-2016

Hello,

Since you are already returning a tuple, just add a third value which indicates what the other two values are.
this can be a code, 1 - condition 1, 2 - condition 2, ... or it can be a string like ,m < 0'

Larz60+


RE: Class method returning multiple values,dont know which is returned when.. - ujjwalrathod007 - Sep-29-2016

Hello, I am still not clear what do you mean??

I get output as following when I run it in loop

Quote:returnvalue 0.0 9.0
returnvalue 0.0 7.59979666373
returnvalue 0.0 7.59979666373
returnvalue 0.0 7.59979666373
returnvalue 0.0 7.59979666373
returnvalue 3.8855839217 7.59979666373
returnvalue 5.3895954547 7.59979666373
returnvalue 7.12194804382 7.59979666373
returnvalue 7.26688561137 7.59979666373
returnvalue 7.26688561137 7.42555000493
returnvalue 7.26688561137 7.42555000493
returnvalue 7.41097079158 7.42555000493

for the first iteration (0 , 9) is the return than (0 , 7.599) so I only want to append like (0, 9, 7.599, 3.88,  5.38, )


RE: Class method returning multiple values,dont know which is returned when.. - Larz60+ - Sep-29-2016

Hello,

Taking the following snippet of your code:

if currentdist<prevdist:
               m=float ((yLast-yPrevious)/(xLast-xPrevious))
               
               if m>0:
                   if yalg[last]< ygoal:
                       xlowrand=xalg[last]
                       return float(xlowrand),float(xhighrand),
                   else:
                       xhighrand=xalg[last]
                       return float(xlowrand),float(xhighrand)
you could add a list which shows how the values were constructed like:

msg = []
if currentdist < prevdist:
    msg.append('currentdist < prevdist')
    m = float((yLast - yPrevious) / (xLast - xPrevious))

    if m > 0:
        msg.append('m > 0')
        if yalg[last] < ygoal:
            xlowrand = xalg[last]
            return float(xlowrand), float(xhighrand), msg
        else:
            msg.append('m <= 0')
            xhighrand = xalg[last]
            return float(xlowrand), float(xhighrand), msg
Now results will include a list like:

3.8855839217, 7.59979666373,  ['currentdist < prevdist', 'm <= 0']
Larz60+


RE: Class method returning multiple values,dont know which is returned when.. - ujjwalrathod007 - Oct-03-2016

Thank you it has helped me. Nevertheless I have 1 new issue which I have posted maybe you can have a look.!!