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
  class definition and problem with a method HerrAyas 2 234 Apr-01-2024, 03:34 PM
Last Post: HerrAyas
  Printing out incidence values for Class Object SquderDragon 3 275 Apr-01-2024, 07:52 AM
Last Post: SquderDragon
  super() and order of running method in class inheritance akbarza 7 723 Feb-04-2024, 09:35 AM
Last Post: Gribouillis
  __init__() got multiple values for argument 'schema' dawid294 4 2,281 Jan-03-2024, 09:42 AM
Last Post: buran
  How to access values returned from inquirer cspower 6 782 Dec-26-2023, 09:34 PM
Last Post: cspower
  Can I use logging in a class (without multiple messages) mevan 2 591 Oct-16-2023, 11:08 PM
Last Post: mevan
  Code is returning the incorrect values. syntax error 007sonic 6 1,206 Jun-19-2023, 03:35 AM
Last Post: 007sonic
  Using one child class method in another child class garynewport 5 1,575 Jan-11-2023, 06:07 PM
Last Post: garynewport
  I dont know why my function won't work? MehHz2526 3 1,194 Nov-28-2022, 09:32 PM
Last Post: deanhystad
  Something the code dont work AlexPython 13 2,232 Oct-17-2022, 08:34 PM
Last Post: AlexPython

Forum Jump:

User Panel Messages

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