Loteria z pętla i funkcją random.choice()

Loteria z pętla i funkcją random.choice()
PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Z góry przepraszam, że tak zakładam tematy, ale chciałbym zapytać czy wyżej napisany przeze mnie kod ma sens i w końcu trafi na szczęśliwy kupon z listy my_ticket. Próbowałem sprawdzić manualnie ale mi palec odpadnie prędzej niż wygram. To jest zadanie z książki. Uczę się i dlatego tak pytam.

Pozdrawiam.

Kopiuj
import random

lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd']

my_ticket = [6, 'c', 8, 'd']
active = True
roll = 1 
while active:
    x = random.choice(lista)
    y = random.choice(lista)
    a = random.choice(lista)
    b = random.choice(lista)
    
    print(f'Wylosowałem: {x}, {y}, {a}, {b}')
    if [x, y, a, b] in my_ticket:
        print('Wygrałeś nagrodę!')
        active = False
    else:
        input('\nNaciśnij enter aby kontynuować.')
        print('Szukam dalej!')
    roll += 1
print(f'Potrzebowałeś prób: {roll}')
Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
1

Zmniejsz my_ticket do np. [6, 'c'] i zobacz czy wygrasz, potem sprawdź [8, 'd']. Jeśli wygrasz w obu, to chyba można założyć że w pełnym [6, 'c', 8, 'd'] też. Jeśli nadal za długo sprawdź samo [6]. Jeśli to nadal trwa za długo, zmniejsz lista do np. [4,5,6].

PS: Ja już widzę błąd, ale postaram Ci się dać wędkę, a nie rybę 😊 Żeby pokazać Ci jak sam mógłbyś go znaleźć.

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Dobry pomysł. Dzięki. Już sprawdzam.

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0
Kopiuj
import random

lista = ['1', '2', '3', '4', '5', '6', 'a', 'b', 'c']

my_ticket = ['6', 'c']
my_ticket = sorted(my_ticket)
winning_ticket = []
active = True
roll = 1 
while active:
    x = random.choice(lista)
    y = random.choice(lista)
    
    print(f'Wylosowałem: {x}, {y}')
    winning_ticket.append(x)
    winning_ticket.append(y)
    if sorted(winning_ticket) == my_ticket:
        print('Wygrałeś nagrodę!')
        active = False
    else:
        input('\nNaciśnij enter aby kontynuować.')
        winning_ticket.clear()
        print('Szukam dalej!')
    roll += 1
print(f'Potrzebowałeś prób: {roll}')

Musiałem całkeim zmienić kod bo tamten nie działał. Teraz wygrałem.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
2

Nie działał dlatego że użyłeś [x, y, a, b] in my_ticket, co znaczy że array [x,y,a,b] musiałby się znaleźć jako element listy w my_ticket. To co rozumiem że chciałeś sprawdzić, to chciałeś sprawdzić czy konkretny zestaw liczb w całości zawiera się w innym zestawie liczb. Faktycznie sortownie i porównanie list to załatwi.

Gdybyś chciał to zrobić "prawilnie" to moim zdaniem powinieneś użyć zbiorów i po prostu je porównać. Nie miałbyś wtedy złożoności związanej z sortowaniem.

W Twoim poprzednim kodzie to wyglądałoby tak

Kopiuj
my_ticket = set([6, 'c', 8, 'd']) # Zmienna my_ticket teraz jest zbiorem
active = True
roll = 1 
while active:
    x = random.choice(lista)
    y = random.choice(lista)
    a = random.choice(lista)
    b = random.choice(lista)
    
    print(f'Wylosowałem: {x}, {y}, {a}, {b}')
    if set([x, y, a, b]) == my_ticket: # Sprawdź czy zbiór wylosowanych liczb jest równy zbiorowi Twoich liczb

Twój poprzedni kod nie działał, bo [1, 2, 3, 4] in [1,2,3,4] # False, ale za to set(1,2,3) == set(2,3,1) # True.

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Super. Dzięki. Zapomniałem o zbiorach. 😅

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.