AttributeError:在从列表中选择信息的Python程序中



我有一个相当简单的Python程序,应该提示用户选择:

  1. 显示按字母顺序排列的所有州、首府和Flowers
  2. 用它的鸟表现出一种特定的状态
  3. 更新特定状态的鸟
  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

问题似乎是在init下的state类中没有定义bird,因此在class state中没有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

最新更新