0

I'm really new to this, and am always stuck by basic issues. Please can you show and explain my errors in this chunk of code. Right now the problem is that self is not defined, but I don't understand why.

It would be amazing if someone could clear this up.

import random
import time

class Building:
    number_of_floors = 0
    customer_list = []
    elevator = 0

def __init__(self, floors, customers):
    self.number_of_floors = floors
    for customerID in range(1, customers + 1):
        new = Customer(customerID,self.number_of_floors)
        self.customer_list.append(new)
    self.customer_list.sort(key = lambda x: x.current_floor)
    self.elevator = Elevator(floors,self.customer_list)
    self.run()

def run(self):
    print('++++++++++++++++++++++++++ELEVATOR IS NOW STARTING+++++++++++++++')
    print('Ther are %d customers in the building' % (len(self.customer_list)))
    number_of_customers = len(self.customer_list)
    self.output()

def output(self):
    for customer in self.customer_list:
        print("Customer",customer.customerID,"is on floor",customer.current_floor,"and wants to go",customer.destination_floor)

    # ELEVATOR MOVING UP
while (self.elevator.current_floor <= self.number_of_floors) & (self.elevator.current_floor > 1):
            self.elevator.current_floor -= 1
            print(len(self.customer_list),'Customers in lift.')
            print('ELEVATOR MOVING DOWN')
            print('++++++++++++++++++++++++++++++++++++++++++++++++++++')
            print('FLOOR',self.elevator.current_floor)

            for customer in self.customer_list:
                if (customer.in_elevator == True):
                    customer.current_floor = self.elevator.current_floor
                if (slef.elevator.current_floor == customer.destination_floor) & (customer.in_elevator == True) & (customer.customer_direction == -1):
                    customer.in_elevator = False
                    self.customer_list.remove(customer)
                    print('Customer',customer.customerID,'has reached their destination')

print('There are',len(self.customer_list),'trapped in the elevator')
print('There are',len(Elevator.register_list),'people left on the register')
print('Elevator run is done!!!')

print('CUSTOMERS STUCK IN LIFT ARE BELOW')
for stuck in self.customer_list:
    print('Cust. ID:',stuck.customerID,'Dest. Floor:',stuck.destination_floor,'Curr. Floor:',stuck.current_floor,'In Elevator',stuck.in_elevator,'Direction',stuck.customer_direction)

class Elevator:
    number_of_floors = 0
    register_list = []
    current_floor = 0
    up = 1
    down = -1

    def __init__(self, number_of_floors, register_list):
        self.number_of_floors = number_of_floors
        self.register_list = register_list

    def move(self):
        pass;

    def register_customer(self, customers):
        for reg in customers:
            self.register_list.append(reg)

    def cancel_customer(self, customers):
        pass;

class Customer:
    current_floor = 0
    destination_floor = 0
    customerID = 0
    in_elevator = False
    finished = False
    customer_direction = 0

    def __init__(self, customerID, floors):
        self.customerID = customerID
        self.current_floor = random.randint(1, floors)
        self.destination_floor = random.randint(1, floors)
        while self.destination_floor == self.current_floor:
            self.desination_floor = random.randint(1, floors)
        if self.current_floor < self.destination_floor:
            self.customer_direction = 1
        else:
            self.customer_direction = -1

def header():                                                                                                           # elevator animation at beginning of program
    print("                          ELEVATOR OPENING                        ")
    time.sleep(.2)
    print("+++++++++++++++++++++++++++++||+++++++++++++++++++++++++++++++++++")
    time.sleep(.2)
    print("+++++++++++++++++++++++++|       |++++++++++++++++++++++++++++++++")
    time.sleep(.2)
    print("++++++++++++++++|                             |+++++++++++++++++++")
    time.sleep(.2)
    print("++++++|                                                 |+++++++++")
    time.sleep(.2)
    print("                                                                  ")
    time.sleep(.2)
    print("                          ELEVATOR CLOSING                        ")
    time.sleep(.2)
    print("++++++|                                                 |+++++++++")
    time.sleep(.2)
    print("++++++++++++++++|                             |+++++++++++++++++++")
    time.sleep(.2)
    print("+++++++++++++++++++++++++|       |++++++++++++++++++++++++++++++++")
    time.sleep(.2)
    print("+++++++++++++++++++++++++++++||+++++++++++++++++++++++++++++++++++")

def main():
    try:
        floors = int(input('Enter the number of floors: '))
        customers = int(input('Enter number of customers: '))
        building = Building(floors, customers)
    except ValueError:
        print('YOU DIDNT ENTER A NUMBER. START AGAIN.')
        main()

if __name__ == "__main__":
    main()
1
  • your indentation is off Commented Jul 31, 2018 at 3:53

1 Answer 1

1

You haven't indented the functions in your Building class.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.