[Python] Rankinglist schrijven, wat doe ik verkeerd?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Kuusj
  • Registratie: April 2012
  • Laatst online: 20:51

Kuusj

Ofwel varken in 't Limburgs

Topicstarter
Beste Tweakers en code-experts,

Introductie (TL:DR; optioneel gedeelte :P :+)
offtopic:
Ik heb mijn 'wanhoop' betreffende deze opdracht al eerder uitgesproken in dit (programmeren met python) topic en heb het advies gevolgd om een eigen topic te openen. Laat me beginnen te zeggen dat ik absoluut niet kom met de verwachting dat ik alles voorgekauwd op m'n bord krijg. Ik heb echt heel erg hard mijn best gedaan om de opdracht zelf tot een goed einde te brengen, maar gezien een (discutabele) 4 voor de eerste poging en na vruchteloze pogingen verdere uitleg van mijn docent te krijgen moet ik helaas bij jullie aankloppen. Geloof me, ik krijg onderhand de pest van deze opdracht en dat komt door het feit dat ik (of eigenlijk ons casusgroepje) op iedere stap tegengewerkt wordt door zowel de docent als de examencommissie :'). Zo heb ik na 4 mails en 2x mondeling contact vanavond eindelijk de bevestiging dat we dezelfde opdracht opnieuw moeten maken i.t.t. eerder gesuggereerde nieuwe opdracht 8)7 Maar goed, dat is een ander onderwerp...

Mijn vraag
Ik moet deze opdracht uitwerken:
Schrijf een programma in Python dat de centrale rankinglist produceert. Maak
daarnaast een document waarin je de werking van het programma en de gemaakte
keuzes toelicht en onderbouwt. Je neemt dus twee documenten op in je portfolio:
de code in een .py-document en de onderbouwing in een Word-document.
Dit is letterlijk de opdracht. Randinformatie is dat de casus over het organiseren van een LAN-party gaat. Het is dus de bedoeling dat
- Deelnemers ingevoerd kunnen worden
- Scores toegewezen kunnen worden aan deelnemers
- De deelnemers op volgorde van score in een lijst weergegeven kunnen worden

Nu hebben we dit gedaan, met een zoekfunctie als extra voor een beter punt, maar dat resulteerde in een 4.

Die code zal ik hier neer zetten, maar hij is vrij lang ben ik bang:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#people who participate are defined in a seperate textfile which is opened read only
deelnemers = []
bestand = open("deelnemers.txt", "r")
"---------------------------------------------------------------------------"
 
#these lines provide the layout for the dictionary 
for regel in bestand:
#the '\n' command puts a different piece of data on a new line    
    regel = regel.replace('\n', '')
#after this we print the values defined
    print(regel)
    velden = regel.split(";")
    for i in range(len(velden)):
        if velden[i].isdigit(): velden[i] = int(velden[i])
    deelnemers.append(velden)
#we close the file
bestand.close()
print(deelnemers)
deelnmrInd = -1
"----------------------------------------------------------------------------"
 
#we begin a list of options
doorgaan = True
while doorgaan:
    print ("0 - stoppen")
    print ("1 - Invoeren deelnemers")
    print ("2 - Deelnemers opslaan")
    print ("3 - Deelnemer zoeken")
    print ("4 - Gevonden deelnemer afdrukken")
#depending on the choice made the programm chooses the correct code and returns to beginning 
    keuze = input(" ==> geef keuze: ")
    if keuze.isdigit():
        keuze = int(keuze)
        if keuze == 1:
#this part is for entering a new contestant 
            meerdeelnemers = True
            while meerdeelnemers:
                naam = input ("Geef naam")
                score = int(input("Geef score")) 
                rij = [naam, score]
                deelnemers.append(rij)
#if there are more new contestants we can enter them
                antw = input ("Zijn er nog meer deelnemers? (j/?)")
                meerdeelnemers = antw in "jJ"
            for d in deelnemers:
