Het web
Welke pagina van het web is het belangrijkst? Larry Page en Sergey Brin, de oprichters van Google, stelden zich een surfer voor die eindeloos doorklikt en op elke pagina een willekeurige link kiest. Waar hij het vaakst uitkomt, die pagina is het belangrijkst. Hun idee kun je met de dobbelsteen van het vorige project naspelen: laat een surfer duizend keer klikken, en tel waar hij komt. Eerst zet je het web in Python.
Je gebruikt in dit project random.choice uit
Een bont bloemenveld,
het tellen van
een dobbelsteen simuleren,
en een dictionary met een lijst erin uit
Geneste dictionaries.
Voorspel
web = {
"A": ["B", "C"],
"B": ["C"],
"C": ["A"],
"D": ["C"],
}
print(web["A"])
print(len(web["D"]))
Wat print dit programma?
Antwoord
['B', 'C']
1
web["A"] is de lijst links op pagina A, en pagina D heeft één link.
Zo werkt het
Het web is een dictionary. De sleutel is een pagina, en de waarde is de lijst
pagina's waar die pagina naar linkt. web["A"] is dus de lijst links op
pagina A. Hetzelfde mini-web kom je straks tegen in het hoofdstuk
PageRank: A linkt naar
B en C, B en D linken naar C, en C linkt terug naar A.
Onderzoek
- Draai de code. Welke pagina heeft twee links?
- Naar welke pagina linkt geen enkele andere pagina?
- Zet een pagina E in het web, die naar A en D linkt:
"E": ["A", "D"],. Linkt er nu een pagina naar D?
Antwoorden
- A, naar B en naar C.
- D. Hij staat in geen enkele lijst.
- Ja, E linkt naar D. Maar naar E linkt weer niemand.
Opdracht: wie linkt naar C?
Print elke pagina die naar C linkt, en daarna hoeveel het er zijn:
A
B
D
3 pagina's linken naar C
Begin klein, en breid de code stap voor stap uit:
- Draai de code: hij print elke pagina van het web.
- Zet een
ifom de print: print een pagina alleen als"C" in web[pagina]. Je ziet nu A, B en D. - Tel de pagina's in
aantal, en print dat na de loop.
Tip
web[pagina] is een lijst. Met in kijk je of een element in een lijst staat,
net als bij de woorden in het spamfilter.
Antwoord
web = {
"A": ["B", "C"],
"B": ["C"],
"C": ["A"],
"D": ["C"],
}
aantal = 0
for pagina in web:
if "C" in web[pagina]:
print(pagina)
aantal = aantal + 1
print(aantal, "pagina's linken naar C")
C krijgt de meeste links. Of hij daardoor ook de belangrijkste pagina is, laat de surfer straks zien.
Door naar een klik.