How to let each instance call to have it is own boolean value?

How to let each instance call to have it is own boolean value?



I have a list of cars and their mileage in meters (I get the data's from an game API but I will use a function example instead here.) So every car has a started = false at the beginning and have a function which will return if they started and driven over 1 meter.


metersdriven = 0
started = False

def getCarState(id):
if id == 1:
return 290
if id == 2:
return 0
if id == 3:
return 1200


def init(driver):
global metersdriven, started

metersdriven = getCarState(driver)

if not started:
if metersdriven > 1:
started = True
return metersdriven
else:
return 'Not started'
else:
return 'Not started'



That is the code and here is what I mean:


fd = init(1)
sd = init(2)
td = init(3)

>>> print(fd)
290

>>> print(sd)
'Not started'



As you can see above we have not still got a problem, however a problem comes now


>>> print(td)
'Not started'



We actually wanted to check the third car but it returned 'Not started' which isn't true, it has actually being driven 1200 meters.



I can understand it is being caused by when we initially called to check the first car and thus made the started to True. If we were to call the third car at first, it will have returned 1200 meters and vice versa.



So how can I solve this? how do I make each car to have it is own boolean value? do I need to use class?





How do you "start" a car? It's not clear to me what purpose the started flag even serves. Can you just delete it entirely along with the if not started check?
– John Kugelman
Aug 29 at 11:20


started


if not started





Is all this code supposed to be in a class?
– Carcigenicate
Aug 29 at 11:21





You probably want to make this object-oriented instead - having car objects with the class variable metersdriven and a class method started() which returns True if metersdriven > 0. The problem in your code is that you seem to try to mix global and local variables.
– jolindbe
Aug 29 at 11:23





John Kugelman i mentioned the purpose, I get them from a game api and so each starts at false
– user7716943
Aug 29 at 11:27




3 Answers
3



Yes, you could use classes for this as it will allow you to easily manage instances. Something like the following would suffice:


class Car:
def __init__(self, mileage):
self.mileage = mileage
self.started = False

def start(self):
self.started = True if self.mileage > 0 else False
def stop(self):
self.started = False



Now make an instance like so:


>>> sd = Car(1200) # 1200 is the mileage
>>> fd = Car(0) # this one has 0 mileage
>>> sd.started
False
>>> sd.start()
>>> sd.started
True
>>> fd.start()
>>> fd.started
False # because mileage is 0



Just delete the started variable all together and use only the meters driven to check if the car has run.


started



Started is a global variable, and stays True.
This means it will go straight to the else statement.



if you write started = False inside the init function it works.






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

Edmonton

Crossroads (UK TV series)