#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’