programmeren met python

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,
Ik ben voor school een programma aan het schrijven met verschillende functies.

Maar ik zit vast bij 1 functie.

De opgave is:

Het is handig om een spelsituatie te kunnen ingeven via een apart tekstbestand. Zo kan je verschillende bestanden aanmaken die elk een zogenaamd “level” van het spel bevatten.Zo’n bestand bevat de datagegevens op verschillende tekstregels. Hieronder vind je een voorbeeld.
PLANEET 100 200 100
PLANEET 150 400 200
PLANEET 400 500 200
RAKET 5 5 10 10
Een regel bevat dus ofwel de gegevens voor een planeet, ofwel de gegevens van de raket. Een regel voor een planeet begint met het woord “PLANEET” en bevat, achtereenvolgens en gescheiden door een spatie,de x-coördinaat en y- coördinaat van de beginpositie en de massa van de planeet. De regel voor de raket begint met het woord “RAKET” en bevat, achtereenvolgens en gescheiden door een spatie, de x-coördinaat en y-coördinaat van de beginpositie en de x-component en y-component van de beginsnelheid van de raket.
In formules.py:
⋆ Schrijf een functie lees_planeten(bestandsnaam) die een bestand met de gegeven bestandsnaam inleest en
een lijst teruggee met de gegevens per planeet gebundeld als een tupel zoals de func es totaal_zwaartekrachtsveld en voorspel ze verwachten.

Het gene wat ik had was

def inlezen():
filename = raw_input('Geef de naam van het bestand dat u wilt inlezen: ')
try:
fo = open(filename,'r')
contents = fo.read()
fo.close()
return contents
except:
print

Maar dit klopt niet, is er iemand die mij kan helpen?

Alvast bedankt

Mvg

Beste antwoord (via Verwijderd op 18-12-2016 20:47)


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 08:54
Tip: als je een tekst file opent kun je de regels een voor een uitlezen met een for loop. Een filehandle werkt als iterator.

Tip 2: het is handiger om with te gebruiken om files te openen ipv try... except. Dus:

Python:
1
2
with open('test.txt', 'r') as fh:
    ...

[ Voor 39% gewijzigd door Morrar op 18-12-2016 22:12 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Wat klopt er niet aan? En wat wil je bereiken? Hoe zou dit alsnog wel werken waardoor je de 'foute' resultaten krijgt?

En wil je je code in code-tags zetten? :)

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:47

Ventieldopje

I'm not your pal, mate!

Hebben ze op school geen leraar meer? :?

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


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

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 08:54
Tip: als je een tekst file opent kun je de regels een voor een uitlezen met een for loop. Een filehandle werkt als iterator.

Tip 2: het is handiger om with te gebruiken om files te openen ipv try... except. Dus:

Python:
1
2
with open('test.txt', 'r') as fh:
    ...

[ Voor 39% gewijzigd door Morrar op 18-12-2016 22:12 ]


Acties:
  • 0 Henk 'm!

  • Kraay89
  • Registratie: September 2012
  • Laatst online: 08-09 10:31
Je zegt: het klopt niet. Daaruit leid ik af dat het niet goed gerekend wordt. Ook het verschil tussen de vraag en wat je uiteindelijk geprobeerd hebt lijkt dat aan te wijzen. Je doet iets anders dan er gevraagd wordt. Jij hebt een functie gemaakt die om user input vraagt, dat staat niet in de opdracht.

Lees de vraag nog eens goed en deel hem op in kleine stukjes, werk ze 1 voor 1 uit. Morrar geeft al een aantal goede tips, je kunt er meer over vinden in de online documentatie van Python (python 2.7 of python 3). Hier staan overal voorbeelden bij. Google kan ook erg goed helpen. Leren programmeren bestaat voor een deel uit het leren de goede vragen te stellen.

De opmaak van je openingspost kan, zoals eerder vermeld, een stuk beter!

Acties:
  • 0 Henk 'm!

  • Kuusj
  • Registratie: April 2012
  • Laatst online: 14-09 16:24

Kuusj

Ofwel varken in 't Limburgs

