Поиск с вводом в Object Python - PullRequest
0 голосов
/ 14 марта 2019

У меня есть задание, в котором мне нужно искать объект.

class Person:
    navn=None
    tlf=None

    def __init__(self, navn, tlf):
        self.navn = navn
        self.tlf = tlf

def printname(self):
    print(self.navn, self.tlf)

Kari = Person("Kari", 98654321)
Liv = Person("Liv", 99776655)
Ola = Person("Ola", 99112233)
Anne = Person("Anne", 98554455)
Jens= Person("Jens", 99776612)
Per = Person("Per", 97888776)
Else = Person("Else", 99455443)
Jon = Person("Jon", 98122134)
Dag = Person("Dag", 99655732)
Siv = Person("Siv", 98787896)

Итак, мой вопрос: как я могу выполнить поиск с помощью ввода пользователя, чтобы найти человека, потому что я заметил, что вы не можетеискать так же, как в списках.так что я не могу сделать:

def search():
test = input("Test ")
printname(test)

Ответы [ 4 ]

3 голосов
/ 14 марта 2019

Сделайте dict, возьмите input, разделите на . поиск имени в dict:

class Person:
    def __init__(self, navn, tlf):
        self.navn = navn
        self.tlf = tlf

def printname(self):
    print(self.navn, self.tlf)

persons = {
    'Kari':  Person("Kari", 98654321),
    'Liv':   Person("Liv", 99776655),
    'Ola':   Person("Ola", 99112233),
    'Anne':  Person("Anne", 98554455),
    'Jens':  Person("Jens", 99776612),
    'Per':   Person("Per", 97888776),
    'Else':  Person("Else", 99455443),
    'Jon':   Person("Jon", 98122134),
    'Dag':   Person("Dag", 99655732),
    'Siv':   Person("Siv", 98787896)
}

def search():
    name = input('Enter a name: ')
    for key, val in persons.items():
        if key == name.split('.')[0]:
            print(key)

search()

OUTPUT

Enter a name: Kari.navn
Kari
3 голосов
/ 14 марта 2019

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

people = {}
people['Kari'] = Person("Kari", 98654321)
people['Liv'] = Person("Liv", 99776655)
people['Ola'] = Person("Ola", 99112233)
people['Anne'] = Person("Anne", 98554455)
people['Jens'] = Person("Jens", 99776612)
people['Per'] = Person("Per", 97888776)
people['Else'] = Person("Else", 99455443)
people['Jon'] = Person("Jon", 98122134)
people['Dag'] = Person("Dag", 99655732)
people['Siv'] = Person("Siv", 98787896)

def search():
    test = input("Test ")
    dude = people[test]
    print(dude.navn, dude.tlf)

убедитесь, что добавили обработку исключений в вашу функцию поиска, потому что она может выдавать ошибки

2 голосов
/ 14 марта 2019
class Person:
navn=None
tlf=None

def __init__(self, navn, tlf):
    self.navn = navn
    self.tlf = tlf

def printname(self):
    print(self.navn, self.tlf)

Kari = Person("Kari", 98654321)
Liv = Person("Liv", 99776655)
Ola = Person("Ola", 99112233)
Anne = Person("Anne", 98554455)
Jens= Person("Jens", 99776612)
Per = Person("Per", 97888776)
Else = Person("Else", 99455443)
Jon = Person("Jon", 98122134)
Dag = Person("Dag", 99655732)
Siv = Person("Siv", 98787896)

all = [Kari,Liv,Ola,Anne,Jens,Per,Else,Jon,Dag,Siv]

def search(name):
    return [x for x in all if x.navn==name]


ret = search('Jon')

for i in ret:
    i.printname()
1 голос
/ 14 марта 2019

Вам нужно поместить все экземпляры Person в какой-то контейнер, например список или словарь.Поскольку вы хотите искать экземпляр по их атрибуту navn, словарь имеет больше смысла, так как вы можете сделать его ключи такими же, как атрибут, который уменьшит «поиск» до простого поиска.Использование списка потребовало бы итерации по экземплярам Person в списке до тех пор, пока не будет найден экземпляр с соответствующим атрибутом - гораздо более медленный процесс.

Вот решение, показывающее, как это можно сделать:

class Person:
    def __init__(self, navn, tlf):
        self.navn = navn
        self.tlf = tlf

    def printname(self):
        print(self.navn, self.tlf)


def search(persons):
    navi = input("navi? ")
    try:
        persons[navi].printname()
    except KeyError:
        print(navi + ' not found')

people = dict(
    Kari = Person("Kari", 98654321),
    Liv = Person("Liv", 99776655),
    Ola = Person("Ola", 99112233),
    Anne = Person("Anne", 98554455),
    Jens = Person("Jens", 99776612),
    Per = Person("Per", 97888776),
    Else = Person("Else", 99455443),
    Jon = Person("Jon", 98122134),
    Dag = Person("Dag", 99655732),
    Siv = Person("Siv", 98787896),
)

search(people)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...