Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Ik heb een probleem met mijn Python code

Pagina: 1
Acties:

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Ik ben bezig met het leren van Python op http://www.codecademy.com/
Ik heb nog nooit geprogrameerd en wil graag een taal leren.

Dit is de link van de opdracht waar ik mee bezig ben: http://www.codecademy.com...4f89dab3d788890003000096#

Ik heb nu een probleem hij geeft namelijk telkens deze error :Oops, try again! It looks like rental_car_cost does not return the correct amount (0) for 0 days.

De code word wel goed uitgevoerd in het uitvoer scherm. Dus de print opdrachten krijg ik goed te zien.

Wat doe ik fout


Dit is de code:

code:
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
 nachten = 10
locatie = "Tampa"
days = 10
kostenA = 40

def hotel_cost(nights):
    cost=nights * 140
    return cost
    
def plane_ride_cost(city):

    if city == "Charlotte":
        return 183
    elif city == "Tampa":
        return 220
    elif city == "Pittsburgh":
        return 222
    else:
        return 475
        
def rental_car_cost(car):
    
    if days == 0:
        car = 0
        return car
    elif days < 2:
        car = days * kostenA
        return car
    elif days >7:
        car = days * kostenA - 50
        return car
    else:
        car = days * kostenA - 20
        return car
    
totaal = hotel_cost(nachten) + plane_ride_cost(locatie) + rental_car_cost(days)
    
print "Kosten hotel: " + str(hotel_cost(nachten))
print "Kosten reis: " + str(plane_ride_cost(locatie))
print "Kosten huur auto: " + str(rental_car_cost(days))
print "Totale kosten: " + str(totaal)

[ Voor 5% gewijzigd door Beerkiller op 29-10-2013 22:46 ]


  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Kijk je code nog eens na en let eens goed op waar de waarden van je variabelen precies vandaan komen. Probeer desnoods eens even een testcase (bijvoorbeeld rental_car_cost(0), wat 0 moet zijn) met de hand na te rekenen door gewoon de code te lezen en domweg te doen wat er staat. Niet doen wat je denkt dat moet gebeuren maar echt doen wat er staat. Houd voor elke stap(=regel) de waarden van je variabelen bij.

Om het nog wat lastiger te maken, je hoeft in totaal maar vijf bytes te veranderen (wijzigen/toevoegen, niet per se allemaal aaneengesloten) en dan werkt het :+

[ Voor 16% gewijzigd door DataGhost op 29-10-2013 22:56 ]


  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Als ik de variable days=0 maak dan zegt hij dit :

Oops, try again! It looks like rental_car_cost does not return the correct amount (40) for 1 days.

En als ik de variable days=20 maak of hoger dan 7 krijg ik dit weer:

Oops, try again! It looks like rental_car_cost does not return the correct amount (0) for 0 days.

Dit is de uitvoer in de console

als days=1:
Kosten hotel: 1400
Kosten reis: 220
Kosten huur auto: 750
Totale kosten: 2370
None 


als days=0:
Kosten hotel: 1400
Kosten reis: 220
Kosten huur auto: 0
Totale kosten: 1620
None


Hoe maak ik deze code in een echt Python programma.
Ik heb Phyton 3 en 2.7 geinstaleerd. Alleen weet ik niet hoe ik hier de code kan gebriuken om een programmatje te krijg

[ Voor 41% gewijzigd door Beerkiller op 29-10-2013 23:47 ]


  • Solopher
  • Registratie: December 2002
  • Laatst online: 30-10 12:28
Je kunt gewoon die code in een .py bestand stoppen en dan het bestand in IDLE openen vervolgens doe je Run -> Run Module.

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Solopher schreef op dinsdag 29 oktober 2013 @ 23:20:
Je kunt gewoon die code in een .py bestand stoppen en dan het bestand in IDLE openen vervolgens doe je Run -> Run Module.
Kun je dat nog even duidelijker uitleggen?

Ik heb nu een bestandje gemaakt genaamd: code1.py en als ik daar dubbel op klik, dan flitst er snel een soort dos scherm voorbij.

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Beerkiller schreef op dinsdag 29 oktober 2013 @ 23:01:
Als ik de variable days 0 maak dan zegt hij dit :

Oops, try again! It looks like rental_car_cost does not return the correct amount (40) for 1 days.

En als ik de variable days 20 maak of hoger dan 7 krijg ik dit weer:

Oops, try again! It looks like rental_car_cost does not return the correct amount (0) for 0 days.
Lees de instructies nog eens

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
DataGhost schreef op dinsdag 29 oktober 2013 @ 23:31:
[...]

