Een Hertzsprung-Russelldiagram is een puntenwolk. Op de verticale as staat de helderheid van een ster weergegeven, uitgedrukt als absolute magnitude (magnitude gecorrigeerd voor afstand en interstellaire extinctie) of relatieve lichtkracht ten opzichte van de zon. Op de horizontale as staat een variabele gerelateerd aan de oppervlaktetemperatuur, zoals de B-V-kleurindex, de spectraalklasse, of de effectieve temperatuur. Opgelet: de temperatuur neemt toe van rechts naar links. Het diagram is de gebruikelijke basis voor de classificatie van sterren en wordt gebruikt om hun evolutie te beschrijven. Het is genoemd naar Ejnar Hertzsprung en Henry Norris Russell die het omstreeks 1910 onafhankelijk van elkaar introduceerden.
Op basis van de positie van de sterren binnen een Hertzsprung-Russelldiagram worden de volgende klassen onderscheiden: superreuzen (a), superreuzen (b), heldere reuzen, reuzen, de hoofdreeks en witte dwergen. Er bestaat geen eenduidige afbakening van de gebieden in het diagram die corresponderen met de verschillende klassen. Voor deze opgave zullen we uitgaan van de afbakening die staat weergegeven in de rechter figuur hierboven. De randen van elk gebied liggen daarbij telkens parallel met één van de assen van het diagram en vallen steeds samen met één van de waarden die op de assen staan weergegeven.
Schrijf een functie classificatie waaraan twee floating point getallen moeten doorgegeven worden die respectievelijk de temperatuur (in Kelvin) en de lichtkracht (relatief ten opzichte van de zon) van een ster voorstellen. De functie moet een string teruggeven die aangeeft tot welke klasse de ster behoort, volgens de indeling die gemaakt wordt in de rechter figuur hierboven. Je mag ervan uitgaan dat de waarden van de temperatuur en de lichtkracht steeds binnen de grenzen van de afbeelding vallen, en dat ze nooit een punt vormen dat op de rand ligt van de gebieden die bij de indeling gebruikt worden.
Schrijf een functie cataloog waaraan de locatie van een tekstbestand moet doorgegeven worden. Het bestand omschrijft een aantal sterren. De eerste regel bevat een hoofding. De volgende regels geven telkens de volgende informatie van één enkele ster weer in velden die van elkaar gescheiden worden door één enkele tab: i) naam, ii) spectraalklasse, iii) temperatuur (in Kelvin), iv) lichtkracht, v) massa en vi) straal. De laatste drie informatievelden worden telkens uitgedrukt relatief ten opzichte van de zon. De functie moet een dictionary teruggeven, die de naam van elke ster afbeeldt op een tuple dat de floating point waarden bevat van de temperatuur en lichtkracht van de ster.
Schrijf een functie klassen waaraan een dictionary moet doorgegeven worden die is opgebouwd zoals de dictionaries die door de functie cataloog teruggegeven worden. De functie moet een nieuwe dictionary teruggeven, die de naam van een klasse van sterren afbeeldt op de verzameling namen van sterren uit de gegeven dictionary die tot die klasse behoren. De naam van een klasse van sterren mag enkel gebruikt worden als sleutel in deze nieuwe dictionary, indien de gegeven dictionary daadwerkelijk ook sterren bevat die tot deze klasse behoren.
Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand sterren.txt1 zich in de huidige directory bevindt.
>>> classificatie(8525.0, 196000.0) # Deneb
'superreuzen (a)'
>>> classificatie(18890.0, 3300.0) # Sigma Sagittarii
'superreuzen (b)'
>>> classificatie(4925.0, 132.0) # Zeta Hydrae
'heldere reuzen'
>>> classificatie(4810.0, 45.0) # Delta Arietis
'reuzen'
>>> classificatie(13397.0, 148.0) # Zeta Draconis
'hoofdreeks'
>>> classificatie(7740.0, 0.00049) # Procyon A
'witte dwergen'
>>> sterren = cataloog('sterren.txt')
>>> sterren
{'Beta Herculis': (4887.0, 151.0), 'Omicron Ursae Majoris': (5242.0, 138.0), 'Alpha Columbae': (12963.0, 1000.0), 'Beta Ursae Minoris': (4030.0, 390.0), 'Zeta Aquilae': (9620.0, 39.4), 'Epsilon Sagittarii': (5807.0, 0.89), 'Nu Ophiuchi': (4928.0, 123.0), 'Pi Orionis': (6516.0, 2.822), 'Beta Lyrae': (13300.0, 6.5), 'Beta Ceti': (4797.0, 139.1)}
>>> klassen(sterren)
{'hoofdreeks': {'Pi Orionis', 'Alpha Columbae', 'Epsilon Sagittarii', 'Zeta Aquilae', 'Beta Lyrae'}, 'heldere reuzen': {'Beta Herculis', 'Omicron Ursae Majoris', 'Nu Ophiuchi', 'Beta Ceti', 'Beta Ursae Minoris'}}