python foutcode

Pagina: 1
Acties:
  • 387 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • arneschoonvliet
  • Registratie: Februari 2010
  • Laatst online: 10:34
beste tweakers,

dit is de code

Python: volume balk.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def voorbereiding():
        while 1:
            stoppen = raw_input("wil je stoppen?(y/n) ")
            if stoppen == 'y':break
            eenheid = raw_input("geef je eenheid in ")
            
            berekening()
    
    
def berekening():
    b = input('geef de breedte ')
    print str(b) + str(eenheid)
    l = input('geef de lengte ')
    print str(l) + str(eenheid)
    h = input('geef de hoogte ')
    print str(h) + str(eenheid)
    uitkomst = b*l*h
    print "\nHet volume van de balk is " + str(uitkomst)

voorbereiding()


en het probleem is, als ik dit uitvoer krijg ik deze fout

Traceback (most recent call last):
File "C:/Users/Arne/Desktop/volume balk2.py", line 20, in <module>
voorbereiding()
File "C:/Users/Arne/Desktop/volume balk2.py", line 7, in voorbereiding
berekening()
File "C:/Users/Arne/Desktop/volume balk2.py", line 12, in berekening
print str(b) + str(eenheid)
NameError: global name 'eenheid' is not defined


gisteren had ik dit niet, het programma werkt toen prima, ik start het vandaag terug op en geeft deze foutcode hoe kan dit?, wie kan mij helpen?

ps. ik heb al gezocht op google en kon geen antwoord vinden ,, ben ook nog een beginneling

mvg,

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14-09 17:58

Matis

Rubber Rocket

Het toverwoord waarnaar jij opzoek bent is scope

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Verwijderd

Het probleem is dat je twee aparte functies hebt, die elkaars variabelen niet kunnen zien. Zoek eens op 'python scope' als je meer info wilt hebben daarover. Je kunt het oplossen met bijv. het 'global'-keyword, of door de ene functie binnen de andere te definiëren. Beter is misschien om in dit geval de code niet in functies te dumpen (heeft geen echte zin hier) en met loops te werken.

edit: Matis is me voor...

[ Voor 5% gewijzigd door Verwijderd op 14-05-2010 19:43 ]


Acties:
  • 0 Henk 'm!

  • 0xDEADBEEF
  • Registratie: December 2003
  • Niet online
Oh :P dan heb je toch wat gewijzigd/iets anders gedaan.

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
eenheid = 0
def voorbereiding():
        while 1:
            stoppen = raw_input("wil je stoppen?(y/n) ")
            if stoppen == 'y':break
            eenheid = raw_input("geef je eenheid in ")
            
            berekening()
    
    
def berekening():
    b = input('geef de breedte ')
    print str(b) + str(eenheid)
    l = input('geef de lengte ')
    print str(l) + str(eenheid)
    h = input('geef de hoogte ')
    print str(h) + str(eenheid)
    uitkomst = b*l*h
    print "\nHet volume van de balk is " + str(uitkomst)

voorbereiding()
>>> voorbereiding()
wil je stoppen?(y/n) n
geef je eenheid in 2
geef de breedte 4
40
geef de lengte 6
60
geef de hoogte 8
80

Het volume van de balk is 192
wil je stoppen?(y/n) y
>>>

"Religion is an insult to human dignity. With or without it you would have good people doing good things and evil people doing evil things. But for good people to do evil things, that takes religion." - Steven Weinberg


Acties:
  • 0 Henk 'm!

  • arneschoonvliet
  • Registratie: Februari 2010
  • Laatst online: 10:34
twearkers ,

bedankt voor de snelle reacties ,, het probleem is nu opgelost

dit door middel van
global te gebruiken .

hartelijk bedankt en tot de volgende vraag XD

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zat te sidderen bij het woord Global. En deadbeef heeft waarschijnlijk de oorzaak al opgespoord :P Zijn oplossing lijkt mij beter, maar misschien overschat ik mijn kennis (op python-gebied).

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:58

Creepy

Tactical Espionage Splatterer

Wil je voor een eventuele vraag de volgende keer wel iets meer moeite steken in het zelf oplossen van je probleem of als je dat wel hebt gedaan dat aangeven in je topicstart? Nu is het niet meer dan "dit is mijn code, en ik krijg een foutmelding" en dat is echt te weinig. Dat je beginner bent is niet erg maar met een beetje logisch nadenken en wat zoeken moet je toch wel *iets* hebben geprobeerd om dit op te lossen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Even achter Creepy's slotje aan omdat er hier nog steeds iets goed fout gaat:
Verwijderd schreef op vrijdag 14 mei 2010 @ 20:10:
Ik zat te sidderen bij het woord Global. En deadbeef heeft waarschijnlijk de oorzaak al opgespoord :P Zijn oplossing lijkt mij beter, maar misschien overschat ik mijn kennis (op python-gebied).
Nee, want 0xDEADBEEF gebruikt ook de globale scope door de variabele in die scope te initialiseren. Scorpia: zoek liever op hoe je parameters doorgeeft in Python, dat is de enige correcte oplossing hier. Overal maar globals voor gebruiken is iets dat je maar beter niet kan doen, dan zie je over 100 functies door de bomen het bos niet meer...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.