#finally we print the complete list of contestants entered with their score
                print(d)
        elif keuze == 2:
#we need a seperate command to save the new entries
            bestand = open ("deelnemers.txt", "w")
            for d in deelnemers:
                for i in range(0, len(d)-1):
                    bestand.write(str(d[i])+";")
                bestand.write(str(d[len(d) - 1]))
                bestand.write("\n")
#when done we need to close the file
            bestand.close()
        elif keuze == 3:
#when we want to search for the score of a specific contestant we need this code
            deelnmrInd = -1
            naam = input("Geef de naam van de deelnemer: ")
            gevonden = False
            i = 0
#while 'deelnemers' is <1 we keep searching in the list
            while not gevonden and i < len(deelnemers):
                if deelnemers[i][0] == naam:
                    gevonden = True
                else:
                    i = i + 1
            if gevonden:
                deelnmrInd = i
#to print the name we need a seperate command
        elif keuze == 4:
            if deelnmrInd != -1:
                for i in range(0, len(deelnemers[deelnmrInd])):
                    print(deelnemers[deelnmrInd][i], end = "         ")
                print()
#if nothing is entered or a wrong name is entered we get an error
            else:
                print("Je moet eerst een deelnemer zoeken... ")
#when we need to exit the programm we simply enter '0' and this code takes care of the rest
        elif keuze == 0:
            doorgaan = False
"----------------------------------------------------------------------------"
             
print ("Programma afgesloten")

(bestand deelnemers.txt geloven jullie denk ik wel en excuses voor de mix Engels en Nederlands)
Na aandringen bij de examencommissie werd het oordeel herzien, maar ons verzoek afgewezen op grond hiervan:
De uitwerking van de opdracht: “Sorteren en afdrukken van een overzicht van deelnemers” ontbreekt. Dit laatste is de belangrijkste reden voor mijn beoordeling. Eventueel kon het programma aangevuld worden met andere functionaliteiten (met als doel een hogere beoordeling te krijgen):
 deelpunten per gespeeld spel registreren en op deelpunten gesorteerd afdrukken.
 registreren van betalingen
 groepswedstrijden en groepsscores verwerken
