AttributeError: в Python программе, которая выбирает информацию из списка - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть довольно простая Python программа, которая должна предлагать пользователю выбрать:

  1. показать алфавитный список всех состояний, их столиц и цветов.
  2. показывает указанное c состояние с его птицей.
  3. обновляет птицу для указанного c состояния.
  4. выход.

Моя проблема с вариантом 2. Когда я выбираю вариант 2 и набираю состояние, выдается эта ошибка:

in display_data
print("State name: ", state_data.state_name, " , Capital: ", state_data.capital, " , Bird: ", state_data.bird)
AttributeError: 'state' object has no attribute 'bird'

Ниже приведен код. Я выбираю только первые два состояния данных для экономии места.

class state:

    def __init__(self, state_name, capital, flower):
        self.state_name = state_name
        self.capital = capital
        self.flower = flower


    def update_bird(self, bird):
        self.bird = bird


def update_bird_for_State(state_list_bird, state_name, bird_name):
    for state in state_list_bird:
        if state.state_name == state_name:
            state.update_bird(bird_name)

def display_sorted_states(state_list_flower):
    for state in sorted([state.state_name for state in  state_list_flower]):
        for state_data in state_list_flower:
            if state == state_data.state_name:
                print("State name: ", state_data.state_name, " , Capital: ", state_data.capital, " , Flower: ", state_data.flower)

def display_data(state_list_bird, state):
    data_found = False
    for state_data in state_list_bird:
        if state_data.state_name == state:
            data_found = True
            print("State name: ", state_data.state_name, " , Capital: ", state_data.capital, " , Bird: ", state_data.bird)

if data_found == False:
    print("No data found.")

if __name__ == "__main__":
    state_list_flower = []

    s = state('Alabama','Montgomery', 'Camellia')
    state_list_flower.append(s)

    s = state('Alaska','Juneau', 'Forget Me Not')
    state_list_flower.append(s)

    state_list_bird = []

    s = state('Alabama','Montgomery', 'Yellowhammer')
    state_list_bird.append(s)

    s = state('Alaska','Juneau', 'Willow Ptarmigan')
    state_list_bird.append(s)

    user_input = 1
    while(user_input in [1,2,3,4]):
        print("\n1. Display all U.S. States in Alphabetical order along with Capital and Flower")
        print("2. Search for a specific state and display the appropriate Capital and Bird")
        print("3. Update a Bird for a specific state")
        print("4. Exit the program")

        user_input = int(input("\nEnter choices: "))

        if(user_input == 1):
            display_sorted_states(state_list_flower)
        elif(user_input == 2 ):
            state_name = input("\nEnter State Name: ")
            display_data(state_list_bird, state_name)
        elif(user_input == 3):
            state_name = input("\nEnter State Name: ")
            bird_name = input("\nEnter Bird Name: ")
            update_bird_for_State(state_list_bird, state_name, bird_name)
        elif(user_input == 4 ):
            break

1 Ответ

0 голосов
/ 03 апреля 2020

Кажется, проблема в том, что птица не определена в вашем классе состояний в init, поэтому в состоянии класса нет такой переменной, как state.bird.

class state:

    def __init__(self, state_name, capital, flower, bird):
        self.state_name = state_name
        self.capital = capital
        self.flower = flower
        self.bird = bird


    def update_bird(self, bird):
        self.bird = bird
...