even over dat keuzes = mensen, dit maakt geen kopie van de lijst mensen, maar refereert keuzes, naar dezelfde lijst als die van mensen.
Dus verander remove je een persoon uit keuzes, dan verdwijnt deze ook uit mensen.
gebruikt je: keuzes = mensen[:]
dan wordt er wel een kopie gemaakt en op een andere plek in het geheugen gezet
Hier een script wat ikzelf even in elkaar heb geknutseld. Dacht hetzelfde, "zal wel niet zo moeilijk zijn", maar viel toch meer tegen. Er zit nog een foutje in maar ik heb geen idee hoe dit gemakkelijk op te lossen.
Ik heb trouwens alles in het engels gemaakt,
When writing English, Strunk and White apply.
Python coders from non-English speaking countries: please write
your comments in English, unless you are 120% sure that the code
will never be read by people who don't speak your language.
Ik heb er even een hoop lege regels in gezet zodat, als je het eerst ZELF opnieuw wilt proberen, je niet per ongelijk mijn script leest. Al ik een ander script lees, denk ik meestal "dat had ik ook wel in een paar minuten kunnen doen". Dus vandaar
#!/usr/bin/env python
import random
def findLinks():
# Define the persons names
persons = ["mother", "dad", "sister", "brother", "me"]
# Copy the list to define the coices
choices = persons[:]
# List for saving the combinations
crosslinks = []
# Let every person take a random name from the choices list
for person in persons[:]:
# Check if the last person not only can take his own name
if len(persons) == 1 and choices[0] == persons[0]:
return None
# Check if the person not takes his own name
receiver = None
while not receiver or receiver == person:
receiver = random.choice(choices)
# Save the crosslinks and remove the names from the appropiete list
crosslinks.append([persons.pop(0), choices.pop(choices.index(receiver))])
return crosslinks
# Run the crosslinking and check if succeeds
links = None
while not links:
links = findLinks()
# Print each combination
for link in links:
print "%s has %s" % (link[0], link[1])
Groet,
Een beginnende Python programmeur ;-)
EDIT: script aangepast, zodat het script opnieuw wordt opgestart ipv de foutmelding