Goed, jullie kunnen ook wel zien dat dit helemaal niet in de opdracht staat, maar of ik het hier nu met eens ben of niet: ik wil het gewoon goed doen. Het is essentieel om het beoordelingsmodel erbij te pakken:
Afbeeldingslocatie: http://image.prntscr.com/image/c959baf0b9394ba482007a674eba842f.png
Hij heeft ons op alle drie de factoren met een 4 beoordeeld. Wat ik nu precies fout doe weet ik niet, dus ik zou dat graag weten (fundamenteel gezien dus, welke booleans e.d. verkeerd zouden zijn), alsmede het verzoek mij de juiste richting in te wijzen wat betreft de extra functionaliteiten. Mijn kennis reikt echt niet verder dan dit, hoe graag ik ook zou willen dat dit na een aantal weken af en aan les anders zou zijn :(.

Relevante software en hardware die ik gebruik
Python 2.7

Wat ik al gevonden of geprobeerd heb:
Goed, dat heb ik eigenlijk al een beetje uitgelegd :D Ik heb gezocht naar databases e.d, maar dat gaat me echt te boven qua niveau.

Als afsluiting:
Excuses voor de eindeloos lange OP, ik schaam me dood maar ben inmiddels redelijk wanhopig... Ik hoop dat jullie daar begrip voor hebben :> Op voorhand echt oneindig veel dank, jullie zijn geweldig _/-\o_

9800X3D - RX 6900XT - Volvo S40 T5 '10 - Kever '74

Beste antwoord (via Kuusj op 11-01-2017 12:15)


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 09-10 13:33
Allereerst denk ik dat het inderdaad een heel goed idee is om functies te gaan gebruiken. Maak voor iedere bewerking een aparte functie, dus bijvoorbeeld add_user, edit_user en print_users. Op die manier maak je de logica voor elk stukje functionaliteit los en daarmee creëer je overzicht. Maak daarbij een main functie die de data inleest, de gekozen menu optie uitleest en de bijbehorende functies aanroept.

Verder kun je CSV of een RDBMS als SQLite gebruiken, maar feit blijft dat je de data moet inladen en bij een wijziging moet wegschrijven. Voordeel van RDBMS is dat je iets makkelijker gericht een enkel record kunt overschrijven i.p.v het hele bestand. Maar omdat je maar weinig data hebt zal het niet zoveel uitmaken. CSV is wel lekker overzichtelijk en dan ben je niet afhankelijk van externe programma's.

Met CSV DictReader krijg je een list met dicts terug. Elke speler zal als dict in de lijst staan en de keys van elk dict wordt bepaald door de header op de eerste rij van het CSV bestand. Om de lijst spelers op een bepaalde key in hun dicts te sorteren, zul je zelf de sort functie moeten aanpassen. Op stackoverflow zijn hier genoeg voorbeelden van. Hint: geeft een lambda functie mee die Zde juiste key vergelijkt.

Is er niet iemand die je hier verder mee kan ondersteunen? Ik heb het idee dat jullie nogal worstelen met de basale opzet van het programma en met constructen en datastructuren van Python... Niet dat het erg is of om je een trap na te geven, maar het lijkt alsof jullie docent jullie niet erg goed heeft voorbereid op deze opdracht

[ Voor 30% gewijzigd door Morrar op 11-01-2017 10:53 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • MK_
  • Registratie: November 2013
  • Niet online

MK_

Sneller dan het licht :)

Ten eerste mis ik een foutenafhandeling. Wat als ik als input "5" geef? Dan crasht het programma :) Makkelijk op te lossen:
Python:
1
2
else:
     print("Geef een geldige input.")

Verder:
Sorteren en afdrukken van een overzicht van deelnemers.
Dit lijkt me toch vrij simpel? Als je telkens elke deelnemer gesorteerd aan de lijst toevoegd, hoef je enkel de lijst af te drukken. Als de lijst al gesorteerd is, blijft de lijst gesorteerd elke keer dat je iemand toevoegd.

Ik ben niet meer zo helder op dit tijdstip, en je mix van Nederlandse variabelen & Engelse comments is inderdaad verschrikkelijk. Dat zou ik in de toekomst niet meer doen.

Ook zijn variabelen onduidelijk. "deelnmrInd", wat wil je daarmee zeggen?

Tevens is je nesting gigantisch. Her zal zo gerust werken, maar de leesbaarheid wordt niet bevorderd. Waarom maak je geen functies? Maakt het programma veel overzichtelijk.

Python:
1
2
3
4
5
6
keuze1(deelnemers):
    ...
    return deelnemers

if keuze == 1:
     deelnemers = keuze1(deelnemers)


Of zoiets :p

Verder snap ik je vraagstelling niet precies, maar zoals ik al zei, ben niet meer zo helder.

Hopelijk heb je er wat aan!

12x SunPower X21-350-BLK @ Solar Edge SE3680H (4200Wp) | Dell Inspiron 15 7559 | OnePlus 9 Pro Stellar Black 12/256GB | Xbox Series X | LPG powered


Acties:
  • 0 Henk 'm!

  • Kuusj
  • Registratie: April 2012
  • Laatst online: 20:51

Kuusj

Ofwel varken in 't Limburgs

Topicstarter
MK1998NL schreef op dinsdag 10 januari 2017 @ 00:12:
Ten eerste mis ik een foutenafhandeling. Wat als ik als input "5" geef? Dan crasht het programma :) Makkelijk op te lossen:
Python:
1
2
else:
     print("Geef een geldige input.")

Verder:

[...]

Dit lijkt me toch vrij simpel? Als je telkens elke deelnemer gesorteerd aan de lijst toevoegd, hoef je enkel de lijst af te drukken. Als de lijst al gesorteerd is, blijft de lijst gesorteerd elke keer dat je iemand toevoegd.

