• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeszukiwanie wszerz - błąd w algorytmie

Object Storage Arubacloud
0 głosów
123 wizyt
pytanie zadane 19 maja 2018 w Python przez ForeverFriendzone Dyskutant (7,520 p.)

Witam Serdecznie!

 

Czy ktoś powie mi co źle zrobiłem? 

"""NAUKA PRZESZUKIWANIA WSZERZ"""
from collections import deque

def person_is_seller(person):
    return person[-1] == 'k'


graph = {}
graph["ja"] = ["Radez", "Darek", "daniel", "wiesław"]
graph["marek"] = ["kacper"]
graph["kacper"] = ["andżelika"]
graph["andżelika"] = ["monika", "patrycja"]
graph["daniel"] = ["mariusz"]
graph["mariusz"] = ["ireneusz"]
graph ["darek"] = ["radosław"]
graph["radosław"] = ["irek"]



def search(name):
    search_queue = deque()
    search_queue += graph[name]
    checked = []
    while search_queue:
        person = search_queue.popleft()
        if not person in checked :
            if person_is_seller(person):
                print(person, " będzie sprzedawcą truskawek w Holandii")
                return True
            else:
                search_queue += graph[person]
                checked.append(person)
    return False



search("ja")



Dziękuję z góry!

1 odpowiedź

+1 głos
odpowiedź 19 maja 2018 przez ProgramistaStepek Nałogowiec (27,020 p.)
wybrane 19 maja 2018 przez ForeverFriendzone
 
Najlepsza
31 search_queue += graph[person]

Tu pojawia się problem, gdy osoby nie ma w grafie, ponieważ nie przechwytujesz wyjątku i wywala ci program.

Dla przykładu wywala program przy pierwszym przejściu, ponieważ nie ma osoby 'Radez' w grafie i odwołanie się do nieistniejącego klucza słownika poprzez

graph[person]

wywołuje KeyError

komentarz 19 maja 2018 przez ForeverFriendzone Dyskutant (7,520 p.)
jak mógłbym rozwiązać ten problem?
komentarz 19 maja 2018 przez ProgramistaStepek Nałogowiec (27,020 p.)
Po prostu sprawdzić czy wartość jest w grafie
komentarz 19 maja 2018 przez ForeverFriendzone Dyskutant (7,520 p.)

załatwiłem to try i except:

daję kod, jakby ktoś to kiedyś ogarniał:


"""NAUKA PRZESZUKIWANIA WSZERZ"""
from collections import deque

def person_is_seller(person):
    return person[-1] == 'k'


graph = {}
graph["ja"] = ["Radez", "Darek", "daniel", "marek"]
graph["marek"] = ["kacper"]
graph["kacper"] = ["andżelika"]
graph["andżelika"] = ["monika", "patrycja"]
graph["daniel"] = ["mariusz", "kamila","krzysiek"]
graph["mariusz"] = ["ireneusz"]
graph ["darek"] = ["radosław"]
graph["Radez"] = []





def search(name):
    search_queue = deque()
    search_queue += graph[name]
    checked = []
    while search_queue:
        person = search_queue.popleft()
        if not person in checked :
            if person_is_seller(person):
                print(person, " będzie sprzedawcą truskawek w Holandii")
            else:
                try:
                    search_queue += graph[person]
                except KeyError:
                    pass




search("ja")

 

Podobne pytania

0 głosów
2 odpowiedzi 286 wizyt
0 głosów
1 odpowiedź 62 wizyt
pytanie zadane 17 kwietnia w Python przez skiczyn Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 523 wizyt

92,572 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...