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?
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.
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 theif not started
check?– John Kugelman
Aug 29 at 11:20