Ik ben niet meer zo helder op dit tijdstip, en je mix van Nederlandse variabelen & Engelse comments is inderdaad verschrikkelijk. Dat zou ik in de toekomst niet meer doen.

Ook zijn variabelen onduidelijk. "deelnmrInd", wat wil je daarmee zeggen?

Tevens is je nesting gigantisch. Her zal zo gerust werken, maar de leesbaarheid wordt niet bevorderd. Waarom maak je geen functies? Maakt het programma veel overzichtelijk.

Python:
1
2
3
4
5
6
keuze1(deelnemers):
    ...
    return deelnemers

if keuze == 1:
     deelnemers = keuze1(deelnemers)


Of zoiets :p

Verder snap ik je vraagstelling niet precies, maar zoals ik al zei, ben niet meer zo helder.

Hopelijk heb je er wat aan!
Ik zal het morgen nog eens goed formuleren, heb de hele OP ook al diverse keren opnieuw geschreven maar echt heel goed omschrijven lukt alsnog niet echt :+ het is voor mij ook best laat haha...

In ieder geval bedankt alvast, ik ga me inlezen over functies. Waarschijnlijk lach je je nu kapot, maar ik heb echt alleen de hele kale basiskennis aan boord, het meeste van de wat geavanceerde stukjes is door de docent gemaakt omdat we er al niet uit kwamen. Zijn variabelen zijn af en toe een beetje raar inderdaad. Denk dat ik het programma nu ga strippen tot wat puur nodig is en van daaruit verder ga, met hopelijk jullie hulp <3 en natuurlijk even die taal wirwar omgooi tot een leesbaar geheel...

9800X3D - RX 6900XT - Volvo S40 T5 '10 - Kever '74


Acties:
  • +1 Henk 'm!

  • BasilFX
  • Registratie: Mei 2004
  • Laatst online: 06-10 08:32

BasilFX

BasilFX

kuusj98 schreef op dinsdag 10 januari 2017 @ 00:26:
Denk dat ik het programma nu ga strippen tot wat puur nodig is en van daaruit verder ga, met hopelijk jullie hulp <3 en natuurlijk even die taal wirwar omgooi tot een leesbaar geheel...
Python heeft een algemeen-geaccepteerde style guide: PEP8. Mocht je de code leesbaar willen maken, dan is het wellicht de moeite waard om hier eens in te verdiepen. Deze style guide zal je niet de oplossing geven tot het probleem, maar doordat je source code leesbaarder is, kan het wel helpen dat anderen je code (sneller) begrijpen.

Er zijn ook online tools om dit even snel te proberen :+

[ Voor 12% gewijzigd door BasilFX op 10-01-2017 08:39 ]

http://www.basilfx.net


Acties:
  • 0 Henk 'm!

  • Kuusj
  • Registratie: April 2012
  • Laatst online: 20:51

Kuusj

Ofwel varken in 't Limburgs

Topicstarter
BasilFX schreef op dinsdag 10 januari 2017 @ 08:33:
[...]


Python heeft een algemeen-geaccepteerde style guide: PEP8. Mocht je de code leesbaar willen maken, dan is het wellicht de moeite waard om hier eens in te verdiepen. Deze style guide zal je niet de oplossing geven tot het probleem, maar doordat je source code leesbaarder is, kan het wel helpen dat anderen je code (sneller) begrijpen.

Er zijn ook online tools om dit even snel te proberen :+
Bedankt! Ik probeer dit zo goed en zo kwaad als dat op een paar dagen kan te leren :)

