[Python] Uitkomst van script klopt niet, wat doet ik fout?

Pagina: 1
Acties:
  • 386 views

Vraag


Acties:
  • 0 Henk 'm!

  • Damsho
  • Registratie: Juni 2014
  • Laatst online: 21-09-2020
Goedemiddag allemaal,

Ik ben bezig met een script te schrijven in Python om de kosten van transport te berekenen op basis van pallet aantal en type.

Nu ben ik net begonnen met Python, maar loop tegen het volgende aan:

Ik laat de user 3x een input geven voor elk type pallet hoeveel stuks het zijn per adres.
Wanneer de user 3x 0 invult eindigt het script en komt de totale uitkomst.
Maar als ik nu wat dingen probeer met invullen is de uitkomst telkens niet juist.

Hier het stukje code:

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
print ('Om het programma te stoppen voer 3 maal 0 in.')
print ''

def main ():
    total_blok = 0.0
    blok_pallet_kosten = [3.0, 5.0]
    map(float, blok_pallet_kosten)

    total_europallet = 0.0
    euro_pallet_kosten = [2.0, 6.0]
    map(float, euro_pallet_kosten)

    total_klein_pallet = 0.0
    klein_pallet_kosten = [4.0, 9.0]
    map(float, klein_pallet_kosten)

    while True:

        blok_pallet = raw_input('Voer het aantal blokpallets in: ')
        euro_pallet = raw_input('Voet het aantal europallets in: ')
        klein_pallet = raw_input('Voer het aantal kleine pallets in: ')
        print''
        print 'Volgend adres: (wanneer geen volgend adres voer 3 maal 0 in!'
        print''

        if blok_pallet == '1':
            total_blok+=float(blok_pallet_kosten[0])

        elif euro_pallet == '1':
            total_europallet+=float(euro_pallet_kosten[0])

        elif klein_pallet == '1':
            total_klein_pallet+=float(klein_pallet_kosten[0])



        elif blok_pallet == '2':
            total_blok+=float(blok_pallet_kosten[1])

        elif euro_pallet == '2':
            total_europallet+=float(euro_pallet_kosten[1])

        elif klein_pallet == '2':
            total_klein_pallet+=float(klein_pallet_kosten[1])



        elif blok_pallet == '3':
            total_blok+=float(blok_pallet_kosten[2])

        elif euro_pallet == '3':
            total_europallet+=float(euro_pallet_kosten[2])

        elif klein_pallet == '3':
            total_klein_pallet+=float(klein_pallet_kosten[2])



        elif blok_pallet =='0' and euro_pallet == '0' and klein_pallet == '0':
            break

    print 'Totale kosten van blokpallets zijn', total_blok, ('EURO')
    print 'Totale kosten van europallets zijn', total_europallet, ('EURO')
    print 'Totale kosten van kleine pallets zijn', total_klein_pallet, ('EURO')

main()


Enig idee wat ik fout doe? En zijn er nog tips over mijn schrijfwerk?

Alle reacties


Acties:
  • 0 Henk 'm!

  • mat.hi.as
  • Registratie: November 2007
  • Laatst online: 17:00
Al die elifs gaan fout. Je moet zoiets doen als

if a ==1
elif a ==2
elif a == 3

if b == 1
elif b == 2
elif b == 3

et cetera.

Acties:
  • 0 Henk 'm!

  • Damsho
  • Registratie: Juni 2014
  • Laatst online: 21-09-2020
mat.hi.as schreef op woensdag 23 maart 2016 @ 16:34:
Al die elifs gaan fout. Je moet zoiets doen als

if a ==1
elif a ==2
elif a == 3

if b == 1
elif b == 2
elif b == 3

et cetera.
Bedankt voor je feedback. Ik heb het volgende nu geprobeerd (Werkt nog steeds niet juist)

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
print ('Om het programma te stoppen voer 3 maal 0 in.')
print ''