Lees de instructies nog eens
Die er naast staan of die van de error of van mijn code?

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Die die ernaast staan. Het staat er allemaal in en hopelijk maakt het duidelijk wat je fout doet met het probeersel wat je beschreef.

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
DataGhost schreef op dinsdag 29 oktober 2013 @ 23:35:
Die die ernaast staan. Het staat er allemaal in en hopelijk maakt het duidelijk wat je fout doet met het probeersel wat je beschreef.
Heb het nu 7x goed door gelezen en weer gekeken naar mijn code maar ik zie niet wat ik verkeerd doe.

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

DataGhost schreef op dinsdag 29 oktober 2013 @ 22:53:
Probeer desnoods eens even een testcase (bijvoorbeeld rental_car_cost(0), wat 0 moet zijn) met de hand na te rekenen door gewoon de code te lezen en domweg te doen wat er staat. Niet doen wat je denkt dat moet gebeuren maar echt doen wat er staat. Houd voor elke stap(=regel) de waarden van je variabelen bij.
Als je dit eens doet en de uitwerking daarvan in een reply zet kan iemand je wat gerichter helpen met het zelf opsporen van je denkfout :)

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Dat heb ik hier toch staan
Beerkiller schreef op dinsdag 29 oktober 2013 @ 23:01:
Als ik de variable days=0 maak dan zegt hij dit :

Oops, try again! It looks like rental_car_cost does not return the correct amount (40) for 1 days.

En als ik de variable days=20 maak of hoger dan 7 krijg ik dit weer:

Oops, try again! It looks like rental_car_cost does not return the correct amount (0) for 0 days.

Dit is de uitvoer in de console

als days=1:
Kosten hotel: 1400
Kosten reis: 220
Kosten huur auto: 750
Totale kosten: 2370
None 


als days=0:
Kosten hotel: 1400
Kosten reis: 220
Kosten huur auto: 0
Totale kosten: 1620
None


Hoe maak ik deze code in een echt Python programma.
Ik heb Phyton 3 en 2.7 geinstaleerd. Alleen weet ik niet hoe ik hier de code kan gebriuken om een programmatje te krijg

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Ja, dat is wat je code doet en dat is kennelijk verschillend met wat het hoort te doen of met wat jij denkt dat het doet. Met met de hand bedoel ik echt met de hand, zonder computer. Als het goed is geeft dat je inzicht in waar het precies scheef gaat tussen wat er in jouw hoofd zit en wat er in de code zit. De bedoeling hiervan is dat je op een gegeven moment ziet van "hee, nu heeft variabele x opeens de waarde y, terwijl ik dacht dat hij z zou hebben!" en dan heb je je probleem te pakken.

Als je het dan nog niet ziet en je stap-voor-stap hier opschrijft hoe je je boekhouding hebt gedaan kan iemand aanwijzen van "ja maar dat wat jij zegt dat klopt niet want <reden>". Ik kan je ook nu vertellen wat er mis is maar het idee is dat je dit riedeltje kan doen zodat je bij een later probleem niet net zo hopeloos in de knoop komt te zitten.

[ Voor 26% gewijzigd door DataGhost op 29-10-2013 23:52 ]


  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
als het in jouw ogen gewoon goed is, skip dan de opgave. Heb bij code academy al meerdere keren gehad dat mijn code toch echt juist was, maar dat de tool er niks van begreep.

  • Solopher
  • Registratie: December 2002
  • Laatst online: 30-10 12:28
Beerkiller schreef op dinsdag 29 oktober 2013 @ 23:27:
[...]


Kun je dat nog even duidelijker uitleggen?

Ik heb nu een bestandje gemaakt genaamd: code1.py en als ik daar dubbel op klik, dan flitst er snel een soort dos scherm voorbij.
Er zijn verschillende manieren om een Python script te draaien, er van uitgaande dat je Windows gebruikt:
http://docs.python.org/2/faq/windows
Bijv.
  1. Start -> Uitvoeren -> cmd
  2. cd c:/pythontutorial
  3. python mijnbestand.py

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

steffex schreef op dinsdag 29 oktober 2013 @ 23:53:
als het in jouw ogen gewoon goed is, skip dan de opgave. Heb bij code academy al meerdere keren gehad dat mijn code toch echt juist was, maar dat de tool er niks van begreep.
De code is niet juist en met skippen leer je helemaal niks. Ik heb zowel de code van de TS aan weten te passen zodat 'ie geaccepteerd werd en zelf ook een versie geschreven, werkt prima.
Als je trouwens een voorbeeld daarvan hebt zou ik dat naar de makers opsturen zodat ze hun tool kunnen fixen maar stiekem denk ik dat het toch user-error was :+

