[python] nested loop naar dubbele normale?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 05-10 11:12
Als ik de volgende code uitvoer in python:

Python:
1
2
3
4
5
6
persons = [ "John", "Marissa", "Pete", "Dayton" ]
restaurants = [ "Japanese", "American", "Mexican", "French" ]

for person in persons:
    for restaurant in restaurants:
        print(person + " eats " + restaurant)


Krijg ik dit resultaat:

John eats Japanese
John eats American
John eats Mexican
John eats French
Marissa eats Japanese
Marissa eats American
Marissa eats Mexican
Marissa eats French
Pete eats Japanese
Pete eats American
Pete eats Mexican
Pete eats French
Dayton eats Japanese
Dayton eats American
Dayton eats Mexican
Dayton eats French

Hoe kan ik nu de code aanpassen om dit resultaat te behalen?

John eats Japanese
Marissa eats Japanese
Pete eats Japanese
Dayton eats Japanese

John eats American
Marissa eats American
Pete eats American
Dayton eats American

John eats Mexican
Marissa eats Mexican
Pete eats Mexican
Dayton eats Mexican

John eats French
Marissa eats French
Pete eats French
Dayton eats French'

Wat ik ook probeer ik kan niet 2 losse variabelen optellen of aftellen. |:(

Beste antwoord (via Torac op 08-08-2019 19:43)


  • WDHBGS
  • Registratie: Oktober 2011
  • Laatst online: 04-10 15:35
In plaats van dit:

Python:
1
2
3
for person in persons:
   for restaurant in restaurants:
      print(person + " eats " + restaurant)


kun je dit gebruiken, lijkt me:

Python:
1
2
3
for restaurant in restaurants:
   for person in persons:
      print(person + " eats " + restaurant)



Wat je doet in je code, is elk persoon doorlopen, en per persoon (die je op dat moment doorloopt), doorloop je elk restaurant. Per restaurant per persoon (let op de volgorde), print je in elke iteratie van de binenste for-loop de persoon en het restaurant van de huidige iteraties. De buitenste for-loop itereert pas verder naar de volgende waarde in de 'persons'-array, als de binnenste for-loop helemaal doorlopen is. Dat is het geval als je alle restaurants doorlopen hebt. Daarom krijg je deze uitvoer.

Wat je wilt, is het omgekeerde, namelijk per restaurant alle personen tonen. Het is op te lossen door de for-loops met elkaar te verwisselen.

[ Voor 63% gewijzigd door WDHBGS op 08-08-2019 19:44 . Reden: code tags toegevoegd ]

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • WDHBGS
  • Registratie: Oktober 2011
  • Laatst online: 04-10 15:35
In plaats van dit:

Python:
1
2
3
for person in persons:
   for restaurant in restaurants:
      print(person + " eats " + restaurant)


kun je dit gebruiken, lijkt me:

Python:
1
2
3
for restaurant in restaurants:
   for person in persons:
      print(person + " eats " + restaurant)



Wat je doet in je code, is elk persoon doorlopen, en per persoon (die je op dat moment doorloopt), doorloop je elk restaurant. Per restaurant per persoon (let op de volgorde), print je in elke iteratie van de binenste for-loop de persoon en het restaurant van de huidige iteraties. De buitenste for-loop itereert pas verder naar de volgende waarde in de 'persons'-array, als de binnenste for-loop helemaal doorlopen is. Dat is het geval als je alle restaurants doorlopen hebt. Daarom krijg je deze uitvoer.

Wat je wilt, is het omgekeerde, namelijk per restaurant alle personen tonen. Het is op te lossen door de for-loops met elkaar te verwisselen.

[ Voor 63% gewijzigd door WDHBGS op 08-08-2019 19:44 . Reden: code tags toegevoegd ]


Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 08:51
Geef even een kant-en-klaar antwoord |:(

@Torac, je wilt twee dingen:
- Je resultaten per keuken groeperen, in plaats van per persoon
- Een lege regel afdrukken tussen de verschillende keukens

Voor het eerste is hierboven al meer dan een hint gegeven. Je dient te kijken naar de volgorde van je for-loops.

Voor het tweede zou je een print statement kunnen opnemen. Het niveau (inspringen) is hierbij van belang. Kun je een print() toevoegen die niet voor iedere regel, maar voor iedere groep wordt uitgevoerd?

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans