Исправление кода Python, который не отображает оба значения

#python #debugging

#python #отладка

Вопрос:

Это часть моей домашней работы, и причина, по которой я обнаружил, что опубликовал это, заключалась в том, что я был смущен тем, что я делаю неправильно.

 school = [['Abby Li'],         
['Ella Wang', 'Danielle Han','Katherine Zhang', 'Morgan Liu'], 
['Josh Li']       
]
def searchStudent(school1, lastname1):    
  firstname = "Not"    
  lastname = "Found"    

  for grade in school1:        
    for student in grade:            
      name = student.split();  
  
  if name[1] == lastname1:                
    firstname = name[0]                
    lastname = name[1]    

  return firstname, lastname

while (True):    
  search = input("Please enter last name to search:")   
  if (search == "exit"):
    break

  foundFirst, foundLast = searchStudent(school, search) 
  print("found student: ", foundFirst, foundLast)     
  print("")
  

Итак, это мой код, но всякий раз, когда я ввожу «Li» в качестве фамилии, отображается только Джош, а Эбби нет. Может кто-нибудь помочь мне это исправить? Большое вам спасибо!

Кроме того, вот ссылка на него, если он не отображается выше: code

Комментарии:

1. Итак, вы хотите, чтобы все с фамилией Li были возвращены? Я думаю, тогда вам нужно вернуть список!

Ответ №1:

Ваш отступ выводит if инструкцию из цикла for

Также, если вы хотите распечатать все совпадения, вам нужно сохранить их все, поэтому вам понадобится что-то вроде list!

 school = [['Abby Li'],         
['Ella Wang', 'Danielle Han','Katherine Zhang', 'Morgan Liu'], 
['Josh Li']       
]
def searchStudent(school1, lastname1):    
  firstname = "Not"    
  lastname = "Found"    

  result = []

  for grade in school1:        
    for student in grade:            
      name = student.split();  
  
    if name[1] == lastname1:                
        firstname = name[0]                
        lastname = name[1]    
        result.append([firstname, lastname])

  return result

while (True):    
  search = input("Please enter last name to search:")   
  if (search == "exit"):
    break

  result = searchStudent(school, search) 
  for name in result: print("found student: ", name[0], name[1])   
  print("")
  
 Please enter last name to search:Li
found student:  Abby Li
found student:  Josh Li

Please enter last name to search:exit
  

Комментарии:

1. большое вам спасибо! теперь я понимаю это намного лучше!

Ответ №2:

У вас ошибка отступа:

   for grade in school1:        
    for student in grade:            
      name = student.split();  
  
  if name[1] == lastname1:                
    firstname = name[0]                
    lastname = name[1]
  

Обратите внимание, что if оператор находится вне цикла, после цикла.
Поэтому единственное имя, которое он будет проверять, — это последнее во всем списке школ. Чтобы проверить все имена, вы должны сделать отступ до того же уровня, что и эта внутренняя split команда.

Также обратите внимание, что ваш return оператор вернет только то последнее найденное имя. Если вы хотите вернуть больше, вам нужно обновить свою логику.

Ответ №3:

Вам нужно составить список найденных студентов, скажем:

 found_students = []
  

а затем добавьте к нему найденные имена, а затем верните этот список

на данный момент ‘Abby Li’ перезаписывается ‘Josh Li’