ok, noch ein Tipp:
Das überraschende Liebesleben der gemeinen Steinlaus - Ein Kreischmusical von und mit Klaus Kinski
...ist es (leider) nicht  ~;D
(https://www.tanelorn.net/index.php?action=dlattach;topic=113246.0;attach=28200)
Es passt sogar richtig gut zum Thema Buchwichteln. :D
Hab es auch schon angefangen und bin gespannt wie es weitergeht.
Danke an den bibliothekarischen Wichtel   :santa:
Zu meiner Schande muss ich ja gestehen, dass ich es noch nicht geschafft habe mein eigenes Wichtelpaket auf den Weg zu bringen. Aber das soll sich heute ändern! ;D
[gelöscht durch Administrator]
			
			
			
				Sind es eigentlich immer "Wichtelpaare" (sodass Bücher zwischen zwei Personen ausfgetauscht werden) oder wird "reihum" gewichtelt?
Ich habe folgenden Algorithmus zum Ermitteln der Wichtelpartner verwendet:
https://www.mathematik.de/dmv-blog/2459-wichteln-f%C3%BCr-fortgeschrittene-der-fast-ideale-weg-zum-richtigen-wichtelpartner
Dabei besteht "Zweierzykelfreiheit"  :o 
Das heißt, das niemand denjenigen beschenkt, von dem er/sie ebenfalls Geschenke erhält.
Hier das ganze in python implementiert.  ;)
import random
class Person:
    def __init__(self, name, address, info=None):
        self.name = name
        self.address = address
        self.info = info
def mix(participants):
    # https://www.mathematik.de/dmv-blog/2459-wichteln-f%C3%BCr-fortgeschrittene-der-fast-ideale-weg-zum-richtigen-wichtelpartner
    n = len(participants)
    IDs = [ i for i in range(n) ]
    random.shuffle(IDs)
    ID_target = [ (IDs[i], IDs[i-1]) for i in range(n) ]
    random.shuffle(ID_target)
    for i in range(n):
        participants[i].ID = ID_target[i][0]
        participants[i].target = ID_target[i][1]
def print_tasks(participants):
    for person in participants:
        for target in participants:
            if target.ID == person.target:
                break
        #print(f" {person.ID} {person.name}: {target.ID} {target.name} {target.address}")
        print(f"Hallo {person.name},\ndein Wichtel ist: {target.name}\n\n{target.name}\n{target.address}")
        if target.info is not None:
            print(f"\nZusatzinfo:\n{target.info}")
        print("\nViele Grüße!")
        print('-----')
if __name__ == '__main__':
    participants = [ Person('A', 'A-straße'),
                     Person('B', 'B-straße'),
                     Person('C', 'C-straße'),
                     Person('D', 'D-straße'),
                     Person('E', 'E-straße') ]
    mix(participants)
    print_tasks(participants