[ Voor 15% gewijzigd door DataGhost op 29-10-2013 23:55 ]


  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Nou wat ik denk dat er gebeurt is dit:

Als ik de auto niet leen dus 0 days zij de variable days=0 moeten zijn

dan is hij dus kleiner dan de 2 of 1 en gaat hij dus if days = 0 uitvoeren

dus heeft hij wel een manier om het uitvoeren als de waarde 0 is

Het is trouwens een melding van de site zelf. Niet uit de console
En hoe kan ik er voor zorgen dat als ik dubbel klik hij niet direct sluit.

[ Voor 10% gewijzigd door Beerkiller op 29-10-2013 23:58 ]


  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Beetje summier, maar goed, het is een begin. Wat is de waarde van days op, zeg, regel 23?

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
0 denk ik

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Dan geeft je functie toch altijd 0 terug? Dan wordt de andere code daarin *nooit* uitgevoerd. (hint: lees de instructies aan de linkerkant nog eens met dit in je achterhoofd :+ )

[ Voor 31% gewijzigd door DataGhost op 30-10-2013 00:03 ]


  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Ja ik begin hem te snappen alleen weet ik niet hoe ik hem wel kan laten uitvoeren

  • efan
  • Registratie: Januari 2001
  • Niet online
regel 23 weghalen? :)

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Eh, laten we dat maar niet doen. Reageer dan gewoon niet :/ maakt trouwens niet uit maar dat is een ander verhaal. Het is in ieder geval op geen enkele manier een oplossing

Beerkiller: wat vooral belangrijk is *waarom* je denkt dat de waarde van days 0 is, waar komt die waarde vandaan? Op welke regel wordt die op 0 gezet?

[ Voor 23% gewijzigd door DataGhost op 30-10-2013 00:09 ]


  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
op regel 3 bij days

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Okee, maar wat staat er in de instructies?

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Dat het huren van de auto 40 dollar per dag kost
Bij 3 tot 7 dagen heb je 20 dollar korting
en bij 7 of meer dagen heb je 50 dollar korting.

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

En wat staat daarboven? :+ we zijn er bijna!

[ Voor 25% gewijzigd door DataGhost op 30-10-2013 00:10 ]


  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
dat ik een functie moet definieren die dagen als input heeft

  • efan
  • Registratie: Januari 2001
  • Niet online
write a function called rental_car_cost that takes days as input:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def rental_car_cost(days):
    
    if days == 0:
        car = 0
        return car
    elif days <= 2:
        car = days * kostenA
        return car
    elif days >= 7:
        car = days * kostenA - 50
        return car
    else:
        car = days * kostenA - 20
        return car

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Beerkiller schreef op woensdag 30 oktober 2013 @ 00:11:
dat ik een functie moet definieren die dagen als input heeft
Juist! Wat heeft jouw functie als input?

ido: give a man a fish vs teach a man how to fish. Je verprutst alles ongeveer.

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
car

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
got it

code:
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
nachten = 10
locatie = "Tampa"
days = 2
kostenA = 40

def hotel_cost(nights):
    cost=nights * 140
    return cost
    
def plane_ride_cost(city):

    if city == "Charlotte":
        return 183
    elif city == "Tampa":
        return 220
    elif city == "Pittsburgh":
        return 222
    else:
        return 475
        
def rental_car_cost(days):
    
    if days < 1:
        car = 0
        return car
    elif days <= 2:
        car = days * kostenA
        return car
    elif days >= 7:
        car = days * kostenA - 50
        return car
    else:
        car = days * kostenA - 20
        return car
    
totaal = hotel_cost(nachten) + plane_ride_cost(locatie) + rental_car_cost(days)
    
print "Kosten hotel: " + str(hotel_cost(nachten))
print "Kosten reis: " + str(plane_ride_cost(locatie))
print "Kosten huur auto: " + str(rental_car_cost(days))
print "Totale kosten: " + str(totaal)

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

Mooi :) Ik hoop dat je dit topic om kan zetten in een soort werkwijze om problemen te debuggen :)

In dit geval was het een soort van toeval dat het werkte, je had "car" (die nu "days" is) ook prima "frituur" kunnen noemen. Als je vervolgens binnen je functie alle instanties van "days" (die je dus eigenlijk bedoelde) vervangt door "frituur" werkt het net zo goed. Het 'toeval' zit hem in jouw definitie van "days" in de global scope, daarom is de variabele wel 'bekend' binnen de functie en zal altijd gebruikt worden wat je in de global scope gezet hebt. Op het moment dat je de declaratie op regel 3 weghaalt zal je (oude) code helemaal niet meer werken.

