[Python] Meerdere waarden controleren in While loop

Pagina: 1
Acties:
  • 152 views sinds 30-01-2008

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 27-03 14:24
Hey :)

Ik had een vraagje

Hoe kan ik een lijst controleren op meerdere waarden (wie allemaal op een verschillende plek kunnen staan) in een while loop....
Ik weet het, klinkt vaag.. dus hier ff mijn scriptje...

Dit is mijn python code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
count = 0
totaal = 0
container = []
while totaal < 50:
    print container
    container = []
    listnum = 0
    totaal = totaal + 1
    while 1 and 2 and 3 and 4 and 5 and 6 not in container:
        num = random.randint(1,6)
        container[:listnum] = container + [num]
        listnum = listnum + 1
        count = count + 1

Dit komt er dan uit:
code:
1
2
3
4
5
[1, 1, 4, 6]
[3, 2, 6]
[3, 6]
[1, 6]
[6]

(en dat 50 x, met een 6 aan het eind)
Hier controleert die dus alleen of er een 6 in de lijst voorkomt, terwijl die toch echt moet controleren of 1 en 2 en 3 etc etc.. in de lijst voorkomen...

Hoe o hoe los ik dit op?

[ Voor 11% gewijzigd door Enfer op 19-12-2005 19:48 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-03 14:33

NMe

Quia Ego Sic Dico.

Ik ken geen Python, maar dit ziet eruit als een vrij basale fout tegen booleaanse logica. Je zal voor elk getal moeten nagaan of hij niet in container zit volgens mij, en dat zul je ongeveer zo moeten doen:
code:
9
    while 1 not in container and 2 not in container and 3 not in container ... and 6 not in container:


Nogmaals, ik ken geen Python, maar dit is het eerste wat in me opkomt bij het zien van die code. :)

'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.


Verwijderd

Je probleem zit in onderstaande regel:
Python:
1
while 1 and 2 and 3 and 4 and 5 and 6 not in container:

Deze moet namelijk als volg zijn:
Python:
1
while 1 not in container and 2 not in container and 3 not in container and 4 not in container and 5 not in container and 6 not in container:

Dit is hoe Python je eerste regel nu interpeteert:
Python:
1
while (1) and (2) and (3) and (4) and (5) and (6 not in container):

Dat is natuurlijk niet de bedoeling :)
edit:
Spuit 11

edit:
Nog een edit: wat wil je eigenlijk bereiken? Je code ziet er niet echt "pythonic" uit, namelijk. Ik heb zo'n vermoeden dat dit ook in 4 makkelijk begrijpbare regels kan

[ Voor 24% gewijzigd door Verwijderd op 19-12-2005 19:56 ]


  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 27-03 14:24
Hehehe...

Wat ik dus wil bereiken is dit:

Je hebt 6 zakken chips
in elke zak zit 1 flippo
hoeveel zakken chips moet ik gemiddeld kopen voordat ik alle 6 de flippo's heb

;) (En ja, ik doe dit voor school ;) , maar ik doe het ook beetje uit hobby, omdat ik het best leuk vind om te programmeren :) )

ehm nu werkt die nog steeds niet helemaal naar behoren 8)7 :?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> import random
>>> count = 0
>>> totaal = 0
>>> container = []
>>> while totaal < 50:
    print container
    container = []
    listnum = 0
    totaal = totaal + 1
    while 1 not in container and 2 not in container and 3 not in container and 4 not in container and 5 not in container and 6 not in container:
        num = random.randint(1,6)
        container[:listnum] = container + [num]
        listnum = listnum + 1
        count = count + 1


dat heb ik er nu dus wel staan ;) Maar ik krijg nu allemaal lists geprint met 1 getal er in 8)7

[ Voor 77% gewijzigd door Enfer op 19-12-2005 20:09 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-03 14:33

NMe

Quia Ego Sic Dico.

Debuggen mag je zelf doen, we gaan hier natuurlijk niet je huiswerk voor je maken. ;) Je echte denkfout is er in elk geval uit, de rest is een kwestie van simpel debugwerk, waar je ook meer dan genoeg over in onze FAQ kan vinden.

Overigens is het nogal logisch dat je maar 1 getal per lijst krijgt, immers is bij de eerste iteratie is al één van de getallen aanwezig die je zoekt. Jij wil waarschijnlijk dit:
code:
9
while not (1 in container and 2 in container and 3 in container and 4 in container and 5 in container and 6 in container):

Hiermee maak je de hele expressie in één keer negatief.

Maar goed, hier moet je prima zelf uit kunnen komen, dit is allemaal basale booleaanse wiskunde/logica. :)

'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.


Dit topic is gesloten.