Verder ben ik vannacht doorgegaan met proberen, en heb besloten opnieuw te beginnen. Ik heb gelukkig 1 klasgenoot gehad die zijn werk wilde sturen, dus daar heb ik enige inspiratie vandaan kunnen halen. Ik ga nu namelijk met een CSV file werken. Ben wel rond half 5 in slaap gevallen dus ik zelf alles weer opnieuw aan het nakijken :+.
------------------------------------------
Om de vraagstelling dan maar opnieuw te formuleren:
Ik moet een programma schrijven waarin een scorelijst van deelnemers wordt bijgehouden. Deze scorelijst moet deze functies bevatten:
- Deelnemers weergeven met bijbehorende score
- Deelnemers kunnen toevoegen
- Een score aan deelnemers kunnen toevoegen
- Een mutatie kunnen uitvoeren waardoor 'betaald' naar true gezet kan worden

- Als extra wil ik opnieuw een zoekfunctie toevoegen, maar dit heeft lage prioriteit en wil ik op het laatste doen als daar nog tijd voor is

De deadline is 16 januari 12:00, zoals ik eerder al uitgebreid heb uitgelegd kon ik hier niet eerder mee beginnen :(
------------------------------------------
Volgende code is meer een probeersel dan wat anders, er zijn namelijk een paar problemen mee:
1. Ik wil de CSV file openen en dan de content weergeven, dat lukt met de code die nu staat wel, maar niet onder elkaar. Dat is nu nog geen probleem (immers, de print(scoreLijst) is nu niet essentieel), maar het moet later d.m.v. een soort keuzemenu op te vragen zijn aangezien dit eigenlijk de kern van de opdracht is.
2. Het lijkt niet uit te maken of ik echt een .CSV file aanmaak of een .txt maak, maar in die uren dat ik aan proberen ben lijkt een gewone .txt minder snel fouten te geven dan een .csv file. Kan/mag ik een .txt gebruiken?
3. Eerst besloot ik een form te maken waarin gevraagd werd wie eerste/tweede/enz. is geworden, maar dat werkte niet omdat ik constant een variabele not defined fout kreeg als ik een naam invoerde. Nu heb ik dus gewoon heel simpel deelnemers toevoegen met hun score, naam en of ze betaald hebben. Echterrrr: als er waar dan ook in de code iets van tekst wordt ingevoerd krijg ik die not defined weer maar als er een cijfer wordt ingevoerd werkt het wel :? Hetzelfde met het laatste deel met de vraag of de gebruiker nog een deelnemer wil invoeren: hij accepteert geen tekst...

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Rankinglijst LAN-party
import csv

with open("deelnemers.txt", "r") as scoreBestand:
    scoreLezer = csv.reader(scoreBestand)
    scoreLijst = []
    for row in scoreLezer:
            if len(row) != 0:
                scoreLijst = scoreLijst + [row]
print(scoreLijst)
scoreBestand.close()

# Winnaars wedstrijd vragen
stop = False
while stop == False:
    print("-----------")
    print("\n")
    print("Namen winnaars invoeren.")
    print("Voer de namen goed in.")
    print("\n")
    voornaam = input("Voornaam?: ")
    score = input("Score?: ")
    betaald = input("Betaald?: ")

    with open("deelnemers.txt", "a") as scoreBestand:
        scoreSchrijver = csv.writer(scoreBestand)
        scoreSchrijver.writerow([voornaam, score, betaald])

    scoreBestand.close()
# Vragen nog een wedstrijd in te vullen of te stoppen
    stoppen = input("\nWil je de winnaars van nog een wedstrijd invullen? Zo ja, typ [j].")
    if stoppen != "j":
        stop = True
exit()

Hier ben ik een uurtje of 6 mee bezig geweest, dus dat geeft het niveau wel een beetje weer :+ De wil om het te leren is er wel. Zo goed mogelijk door de PEP8 checker heen gehaald, zaten niet veel fouten in maar toch.

9800X3D - RX 6900XT - Volvo S40 T5 '10 - Kever '74


Acties:
  • 0 Henk 'm!

  • Zeg
  • Registratie: Juli 2012
  • Laatst online: 21-09 16:44

Zeg

Je zou ook een simpel commandline programma kunnen maken waarin je options/arguments meegeeft die aanduiden wat er gedaan moet worden. Scheelt een hoop geneuzel in de logica en is waarschijnlijk ook een stuk efficiënter uit te werken.

Een voorbeeld van hoe je de commandline options zou kunnen indelen:

code:
1
2
3
4
5
6
kuusj98.py --list
kuusj98.py --add
kuusj98.py --edit <id van user>
kuusj98.py --delete <id van user>
kuusj98.py --paid <id van user>
kuusj98.py <id van user> <nieuwe score>


Voordeel hierbij is dat je meteen op de data kan werken en de logica gescheiden houdt via de arguments/options die je opgeeft, i.p.v. tijdens runtime moeilijk te moeten doen met allerlei configuratie-stappen, wat de usability ook niet echt beter maakt... Je kan dan ook meteen via stdin de (CSV-)data in het programma 'pompen'.

Overigens maakt het echt niet uit of het bestand nou eindigt met .csv, .txt of .fiets, het idee achter CSV is dat elke nieuwe rij op een nieuwe regel begint en elke waarde gescheiden is met een vooraf gedefinieerd teken (in de meeste gevallen een comma, maar ik heb ook wel eens een dubbele punt, een punt-comma of een uitroeptekens als scheidingsteken gezien).

En een handige tip, die MK1998NL ook al aangaf: het is veel leesbaarder om code in één taal te schrijven. Maak het een gewoonte om consistent te zijn in je code. Als je de code in het Engels schrijft, schrijf dan ook het commentaar/variabelen in het Engels.

[ Voor 6% gewijzigd door Zeg op 10-01-2017 20:29 ]


Acties:
  • 0 Henk 'm!

  • Kuusj
  • Registratie: April 2012
  • Laatst online: 20:51

Kuusj

Ofwel varken in 't Limburgs

Topicstarter
Zeg schreef op dinsdag 10 januari 2017 @ 20:21:
Je zou ook een simpel commandline programma kunnen maken waarin je options/arguments meegeeft die aanduiden wat er gedaan moet worden. Scheelt een hoop geneuzel in de logica en is waarschijnlijk ook een stuk efficiënter uit te werken.

Een voorbeeld van hoe je de commandline options zou kunnen indelen:

code:
1
2
3
4
5
6
kuusj98.py --list
kuusj98.py --add
kuusj98.py --edit <id van user>
kuusj98.py --delete <id van user>
kuusj98.py --paid <id van user>
kuusj98.py <id van user> <nieuwe score>


Voordeel hierbij is dat je meteen op de data kan werken en de logica gescheiden houdt via de arguments/options die je opgeeft, i.p.v. tijdens runtime moeilijk te moeten doen met allerlei configuratie-stappen, wat de usability ook niet echt beter maakt... Je kan dan ook meteen via stdin de (CSV-)data in het programma 'pompen'.

Overigens maakt het echt niet uit of het bestand nou eindigt met .csv, .txt of .fiets, het idee achter CSV is dat elke nieuwe rij op een nieuwe regel begint en elke waarde gescheiden is met een vooraf gedefinieerd teken (in de meeste gevallen een comma, maar ik heb ook wel eens een dubbele punt, een punt-comma of een uitroeptekens als scheidingsteken gezien).

En een handige tip, die MK1998NL ook al aangaf: het is veel leesbaarder om code in één taal te schrijven. Maak het een gewoonte om consistent te zijn in je code. Als je de code in het Engels schrijft, schrijf dan ook het commentaar/variabelen in het Engels.
Zo ver ik weet moet ik me voor deze opdracht echt aan 'deze' manier van het programma maken houden, in het vervolg ga ik daar zeker gebruik van maken!

Ben weer een stukje verder. Blijkt dat ik geen
Python:
1
a = input("x")

Maar
Python:
1
a = raw_input("x")

moet gebruiken om tekst in een variabele toe te wijzen als ik Python 2.7 gebruik (en dat moeten we gebruiken). Dat probleem na een paar uurtjes ergeren dus gelukkig wel opgelost. Nu zit ik eigenlijk nog met 1 hoofdvraag:
Ik vraag in een menu dat nieuwe deelnemers registreert alleen naar de naam (uiteraard), die gegevens laat ik in de CSV op een nieuwe row pleuren, maar wel met a de score (zijnde 0) en betaald (zijnde nee) erbij. Er is een apart menu waarin men de score van een specifieke deelnemer moet kunnen invoeren. Dus stel ik heb net Henk toegevoegd, staat dit in de CSV:
code:
1
[Henk, 0, nee]

Ik wil 'Henk' kunnen invoeren in een prompt, en daarna de score van Henk kunnen invoeren zodat bij bijvoorbeeld 100 punten de entry dit wordt:
code:
1
[Henk, 100, nee]


Is dit überhaupt mogelijk? Of schatten jullie de kans dat ik hoger dan een 4 scoor met een eenmalige invoer van de persoonsgegevens als zijnde reëel in :+?

Edit: blijkbaar moet ik de CSV gegevens dan in een dictionary dumpen, dan de mutaties doorvoeren en dan weer naar CSV zetten. Met andere woorden, zo veel heb ik niet aan CSV. Iemand suggereerde SQLite3 te gebruiken maar heel wijs ben ik daar nog niet uit gekomen. Morgen weer verder 7(8)7 |:(

Opnieuw excuses voor het Nederlands, ik vertaal het zsm naar Engels maar mijn groepsgenoten begrepen er anders helemaal geen snars van :( .

[ Voor 4% gewijzigd door Kuusj op 11-01-2017 02:43 ]

9800X3D - RX 6900XT - Volvo S40 T5 '10 - Kever '74


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 09-10 13:33
Allereerst denk ik dat het inderdaad een heel goed idee is om functies te gaan gebruiken. Maak voor iedere bewerking een aparte functie, dus bijvoorbeeld add_user, edit_user en print_users. Op die manier maak je de logica voor elk stukje functionaliteit los en daarmee creëer je overzicht. Maak daarbij een main functie die de data inleest, de gekozen menu optie uitleest en de bijbehorende functies aanroept.

Verder kun je CSV of een RDBMS als SQLite gebruiken, maar feit blijft dat je de data moet inladen en bij een wijziging moet wegschrijven. Voordeel van RDBMS is dat je iets makkelijker gericht een enkel record kunt overschrijven i.p.v het hele bestand. Maar omdat je maar weinig data hebt zal het niet zoveel uitmaken. CSV is wel lekker overzichtelijk en dan ben je niet afhankelijk van externe programma's.

Met CSV DictReader krijg je een list met dicts terug. Elke speler zal als dict in de lijst staan en de keys van elk dict wordt bepaald door de header op de eerste rij van het CSV bestand. Om de lijst spelers op een bepaalde key in hun dicts te sorteren, zul je zelf de sort functie moeten aanpassen. Op stackoverflow zijn hier genoeg voorbeelden van. Hint: geeft een lambda functie mee die Zde juiste key vergelijkt.

Is er niet iemand die je hier verder mee kan ondersteunen? Ik heb het idee dat jullie nogal worstelen met de basale opzet van het programma en met constructen en datastructuren van Python... Niet dat het erg is of om je een trap na te geven, maar het lijkt alsof jullie docent jullie niet erg goed heeft voorbereid op deze opdracht

[ Voor 30% gewijzigd door Morrar op 11-01-2017 10:53 ]


Acties:
  • 0 Henk 'm!

  • Kuusj
  • Registratie: April 2012
  • Laatst online: 20:51

Kuusj

Ofwel varken in 't Limburgs

Topicstarter
Morrar schreef op woensdag 11 januari 2017 @ 10:46:
Allereerst denk ik dat het inderdaad een heel goed idee is om functies te gaan gebruiken. Maak voor iedere bewerking een aparte functie, dus bijvoorbeeld add_user, edit_user en print_users. Op die manier maak je de logica voor elk stukje functionaliteit los en daarmee creëer je overzicht. Maak daarbij een main functie die de data inleest, de gekozen menu optie uitleest en de bijbehorende functies aanroept.

Verder kun je CSV of een RDBMS als SQLite gebruiken, maar feit blijft dat je de data moet inladen en bij een wijziging moet wegschrijven. Voordeel van RDBMS is dat je iets makkelijker gericht een enkel record kunt overschrijven i.p.v het hele bestand. Maar omdat je maar weinig data hebt zal het niet zoveel uitmaken. CSV is wel lekker overzichtelijk en dan ben je niet afhankelijk van externe programma's.

Met CSV DictReader krijg je een list met dicts terug. Elke speler zal als dict in de lijst staan en de keys van elk dict wordt bepaald door de header op de eerste rij van het CSV bestand. Om de lijst spelers op een bepaalde key in hun dicts te sorteren, zul je zelf de sort functie moeten aanpassen. Op stackoverflow zijn hier genoeg voorbeelden van. Hint: geeft een lambda functie mee die Zde juiste key vergelijkt.

Is er niet iemand die je hier verder mee kan ondersteunen? Ik heb het idee dat jullie nogal worstelen met de basale opzet van het programma en met constructen en datastructuren van Python... Niet dat het erg is of om je een trap na te geven, maar het lijkt alsof jullie docent jullie niet erg goed heeft voorbereid op deze opdracht
Buiten dat ik je advies enorm op prijs stel, heb je ook 100% gelijk in je laatste alinea:
Is er niet iemand die je hier verder mee kan ondersteunen? Ik heb het idee dat jullie nogal worstelen met de basale opzet van het programma en met constructen en datastructuren van Python... Niet dat het erg is of om je een trap na te geven, maar het lijkt alsof jullie docent jullie niet erg goed heeft voorbereid op deze opdracht
Zoals ik eerder al zei, ik schaam me al dood dat ik zo weinig begrijp. Het is echt geen kwestie van niet willen maar gewoon niet kunnen. De docent heeft de basisstructuur gegeven, maar hij vindt zijn eigen basis vervolgens een 4 waard. Hoe dan ook, hij heeft 'geen tijd' om ons te helpen. Ik heb inmiddels verschillende mensen een bericht gestuurd met de noodkreet of ze ons alsjeblieft willen helpen (desnoods tegen betaling haha :+). Hoe zeer je ook in iets door kunt zetten, je moet imho ook op het juiste moment de stekker eruit kunnen trekken, en voor mij is dit moment zowel mentaal als fysiek nu aangebroken :'( ;)

9800X3D - RX 6900XT - Volvo S40 T5 '10 - Kever '74


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 09-10 13:33
Mja ik zit momenteel op mobiel en heb geen laptops meer (zit tussen 2 banen in), maar wellicht kan ik er vanavond even naar kijken en wat hints/tips uitwerken. Moet natuurlijk nog wel wat overblijven om zelf van te leren.

Acties:
  • 0 Henk 'm!

  • Kuusj
  • Registratie: April 2012
  • Laatst online: 20:51

Kuusj

Ofwel varken in 't Limburgs

Topicstarter
Morrar schreef op woensdag 11 januari 2017 @ 12:43:
Mja ik zit momenteel op mobiel en heb geen laptops meer (zit tussen 2 banen in), maar wellicht kan ik er vanavond even naar kijken en wat hints/tips uitwerken. Moet natuurlijk nog wel wat overblijven om zelf van te leren.
Wauw, dat zou echt geweldig zijn! Zelf nog wat leren is uiteraard niet erg (dat is net goed) :) _/-\o_

9800X3D - RX 6900XT - Volvo S40 T5 '10 - Kever '74

Pagina: 1