def main ():
    total_blok = 0.0
    blok_pallet_kosten = [2.0, 5.0]
    map(float, blok_pallet_kosten)

    total_europallet = 0.0
    euro_pallet_kosten = [2.0, 5.0]
    map(float, euro_pallet_kosten)

    total_klein_pallet = 0.0
    klein_pallet_kosten = [2.0, 5.0]
    map(float, klein_pallet_kosten)

    while True:

        blok_pallet = raw_input('Voer het aantal blokpallets in: ')
        euro_pallet = raw_input('Voet het aantal europallets in: ')
        klein_pallet = raw_input('Voer het aantal kleine pallets in: ')
        print''
        print 'Volgend adres: (wanneer geen volgend adres voer 3 maal 0 in!'
        print''


        if blok_pallet == '1':
            total_blok+=float(blok_pallet_kosten[0])
        elif blok_pallet == '2':
            total_blok+=float(blok_pallet_kosten[1])


        if euro_pallet == '1':
            total_europallet+=float(euro_pallet_kosten[0])
        elif euro_pallet == '2':
            total_europallet+=float(euro_pallet_kosten[1])


        if klein_pallet == '1':
            total_klein_pallet+=float(klein_pallet_kosten[0])
        elif klein_pallet == '2':
            total_klein_pallet+=float(klein_pallet_kosten[1])



        elif blok_pallet =='0' and euro_pallet == '0' and klein_pallet == '0':
            break

    print 'Totale kosten van blokpallets zijn', total_blok, ('EURO')
    print 'Totale kosten van europallets zijn', total_europallet, ('EURO')
    print 'Totale kosten van kleine pallets zijn', total_klein_pallet, ('EURO')

main()


Komt het wellicht door mijn laatste elif met 0?

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

<oops>

[ Voor 100% gewijzigd door Snake op 23-03-2016 16:47 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • woutertje
  • Registratie: Maart 2002
  • Laatst online: 11-10 14:55
Ik snap eigenlijk niet echt goed wat je script moet doen. Je kunt zoals jij het opzet alleen 1 of 2 pallets bestellen van elk type, waarbij het steeds goedkoper is om 2x1 pallet te bestellen dan 1x2?

Acties:
  • 0 Henk 'm!

  • Damsho
  • Registratie: Juni 2014
  • Laatst online: 21-09-2020
woutertje schreef op woensdag 23 maart 2016 @ 16:47:
Ik snap eigenlijk niet echt goed wat je script moet doen. Je kunt zoals jij het opzet alleen 1 of 2 pallets bestellen van elk type, waarbij het steeds goedkoper is om 2x1 pallet te bestellen dan 1x2?
Even wat meer duiding:
Wij werken hier bij ons bedrijf met een extern transport bedrijf. Bij deze krijgen wij korting als wij bijvoorbeeld 3 pallets versturen naar 1 adres.

Tevens hebben wij ook een eigen vrachtwagen waarvoor wij routes plannen. Waar wij standaard kosten per uur voor hebben.

Ik wil uiteindelijk gaan uitrekenen wat voordeliger is op een bepaalde route.

(Aangezien ik net begonnen met Python ben, leek het me leuk om hier een projectje van te maken om het e.e.a. van te leren.)

Edit: Ik heb nu voor het gemak even 2 pallets ingevoerd. Dit zullen er uiteindelijk meer worden wanneer ik het functioneel heb.

[ Voor 7% gewijzigd door Damsho op 23-03-2016 16:57 ]


Acties:
  • 0 Henk 'm!

  • woutertje
  • Registratie: Maart 2002
  • Laatst online: 11-10 14:55
Oke, en wat werkt er precies niet aan het script zoals je dat nu hebt? Met andere woorden: wat voer je in, wat verwacht je wat er uit komt (en waarom) en wat komt er daadwerkelijk uit?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 11:48

Creepy

Tactical Espionage Splatterer

Je zult toch echt zelf moeten gaan debuggen. Het is erg makkelijk om te controleren of het aan die laatste elif ligt of niet. Als je in elke if een print statement zet kan je zo zien wanneer welke if af gaat, en wanneer niet. Het lijkt me dat je dat zelf prima kan doen, en dat wij dat niet voor je hoeven te doen.

Je zou ook nog een debugger erbij kunnen pakken (https://wiki.python.org/moin/PythonDebuggers) om zo stap voor stap door de code te kunnen lopen.

Ik ga er vanuit dat je nu zelf je probleem kan oplossen en ik sluit dan ook dit topic omdat we verwachten dat je in eerste instantie zelf daadwerkelijk gaat debuggen. Dat lijk je nu niet gedaan te hebben.

"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

Pagina: 1

Dit topic is gesloten.