OK uważniej doczytałem w dokumentacji i pisze tam by zastąpić shuffle opcją: sample(x, k=len(x)). Po prostu od wersji 3.11 Pythona nie ma już shuffle...
Co? Jak najbardziej jest: https://docs.python.org/3.11/library/random.html?highlight=shuffle#random.shuffle
W wersji 3.11 usunięto opcjonalny parametr random
. Wcześniej sygnatura tej funkcji wyglądała tak: random.shuffle(x[, random])
, gdzie random
, o ile był dostarczony i był bezparametrową funkcją zwracającą floata z zakresu [0.0, 1.0), był wykorzystywany jako źródło losowości.
Uwaga _13th_Dragona o uważnym czytaniu dokumentacji jest jak najbardziej na miejscu.
A o co chodzi i z czego wynika Twój błąd? Tak jak Ci tu już pisali, i co stwierdza dokumentacja w pierwszej linijce — „Shuffle the sequence x in place.” (wyróżnienie moje)
Ta funkcja nic nie zwraca. Ona sortuje dostarczoną jej kolekcję w miejscu. Próba wyprintowania jej rezultatu — którym jest None
, zawsze i wszędzie — jest nonsensowna. Poprawne użycie to, na przykład, wyprintowanie tej kolekcji po potasowaniu:
kolekcja = [1, 2, 3, 4, 5, 6, 7, 8]
print(kolekcja) # [1, 2, 3, 4, 5, 6, 7, 8]
shuffle(kolekcja) # zwraca None — możesz sprawdzić przez assert shuffle(kolekcja) is None
print(kolekcja) # [5, 7, 1, 3, 8, 4, 2, 6] ← wynik, oczywiście, może się różnić
Analogicznie działa zresztą sort()
.
Jakby jakaś funkcja została usunięta, to Python rzuciłby wyjątek NameError
:
nie_ma_takiej_funkcji(kolekcja)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'nie_ma_takiej_funkcji' is not defined