[SOLVED] Why does python print memory location rather than class.name in some cases but not others in my code?

Issue

My code has a mathematical function that iterates over a list of county class objects and returns the county with the max voter turnout along with that turnout in a tuple.

Code here:

class County :
  def __init__(self, init_name, init_population, init_voters):
    self.name = init_name
    self.population = init_population
    self.voters = init_voters
    
def highest_turnout(data) :
  max_turnout_county = data[0]
  max_turnout = (data[0].voters / data[0].population)
  for i in range(0,6):
    if (data[i].voters / data[i].population) > max_turnout:
      max_turnout_county = data[i].name
      max_turnout = (data[i].voters / data[i].population)

  return (max_turnout_county, max_turnout)


allegheny = County("allegheny", 1000490, 645469)
philadelphia = County("philadelphia", 1134081, 539069)
montgomery = County("montgomery", 568952, 399591)
lancaster = County("lancaster", 345367, 230278)
delaware = County("delaware", 414031, 284538)
chester = County("chester", 319919, 230823)
bucks = County("bucks", 444149, 319816)
data = [allegheny, philadelphia, montgomery, lancaster, delaware, chester, bucks]  

result = highest_turnout(data) 
print(result) # prints the output of the function

In its current state, it will return the desired output.
(‘chester’, 0.7215045058280377)

However, if I change the county with the highest output, for example, if I change Allegheny voters from 645469 to 1000480 so that Allegheny is now the max turnout county the output will no longer return the county name in the tuple as expected, but rather the memory location.

Output here:
(<submission.County object at 0x7f8e37d3cc18>, 0.9999900048976001)

Why is my code outputting memory location in the second case but not the first case and how would I fix this?

Solution

There is bug in your code.
In first line, you are assigning whole County object to the max_county_variable

max_turnout_county = data[0]

later, you are assigning only the attribute name:

 max_turnout_county = data[i].name

To fix, you can just change first line to:

max_turnout_county = data[0].name

Answered By – Blomex

Answer Checked By – Robin (BugsFixing Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *