Python Forum
Class method returning multiple values,dont know which is returned when..
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Class method returning multiple values,dont know which is returned when..
#1
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...
Reply
#2
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+
Reply
#3
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, )
Reply
#4
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+
Reply
#5
Thank you it has helped me. Nevertheless I have 1 new issue which I have posted maybe you can have a look.!!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  super() and order of running method in class inheritance akbarza 7 594 Feb-04-2024, 09:35 AM
Last Post: Gribouillis
  __init__() got multiple values for argument 'schema' dawid294 4 1,898 Jan-03-2024, 09:42 AM
Last Post: buran
  How to access values returned from inquirer cspower 6 702 Dec-26-2023, 09:34 PM
Last Post: cspower
  Can I use logging in a class (without multiple messages) mevan 2 535 Oct-16-2023, 11:08 PM
Last Post: mevan
  Code is returning the incorrect values. syntax error 007sonic 6 1,137 Jun-19-2023, 03:35 AM
Last Post: 007sonic
  Using one child class method in another child class garynewport 5 1,490 Jan-11-2023, 06:07 PM
Last Post: garynewport
  I dont know why my function won't work? MehHz2526 3 1,150 Nov-28-2022, 09:32 PM
Last Post: deanhystad
  Something the code dont work AlexPython 13 2,129 Oct-17-2022, 08:34 PM
Last Post: AlexPython
  How to combine multiple column values into 1? cubangt 15 2,634 Aug-11-2022, 08:25 PM
Last Post: cubangt
  why I dont get any output from this code William369 2 1,084 Jun-23-2022, 09:18 PM
Last Post: William369

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020