Advertisement
ABIX_Edukacja

losowanie_prezentów

Dec 15th, 2019
1,732
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.70 KB | None | 0 0
  1. def losuj_prezenty(lista=[]):
  2.     from random import randint
  3.     # jeśli brak listy, to nic nie robimy
  4.     if lista is None:
  5.         print('Brak danych...')
  6.         return None
  7.    
  8.     if type(lista) is not list:
  9.         print('Błędne dane - wymagam typu list, np. [ "Adam", "Beata", "Szymon"]')
  10.         return None
  11.  
  12.     if len(lista) <= 1:
  13.         print('Brak danych lub zbyt mało... - minimum 2 elementy.')
  14.         return None
  15.  
  16.  
  17.     # najpierw sprawdzamy, czy lista nie zawiera duplikatów,
  18.     # porównujemy jej długość do długości zbioru zbudowanego z niej
  19.     if len(lista) != len(set(lista)):
  20.         print("Nie mogę pracować - lista zawiera duplikaty !!!!")
  21.         return False
  22.        
  23.     # 1, bo numerowanie listy, 1 bo bez 1 osoby
  24.     losujemy = len(lista) - 2
  25.    
  26.     # w słowniku będziemy przechowywać gotowe wyniki przypisania
  27.     pary = {}
  28.  
  29.     for kto in lista:
  30.         lista_set = set(lista)
  31.         kto_1 = set([kto]) # aby w zbiorze znalazło się pełne imię
  32.         losuj = list(lista_set - kto_1) # tworzymy zbiór bez jednej osoby
  33.         print(f"Szukamy pary dla: {kto}", end="")
  34.  
  35.         los = randint(0, losujemy)
  36.         kto_2 = losuj[los]
  37.  
  38.         # dopóki kto_2 (a więc obdarowywana osoba) jest wśród
  39.         # listy osób obdarowywanych
  40.         while kto_2 in pary.values():
  41.             print(".",end="")
  42.             los = randint(0, losujemy)
  43.             kto_2 = losuj[los]
  44.         else:
  45.             # kiedy pętla while zakończy sowje działanie, a więc będzie takie
  46.             # los_2, którego nie ma wśród wartości słownika pary
  47.             pary[kto] = kto_2
  48.             print(f" -> {pary[kto]}")
  49.        
  50.     return pary
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement