Próbuję znaleźć nazwę, która jest na dwóch osobnych listach, które stworzyłem i masz sprawę funkcji, aby sprawdzić, czy jest tam. Wiem, że sprawdzanie listy i wydrukowałem listę, aby upewnić się, że jest on przechowywany prawidłowo, ale utrzymuje mi moje instrukcje błędu, które nazwa nie znajduje się na liście. Oto kod, który mam dla niego.

def readBoyFiles():
    boyfile = 'BoyNames.txt'
    boyList = []
    with open(boyfile, 'r') as lis:
        for line in lis:
            boyList.append(line)
    return boyList

def readGirlFiles():
    girlfile = 'GirlNames.txt'
    girlList = []
    with open(girlfile, 'r') as names:
        for line in names:
            girlList.append(line)
    return girlList

def nameInput():
    name = input('Please enter the name you would like to search: ')
    list1 = readBoyFiles()
    list2 = readGirlFiles()
    findName(name, list1)
    findName(name, list2)

def findName(name, list):
    if name in list:
        print('This name is among the most popular!')
    else:
        print('This name is not among the most popular.')
nameInput()

Kiedy rzucę instrukcję drukującą jak drukowanie (List1), daje mi nazwy w tym formacie, ['Jacob n', ....] A kiedy przetestuję go, drukuje stwierdzenie o moich innych niezależnie od tego, co wpisuję na wejście. Próbowałem również sprawdzić go z funkcją indeksu i mówi mi, że "Jacob" nie jest na liście, jeśli spróbuję tego. Czuję, że muszę coś założyć, ponieważ pisałem podobny kod, który działa prawidłowo i jest to prawie lustrzany obraz z wyjątkiem różnych typów danych.

3
alittletoohazy 26 luty 2019, 19:43

2 odpowiedzi

Najlepsza odpowiedź

Pamiętaj, aby usunąć swoje struny! Usuwa wiodące i kończące białe znaki. Technicznie "Jacob" nie jest na liście, ponieważ "Jacob N" jest.

def readBoyFiles():
    boyfile = 'BoyNames.txt'
    boyList = []
    with open(boyfile, 'r') as lis:
        for line in lis:
            boyList.append(line.strip())
    return boyList

def readGirlFiles():
    girlfile = 'GirlNames.txt'
    girlList = []
    with open(girlfile, 'r') as names:
        for line in names:
            girlList.append(line.strip())
    return girlList
3
Neil 26 luty 2019, 16:52

Bardziej piythonic wersja twojego kodu

def load_list(file_name):
    with open(file_name, 'r') as f:
        return [name.strip() for name in f.readlines()]


def get_lists_and_user_input():
    name = raw_input('Please enter the name you would like to search: ')
    boys_list = load_list('popular_boys.txt')
    girls_list = load_list('popular_girls.txt')
    return boys_list, girls_list, name


def check_name(name, lst, _type):
    if name in lst:
        print('The name {} is a popular {} name'.format(name, _type))
    else:
        print('The name {} is NOT a popular {} name'.format(name, _type))


boys, girls, _name = get_lists_and_user_input()
check_name(_name, boys, 'boys')
check_name(_name, girls, 'girls')
1
balderman 26 luty 2019, 17:10