Wątek przeniesiony 2020-03-24 19:14 z Inne języki programowania przez Adam Boduch.

Python losowanie bez powtórzeń

0

Witam

Chciałem napisać program, który wyświetli wszystkie elementy listy w przypadkowej kolejności bez powtórzeń. Wydaje mi się, że to powinno działać, ale wypisuje te elementy z powtórzeniami. Ktoś wie wie co tu jest nie tak?

 
import random

y = []

for i in range(1, 8):
    a = random.choice(["pies", "kot", "mysz", "jeleń", "kret", "byk", "stonoga"])
    if a not in y:
        print(a)
    else:
        y.append(a)
        continue
1

na tablicy zrob shuffle i po prostu ja wyswietl (cala)
http://stackoverflow.com/questions/976882/shuffling-a-list-of-objects-in-python

2
import random;

data = ["pies", "kot", "mysz", "jeleń", "kret", "byk", "stonoga"]
x = random.sample(data, len(data))
print(x)

https://docs.python.org/2/library/random.html

0

Wydaje mi się, że to powinno działać, ale wypisuje te elementy z powtórzeniami. Ktoś wie wie co tu jest nie tak?

Twój kod nie ma prawa działać, nie będzie powtórzeń po takiej poprawce.

for i in range(1, 8):
    a = random.choice(["pies", "kot", "mysz", "jeleń", "kret", "byk", "stonoga"])
    if a not in y:
        print(a)
        y.append(a)

Ale szansa na wylosowanie siedmiu stworzeń wynosi 1/5040

0
słowa =["pies", "kot", "mysz", "jeleń", "kret", "byk", "stonoga"]
import random as rm
while słowa:
  losowe = rm.choice(słowa)
  print(losowe)
  słowa.remove(losowe)

bez wcześniejszego liczenia elementów

kolejny temat z książki Dowsona ;)

0

W moim przypadku doskonale działa ten kod. Plus wykorzystuje techniki,które poznałeś w rozdziałach wcześniej. Cheers!

import random

biblio = ["klamka" ,"ramka","bramka","damka","mamka"]
word = random.choice(biblio)
while biblio :
    for i in biblio:
        print(i)
        biblio.remove(i)


input ("Aby zakończyć program wciśnij klawisz 'Enter'")
0

U mnie z kolei wygląda to tak:

python.png

We wcześniejszej wersji nie dodałem losowania elementu listy (cokolwiek = random.choice(WORDS)) do ciała pętli, a przed pętlą jak u Jeża i za każdym uruchomieniem lista była wypisana w takiej samej kolejności.

0

Jak już się bawimy w archeologię głębinową: random.sample

2

@Spartan117: modyfikowanie listy w trakcie iteracji po niej jest nielegalne i może prowadzić do błędów.

0

@Althorion: Dzięki za podpowiedź. Staram się rozwiązywać zadania na koniec rozdziału przy użyciu zagadnień i metod poznanych w danym rozdziale (ta książka to moja pierwsza styczność z programowaniem), ale dobrych rad nigdy zbyt wiele.
@enedil: Dzięki bardzo za cenną uwagę - więcej się nauczyłem popełniając przypadkowy błąd niż robiąc zadania poprawnie. Poprawiłem kod, rezygnując z pętli for, jak wcześniej zrobił to BotaNick i teraz wszystko działa zachowując losowość po każdym uruchomieniu, bez modyfikowania listy w trakcie iteracji.
pyt kor.png

0

Cześć. Podepnę się. Ja rozwiązałem to tak. zasadniczo otrzymuję to co chciałem tylko czy jest to "odpowiednie rozwiązanie?"

import random

LISTA = ["kot", "pies", "żaba", "ryba" , "małpa"]
random.shuffle(LISTA)
print (LISTA)

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