Ventieldopje schreef op zondag 18 december 2016 @ 19:56:
Hebben ze op school geen leraar meer? :?
Natuurlijk wel, maar uit eigen ervaring kan ik inmiddels wel zeggen dat je daar meestal zeer weinig aan hebt. Zelf moet ik voor mijn projectweken een programma maken met een scorebord voor een LAN-party. Het enige wat je meekrijgt is de absolute basiskennis van Python en dan is het "zoek het maar uit". Resultaat een 4.

Hier een stukje van de code die ik voor een gedeelte heb gemaakt, en na uren en uren zoeken en proberen op een zoekfunctie heb ik het opgegeven en ben naar de docent gegaan. Deze tikt vervolgens een 20 minuten en daar is je zoekfuntie. Hoe het werkt? Ik heb geen flauw idee, uitgebreide uitleg is geen tijd voor. Ik begrijp best wel dat studenten hier komen vragen hoe iets moet, omdat hier simpelweg een enorme berg kennis ligt. Zelf heb ik ook getwijfeld toen ik echt geen hoop meer had. Nu weet ik nog steeds niet hoe het moet, maar ik wil jullie er ook niet mee lastig vallen.

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
        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... ")

Excuses voor Engels mix met Nederlandse variabelen, ik weet dat het meestal not done is.

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


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:47

Ventieldopje

I'm not your pal, mate!

kuusj98 schreef op dinsdag 20 december 2016 @ 12:06:
[...]

Natuurlijk wel, maar uit eigen ervaring kan ik inmiddels wel zeggen dat je daar meestal zeer weinig aan hebt. Zelf moet ik voor mijn projectweken een programma maken met een scorebord voor een LAN-party. Het enige wat je meekrijgt is de absolute basiskennis van Python en dan is het "zoek het maar uit". Resultaat een 4.

Hier een stukje van de code die ik voor een gedeelte heb gemaakt, en na uren en uren zoeken en proberen op een zoekfunctie heb ik het opgegeven en ben naar de docent gegaan. Deze tikt vervolgens een 20 minuten en daar is je zoekfuntie. Hoe het werkt? Ik heb geen flauw idee, uitgebreide uitleg is geen tijd voor. Ik begrijp best wel dat studenten hier komen vragen hoe iets moet, omdat hier simpelweg een enorme berg kennis ligt. Zelf heb ik ook getwijfeld toen ik echt geen hoop meer had. Nu weet ik nog steeds niet hoe het moet, maar ik wil jullie er ook niet mee lastig vallen.

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
        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... ")

Excuses voor Engels mix met Nederlandse variabelen, ik weet dat het meestal not done is.
Het is treurig om te lezen hoe dat er bij jullie (en vast meer scholen) aan toe gaat. Ik begrijp dat je dan uiteindelijk hier terecht komt. Echter zie ik het ook vaak gebeuren dat scholieren hier met het minste of geringste al aankloppen en verwachten dat wij hun opdracht wel even gaan maken of een les geven, dat gaat natuurlijk niet.

Enige wat ik je als tip mee kan geven om het leren makkelijker te maken (hopelijk) is dat je de syntax even moet vergeten en moet focussen op de logica. Probeer het letterlijk te lezen, "als dit, dan dit en dat". Als je dan de globale logica hebt bedacht kun je aan de implementatie gaan werken en dit opsplitsen in kleine stapjes. Pak er een stap uit en ga daar dingen mee uit proberen los van je grote brij code, zo vind je vanzelf een makkelijke of efficiente manier om die stap te doen, die implementeer je dan vervolgens.

Echter, zonder te weten waar je precies tegenaan loopt is het lastig advies te geven hoe je dit zelf uit kan vogelen. Dus mijn vraag, waar loop je precies tegenaan, wát snap je niet?

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 14-09 20:35

Compizfox

Bait for wenchmarks

Jullie leren tenminste nog Python. Toen ik informatica had op de middelbare school leerden we programmeren in VBA...

Maar dat vak stelde dan ook echt geen ene reet voor.

