Programmera periodiska systemet
Hej,
Jag har kört fast i en av deluppgifterna för att programmera ett träningsprogram för det periodiska systemet. Deluppgiften går ut på att man ska tilldela varje atom en rad (period) och en kolumn (grupp). Målet är att kunna rita ut ett tomt periodiskt system där kolumn och rad tydligt framgår. Jag har försökt angripa problemet på flera olika sätt men kör alltid fast, då inget mönster lämpligt för programmering har tillåtit mig att komma vidare. Jag har all information om atomerna i en fil. Min fråga är: Ska jag läsa från filen och skriva in koordinaterna på egen hand, det vill säga raderna och kolumnerna, och sedan spara allt? Eller finns det ett bättre sätt att lösa problemet på? Jag skulle uppskatta alla ledtrådar. Helst, inget definitivt svar med hela lösningen.
Tack!
MickeLiL skrev:Målet är att kunna rita ut ett tomt periodiskt system där kolumn och rad tydligt framgår.
Hej!
Kan du förklara lite mer målet? Vill du skriva ut i skärmen en tom tabell?
Du kanske kan skapa ett dict som mappar varje period mot en lista som innehåller den relevanta informationen (varje rad)?
Vi vet ju inte exakt vad du ska göra, så det hade hjälpt om du skickade hela uppgiften.
Står det i filen hur systemet ser ut, eller rad+kolumn för varje atom, eller bara namn och atomvikt och sånt?
Ja, absolut.
Förtydligat:
Målet är att rita ut på skärmen en tom tabell. I slutet ska man använda någon utritningsmodul (tkinter, pygame, etc.) för att rita ut allt, och göra det interaktivt. Men för att kunna göra detta måste man veta hur geometrin ska se ut, och därför behövs kolumnerna och raderna.
I filen står det inget om raderna och kolumnerna, utan bara om atomnumret, atomnamnet, kemiska beteckningen och atommassan.
Du kan använda någon GUI tabell komponent. För raderna och kolumnerna, du kan på något sätt försöka lägga till i filen vilket rad atomen ska vara och sedan sortera med atomnumret.
Om programmet senare ska kunna bedöma om man har placerat en atom rätt så måste det få veta var rätt plats är, så du kan lägga in den informationen i filen redan nu, rad och kolumn.
Sedan kan du ur detta konstruera en tom tabell.
Tack för svaren. Jag hade tänkt något likadant men var orolig att hårdkodning skulle vara fel.
Om jag skulle spontankoda någonting skulle jag börja med att läsa in filen i lämplig datastruktur. Kanske atomnumret vara en lämplig nyckel om en sådan behövs? En liten klass för att hålla info om varje grundämne är troligen användbart.
Sedan beror det lite på vad du har för info i din fil. Om du har elektronkonfigurationen kan du använda den för att peta in grundämnena i rätt block (SPDF). Det är ju ingen slump varför de ligger där de gör.
Annars kan du ju skriva en funktion som returnerar position givet atomnummer. Den kommer att behöva specialbehandla perioderna på fyra sätt: 1, 2+3, 4+5, 6+7.
Jag tycker inte du skall satsa på att skriva in positionerna för hand. Får jag gissa är det en väsentlig del av uppgiften, just att lösa den biten.
sictransit skrev:Om jag skulle spontankoda någonting skulle jag börja med att läsa in filen i lämplig datastruktur. Kanske atomnumret vara en lämplig nyckel om en sådan behövs? En liten klass för att hålla info om varje grundämne är troligen användbart.
Sedan beror det lite på vad du har för info i din fil. Om du har elektronkonfigurationen kan du använda den för att peta in grundämnena i rätt block (SPDF). Det är ju ingen slump varför de ligger där de gör.
Annars kan du ju skriva en funktion som returnerar position givet atomnummer. Den kommer att behöva specialbehandla perioderna på fyra sätt: 1, 2+3, 4+5, 6+7.
Jag tycker inte du skall satsa på att skriva in positionerna för hand. Får jag gissa är det en väsentlig del av uppgiften, just att lösa den biten.
Tack för det detaljerade svaret!
Tyvärr har jag inte elektronkonfigurationen. Funktionen som returnerar position givet atomnummer skulle lösa problemet, men den skulle inte vara enkel att läsa eller elegant. Egentligen spelar det ingen roll om det är så. Själv hade jag tänkt göra följande:
- Läsa in filen och skapa en sorterad 'dictionary' där nyckeln är ett atomnummer bundet till en lista med resten av informationen.
- Spara all information i en annan fil. Kanske 'json' för att det är enklast att läsa in igen.
- Lägga in rad och kolumn i json filen på egen hand. Nu är det enklare för att allt är sorterat.
- Läsa in json filen när jag behöver den igen.
Låter det rimligt?
Jo, det låter som en plan.
Alternativt skapar du ytterligare en fil, med atomnummer och position. Att handjaga in placering en enda gång kan vara försvarligt eftersom periodiska systemet är tämligen statiskt. Det beror ju på vad syftet med uppgiften är. Om det handlar om att skriva själva träningsprogrammet så kan du lika gärna hårdkoda alla positioner. Då är uppgiftens fokus kanske något helt annat och det är onödigt att lägga tid på den biten.
Har du tid och lust kan du ju ändå skriva en algoritm som gör hela jobbet, men det bestämmer du ju själv. Jag har en tendens (när jag kodar som hobby) att göra saker bara för att se om jag kan, inte för att det nödvändigtvis är den snabbaste vägen framåt.
Vad av lösning kan ju också påverka eventuell bedömning av uppgiften. Notera där att en onödigt komplicerad lösning även kan leda till minuspoäng. Typ: Varför har personen skrivit 200 rader kod, när det skulle vara lika effektivt att bara ge ämnena sin position en enda gång? Det beror på uppgiftens utformning och examinatorns humör.
För övrigt är terminologi viktigt inom systemutveckling. Jag skulle prata om period och grupp istället för rad och kolumn.
sictransit skrev:Jo, det låter som en plan.
Alternativt skapar du ytterligare en fil, med atomnummer och position. Att handjaga in placering en enda gång kan vara försvarligt eftersom periodiska systemet är tämligen statiskt. Det beror ju på vad syftet med uppgiften är. Om det handlar om att skriva själva träningsprogrammet så kan du lika gärna hårdkoda alla positioner. Då är uppgiftens fokus kanske något helt annat och det är onödigt att lägga tid på den biten.
Har du tid och lust kan du ju ändå skriva en algoritm som gör hela jobbet, men det bestämmer du ju själv. Jag har en tendens (när jag kodar som hobby) att göra saker bara för att se om jag kan, inte för att det nödvändigtvis är den snabbaste vägen framåt.
Vad av lösning kan ju också påverka eventuell bedömning av uppgiften. Notera där att en onödigt komplicerad lösning även kan leda till minuspoäng. Typ: Varför har personen skrivit 200 rader kod, när det skulle vara lika effektivt att bara ge ämnena sin position en enda gång? Det beror på uppgiftens utformning och examinatorns humör.
För övrigt är terminologi viktigt inom systemutveckling. Jag skulle prata om period och grupp istället för rad och kolumn.
Tack så hemskt mycket!