Python电梯代码模拟错误

时间:2018-07-31 03:36:38

标签: python

对此我真的很陌生,并且始终被基本问题所困扰。请您在此代码段中显示并解释我的错误。现在的问题是self没有定义,但我不明白为什么。

如果有人可以解决这个问题,那将是惊人的。

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 个答案:

答案 0 :(得分:1)

您尚未缩进Building类中的功能。