Gewoon een heel grote verzameling snoertjes


Acties:
  • 0 Henk 'm!

  • Kuusj
  • Registratie: April 2012
  • Laatst online: 14-09 16:24

Kuusj

Ofwel varken in 't Limburgs

Ventieldopje schreef op dinsdag 20 december 2016 @ 12:28:
[...]


Het is treurig om te lezen hoe dat er bij jullie (en vast meer scholen) aan toe gaat. Ik begrijp dat je dan uiteindelijk hier terecht komt. Echter zie ik het ook vaak gebeuren dat scholieren hier met het minste of geringste al aankloppen en verwachten dat wij hun opdracht wel even gaan maken of een les geven, dat gaat natuurlijk niet.

Enige wat ik je als tip mee kan geven om het leren makkelijker te maken (hopelijk) is dat je de syntax even moet vergeten en moet focussen op de logica. Probeer het letterlijk te lezen, "als dit, dan dit en dat". Als je dan de globale logica hebt bedacht kun je aan de implementatie gaan werken en dit opsplitsen in kleine stapjes. Pak er een stap uit en ga daar dingen mee uit proberen los van je grote brij code, zo vind je vanzelf een makkelijke of efficiente manier om die stap te doen, die implementeer je dan vervolgens.

Echter, zonder te weten waar je precies tegenaan loopt is het lastig advies te geven hoe je dit zelf uit kan vogelen. Dus mijn vraag, waar loop je precies tegenaan, wát snap je niet?
Ik begrijp dat er inderdaad ook een hoop mensen zijn die direct na het lezen van de opdracht hem hier dumpen en dan verwachten dat er een pasklaar programma uitrolt. Dat is inderdaad echt not-done :r

Wellicht dat ik beter een apart topic kan openen (gezien het bar weinig te maken heeft met dit topic), maar het komt erop neer dat ik functies als boolean-operatoren en dingen als rekenen in Python/variabelen toewijzen/'print'/comments e.d. wel ken, maar bij stukken code als
Python:
1
2
3
4
5
6
            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")

Zou ik zelf niet verder komen dan
bestand = open ("deelnemers.txt", "w")
Dan krijg je het "for d", "for i" of bijvoorbeeld het gedeelte tussen de haakjes van
bestand.write(str(d[i])+";")
en dat zijn dingen waar ik uren op kan zoeken, uren mee kan proberen, maar als ik dan na x aantal uur helemaal opgefokt in bed ga liggen kom ik tot de conclusie dat het gewoon niet lukt. Dit soort dingen worden dus ook niet uitgelegd, want de docent is continue bezig met vragen beantwoorden, heeft na een uur een half uurtje rookpauze of gaat rustig een half uur koffie drinken, en dat zijn dan klassen met maar 14 mensen 8)7 . Hoewel ik nog wel een heel klein beetje kan redden met simpele dingen in Python hebben mijn project-groepsgenoten echt geen enkel idee wat ze moeten doen.

Ik ga de betreffende docent een mail sturen met de vraag of de opdracht voor de herkansing hetzelfde is, en dan zal ik een deftig topic maken :) Bedankt in ieder geval!

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


Acties:
  • +1 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:47

Ventieldopje

I'm not your pal, mate!

kuusj98 schreef op dinsdag 20 december 2016 @ 12:47:
[...]

Ik begrijp dat er inderdaad ook een hoop mensen zijn die direct na het lezen van de opdracht hem hier dumpen en dan verwachten dat er een pasklaar programma uitrolt. Dat is inderdaad echt not-done :r

Wellicht dat ik beter een apart topic kan openen (gezien het bar weinig te maken heeft met dit topic), maar het komt erop neer dat ik functies als boolean-operatoren en dingen als rekenen in Python/variabelen toewijzen/'print'/comments e.d. wel ken, maar bij stukken code als
Python:
1
2
3
4
5
6
            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")

Zou ik zelf niet verder komen dan
[...]