[ Voor 74% gewijzigd door DataGhost op 30-10-2013 00:22 ]


  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Ja alleen ik snap die functie dingen nog niet echt. Ik haal ze telkens met variabelen door elkaar.

Kun je me goed uitleggen misschien hoe dat funcite dingen precies zijn op gebouwd?

Zoals ik het zie

def denaamvandefunctie(een variabele):
code die uitgevoerd moet worden
return wat je weer terug wilt stoppen in de variable

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 21-11 17:03

DataGhost

iPL dev

code:
1
2
3
4
aap = 2
def denaamvandefunctie(banaan):
  return aap + banaan + boom
print str(denaamvandefunctie(3))


kan je zien als
code:
1
print str(2 + 3 + ???)

de variabele aap komt uit de global scope (dit gebruik je in principe zo min mogelijk, later leer je het verantwoordelijk en met mate te gebruiken), de variabele banaan wordt gezet in de aanroep op regel 4 en de variabele boom is onbekend dus je programma zal niet werken. Wat je returnt is eigenlijk een soort vervanging voor de functieaanroep en het heeft in principe weinig te maken met de eventuele variabelen in je functiedefinitie. Je kan namelijk ook prima functies maken met 0, 2 of meer variabelen:

code:
1
2
3
4
5
6
def funca():
  return 3
def funcb(a,b,c):
  return a+b+c
print str(funca())
print str(funcb(1,2,3))

geeft als output eerst 3 en daarna 6. Ik hoop dat dit een beetje duidelijk is, ik kan niet zo geweldig uitleggen :+

  • DXaroth
  • Registratie: Maart 2011
  • Laatst online: 24-08 19:58
Functies zijn een basis principe van programmeren, die staan je toe om bepaalde instructies die anders herhaaldelijk zouden worden neergezet, uit te voeren.
je geeft argumenten mee aan een functie om bepaalde variabelen in die functie in te kunnen vullen.. in jouw functie is 'days' variabel, daar test je op, en dat geef je terug... kostenA, daarentegen, is ook een variable in technische vorm, maar wordt hier gebruikt als constante (je kan immers kostenA in die functie veranderen met de waarde er van, zonder dat de werking anders gaat).

Functies, in python, zijn echter speciaal; daar kan je nog veel meer truukjes mee uitvoeren, maar dat laten we even achterwege.

  • Beerkiller
  • Registratie: Februari 2009
  • Laatst online: 18-10 17:29
Wat er tussen de haakjes staat als je een functie maakt. Hoe kan ik dat gebruiken in mijn programma

[ Voor 42% gewijzigd door Beerkiller op 30-10-2013 00:48 ]


  • DXaroth
  • Registratie: Maart 2011
  • Laatst online: 24-08 19:58
Beerkiller schreef op woensdag 30 oktober 2013 @ 00:44:
hoe kan ik dat wat dus de haakjes staat bij een functie gebruiken
of er ontbreken wat woorden in die zin waardoor ik het niet begrijp, of het is te laat voor mij om uberhaubt iets te begrijpen.

  • Merethil
  • Registratie: December 2008
  • Laatst online: 08:50
Beerkiller schreef op woensdag 30 oktober 2013 @ 00:44:
Wat er tussen de haakjes staat als je een functie maakt. Hoe kan ik dat gebruiken in mijn programma
De hoofdreden van een functie is dat je je code zo bouwt dat je niet dezelfde code meermaals schrijft op verschillende plekken, daarvoor gebruik je dan een functie die je aan kan roepen zodat je altijd hetzelfde riedeltje uitvoert zodra jij die specifieke regels code wilt draaien.
Een ander voordeel is dat je alleen de functie hoeft aan te passen, en dus je aanpassingen maar op één plek hoeft te maken als er wat wijzigt in plaats van op 10+ verschillende plekken.

Daarnaast zijn functies een hele mooie manier om niet één lap code te krijgen maar alles netjes op te delen waardoor het overzicht (als het goed is) behouden blijft.
Een functie in Python bestaat uit:

Python:
1
2
3
def funca():
  bla = doSomething()
  return 3


- Definition (def funca()) -> naam van de functie
- "Inputhaakjes" (def funca(variabele x) ) -> variabelen die je mee wilt geven aan de functie
- codefield (bla = doSomething()) -> code die uitgevoerd moet worden elke keer dat je de functie aanroept.
- return (return 3) -> Dit hoeft niet altijd, maar als je bijvoorbeeld een berekening doet in je functie kan je die returnen om je berekende waarde verderop te gebruiken in je code.
Pagina: 1