random losuje to samo

0

Czy może mi ktoś wyjaśnić dlaczego funkcja random.choice za każdym razem losuje z każdej listy tą samą pozycje.


import random

animals1 = ["shark", "jellyfish", "starfish", "whale"]
animals2 = ["lion", "elephant", "tiger", "dog"]
animals3 = ["dragon", "unicorn", "cos1", "cos2"]

zoo1 = []
zoo2 = []
zoo3 = []

zoo1["name1"] = random.choice(animals1)
zoo1["name2"] = random.choice(animals2)
zoo1["name3"] = random.choice(animals3)

zoo2["name1"] = random.choice(animals1)
zoo2["name2"] = random.choice(animals2)
zoo2["name3"] = random.choice(animals3)

zoo3["name1"] = random.choice(animals1)
zoo3["name2"] = random.choice(animals2)
zoo3["name3"] = random.choice(animals3)

with open("zoo1.pickle", "wb") as f:
    pickle.dump(zoo1, f)

with open("zoo2.pickle", "wb") as f:
    pickle.dump(zoo2, f)

with open("zoo3.pickle", "wb") as f:
    pickle.dump(zoo3, f)

przy każdym uruchomieniem programu, program losuje te same zwierzęta do każdego zoo tj. w każdym jest np. rekin, tygrys i smok, przy kolejnym losowaniu zmienia się zestaw zwierząt ale znowu jest identyczny w każdym zoo. Czy wie ktoś dlaczego tak się dzieje?

1
  1. Ten kod to dramat.
  2. Taki kod, napisany bardziej po ludzku, wygląda ok:
import random

animals1 = ["shark", "jellyfish", "starfish", "whale"]
animals2 = ["lion", "elephant", "tiger", "dog"]
animals3 = ["dragon", "unicorn", "cos1", "cos2"]

animals = [animals1, animals2, animals3]

zoo = [{"name%d"%i:random.choice(animals[i]) for i in range(3)} for j in range(3)]
print(zoo)
  1. Wg ideone twój oryginalny kod też jest ok: https://ideone.com/T2VEFu

1 użytkowników online, w tym zalogowanych: 0, gości: 1