вложенный, если оператор возвращает только оператор else, если не выбрано первое значение | python - PullRequest
0 голосов
/ 05 февраля 2020

Я выполняю назначение, и все идет хорошо, кроме моего последнего оператора if / else, по умолчанию используется блок else, если только я не ввожу первое значение, которое пытаюсь проверить, и мне кажется, что я понимаю, почему, но я не могу придумать способ предотвратить это. Тем не менее, когда я запускаю программу без блока else, вывод получается отлично.

Входной файл:

LE1 Leicester
LE2 Oadby,Knighton,Highfields,Aylestone
LE3 Braunstone,Glenfield,Groby Road
LE4 BeaumontLeys,Belgrave,Birstall,Thurmaston
LE5 Hamilton,ThurnbyLodge,Evington

Код:

def area3(filename):
    f = open(filename, "r")
    aList = list()
    bList = list()

    for line in f:
        line = line.strip()
        f = line.split("\t")
        aList.append(f)

    for line in aList:
        for i in line[1:]:
            i = i.split(",")
            bList.append(i)

    for i in range(0, len(aList)):
        del aList[i][1]
        aList[i].append(bList[i])

    for j in aList:
        for x in j[1]:
            print(j[0], x)
    print("")

    x = input("Enter the name of the suburb to get its postcode: ")
    x = x.capitalize()

    for i in aList:
        for j in i[1]:
            if x == j:
                return "The postcode is: " + i[0]
            else:
                return "Not Found"

print(area3(input("Input filename: ")))

Вывод с помощью else block:

Input filename: postcode.txt
LE1 Leicester
LE2 Oadby
LE2 Knighton
LE2 Highfields
LE2 Aylestone
LE3 Braunstone
LE3 Glenfield
LE3 Groby Road
LE4 BeaumontLeys
LE4 Belgrave
LE4 Birstall
LE4 Thurmaston
LE5 Hamilton
LE5 ThurnbyLodge
LE5 Evington

Enter the name of the suburb to get its postcode: evington
Not Found

Вывод без блока else:

Input filename: postcode.txt
LE1 Leicester
LE2 Oadby
LE2 Knighton
LE2 Highfields
LE2 Aylestone
LE3 Braunstone
LE3 Glenfield
LE3 Groby Road
LE4 BeaumontLeys
LE4 Belgrave
LE4 Birstall
LE4 Thurmaston
LE5 Hamilton
LE5 ThurnbyLodge
LE5 Evington

Enter the name of the suburb to get its postcode: evington
The postcode is: LE5

Любая помощь, чтобы исправить это, будет высоко ценится.

1 Ответ

1 голос
/ 05 февраля 2020

Измените последнюю часть так, чтобы "Not found" возвращался только после того, как список был полностью повторен.

for i in aList:
        for j in i[1]:
            if x == j:
                return "The postcode is: " + i[0]

return "Not Found"
...