Dan krijg je het "for d", "for i" of bijvoorbeeld het gedeelte tussen de haakjes van
[...]
en dat zijn dingen waar ik uren op kan zoeken, uren mee kan proberen, maar als ik dan na x aantal uur helemaal opgefokt in bed ga liggen kom ik tot de conclusie dat het gewoon niet lukt. Dit soort dingen worden dus ook niet uitgelegd, want de docent is continue bezig met vragen beantwoorden, heeft na een uur een half uurtje rookpauze of gaat rustig een half uur koffie drinken, en dat zijn dan klassen met maar 14 mensen 8)7 . Hoewel ik nog wel een heel klein beetje kan redden met simpele dingen in Python hebben mijn project-groepsgenoten echt geen enkel idee wat ze moeten doen.

Ik ga de betreffende docent een mail sturen met de vraag of de opdracht voor de herkansing hetzelfde is, en dan zal ik een deftig topic maken :) Bedankt in ieder geval!
Dit zijn typisch van de dingen die de leraar niet individueel uit moet leggen maar aan de hele klas. Zeker als je merkt dat iedereen er tegenaan loopt. Doe je dat niet en ga je het per geval uitleggen dan kom je gewoon niet uit met je tijd lijkt me.

Maar om dit soort dingen te leren begrijpen ga je gewoon ontleden. Pak de for loop en ga daar op zoeken, dan zul je vinden dat dit een veel gebruikt concept is en veel over te vinden is. Om te oefenen maak je gewoon een nieuw scriptje waar je puur gaat oefenen met arrays en for loops.

Het zelfde doe je met het bestand.write gedeelte, als je dat gaat ontleden zie je de volgende dingen:
bestand.write(), str(), d[i] en de "+" operator. Eerst kun je gaan kijken naar wat bestand.write eigenlijk doet en wat voor parameters hij aanneemt. Dan heb je de functie str(), wat doet deze? Dan heb je d[i], wat is dit? en tot slot de "+" operator, wat doet deze?

Bij d[i] zal je er achter komen dat het ook een veel gebruikt concept is, een array (zal je ook bij for loops vaak tegen komen).

Dingen zoals for loops en arrays zijn basis concepten die in veel talen gelden en niet veel van elkaar verschillen. Deze vind je als het goed is in ieder beginners python boek / tutorial. Het kan geen kwaad om die boeken/tutorials er nog eens op na te slaan om ze beter te leren begrijpen. Als je dat begrijpt zal je de code van je leraar ook beter begrijpen.

offtopic:
Het is te triest voor woorden als de leraar dit soort basis concepten niet heeft uitgelegd. Dan neemt hij "voor de klas staan" wel heel letterlijk :X

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • +1 Henk 'm!

  • Stoelpoot
  • Registratie: September 2012
  • Niet online
Ventieldopje schreef op dinsdag 20 december 2016 @ 13:08:
[...]

offtopic:
Het is te triest voor woorden als de leraar dit soort basis concepten niet heeft uitgelegd. Dan neemt hij "voor de klas staan" wel heel letterlijk :X
Persoonlijk zou ik zoiets ook best bij een eventueel opleidingshoofd melden of wat dan ook. Ik had ook een docent die de hele dag druk was met van alles wat niet met de les te maken had, maar die zorgde er wel netjes voor dat je snapte wat ie uitlegde.

Acties:
  • +1 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 08:54
Voor mensen die Python willen leren, de basis wordt aardig afgedekt in:
https://www.codecademy.com/learn/python

Daar leer je de syntax en de basisconcepten als data types, functies en klasses. Uiteraard zijn er ook meer toegepaste cursussen als je Python voor een specifiek doel wilt gebruiken zoals data science of machine learning.

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Aangezien deze data nogal csv-achtig is zou je kunnen overwegen de csv module te pakken: https://docs.python.org/3/library/csv.html
Daarbij moet je een dialect opgeven waar je in verteld dat je input spatie (of tab) gescheiden is.

Direct het bestand uitlezen kan uiteraard ook prima, al zou ik dan aanraden direct een namedtuple te gebruiken: https://docs.python.org/3...ml#collections.namedtuple

Blog [Stackoverflow] [LinkedIn]

Pagina: 1