[Python] Simple Elevator Program Python Using While For Loop. Why does my loop not update...

Discussão em 'Python' iniciado por Stack, Junho 21, 2025.

  1. Stack

    Stack Membro Participativo

    My below loop in python which goes through a list of customers seems to once it removes a customer from the list go back to the start of the while loop instead of repeating through for the rest of the customers. Can somebody please have a look at what I am doing wrong? Entire code is below and attached.

    author = 'Alan Doonan'

    import random
    import time


    class Building: # defines class building
    number_of_floors = 0 # sets number_of_floors variable to 0
    customer_list = [] # creates an empty array for customer_list
    elevator = 0 # sets elevator variable to 0

    def __init__(self, floors, customers): # initialize Building
    self.number_of_floors = floors # assigns floors entered to number_of_floors
    for customerID in range(1, customers + 1): # assigns number of customers entered to customer_list in order
    new = Customer(customerID,self.number_of_floors) # creates an instance called new of Customer class for number of customers entered in input
    self.customer_list.append(new) # appends new instance of customer to customer_list
    self.customer_list.sort(key = lambda x: x.current_floor) # sorts customer_list by current_floor customer is on # prints
    self.elevator = Elevator(floors,self.customer_list) # creates instance of elevator with inputted floors and assigns customer_list to register_list # prints
    self.run() # runs run method below

    def run(self): # method to operate the elevator
    print('++++++++++++++++++++++++++ELEVATOR IS NOW STARTING+++++++++++++++') # prints
    print('There are %d customers in the building' % (len(self.customer_list))) # prints
    number_of_customers = len(self.customer_list) # assigns current number of customers to number_of_customers variable
    self.output() # runs output method below

    def output(self):
    for customer in self.customer_list: #prints lists of customers in building and their details
    print("Customer",customer.customerID,"is on floor",customer.current_floor,"and wants to go to",customer.destination_floor)

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

    for customer in self.customer_list: # Loop for each instance of Custumer in customer_list
    if (self.elevator.current_floor == customer.current_floor) & customer.customer_direction == 1:
    customer.in_elevator = True
    print('Customer',customer.customerID,'has entered the lift')
    if (self.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.customerID,'has reached their destination')


    #ELEVATOR MOVING DOWN LOOP
    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 (self.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') #prints
    print('There are',len(Elevator.register_list),'people left on the register')
    print('Elevator run is done!!!') #prints

    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 # the number of floors
    register_list = [] # the list of customers in the elevator
    current_floor = 0 # the current floor of the elevator
    up = 1 # moves the elevator up
    down = -1 # moves the elevator down

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

    def move(self): # method to move the elevator by 1 floor
    pass;

    def register_customer(self, customers): # customer goes into elevator
    for reg in customers:
    self.register_list.append(reg)



    def cancel_customer(self, customers): # customer goes out of the elevator
    pass;


    class Customer:
    current_floor = 0 # the current floor of the elevator
    destination_floor = 0 # the destination floor of the elevator
    customerID = 0 # the customers ID
    in_elevator = False # denotes whether customer is in the elevator
    finished = False # denotes whether customer has reached the destination floor
    customer_direction = 0

    def __init__(self, customerID, floors): # initilize Customer class
    self.customerID = customerID # assigns self.customerID to customerID
    self.current_floor = random.randint(1, floors) # assigns self.current_floor to random int between 1 and floors entered
    self.destination_floor = random.randint(1, floors) # assigns seslf.destination_floor to random int between 1 and floors entered
    while self.destination_floor == self.current_floor:
    self.destination_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(): # main method
    try: # try/except for user input menu
    floors = int(input('Enter the number of floors: ')) # enter floors and assign to floors
    customers = int(input('Enter number of customers: ')) # enter customers and assign to customers
    building = Building(floors, customers) # instance of building created with inputs of floors and customers # create instance of Building class (building)
    except ValueError:
    print('YOU DIDNT ENTER A NUMBER. START AGAIN.')
    main()


    if __name__ == "__main__":
    # header()
    main()


    LINK TO FILE ON GITHUB

    Continue reading...

Compartilhe esta Página