Ostatnio w Pythonie probowalem rozwiazac pewne zadanie, które polegało na tym, aby uzyć domyślnej biblioteki "random" i jej metody "choice", aby wygenerować 4 znakowy ciąg znaków z listy [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'a', 'b', 'c', 'd', 'e']. Jeden taki ciąg miał być ciągiem którego wylosowanie gwarantuje wygranie nagrody, a drugi (użytkownika) jesli jest taki sam, prowadzi do wygranej.
Używając funkcji, program sprawdza ten warunek poprawnie:
from random import choice
import time
def prize():
random_characters = [1,2,3,4,5,6,7,8,9,0,'a','b','c','d','e']
selected_characters = []
for i in range(0,4):
character = choice(random_characters)
selected_characters.append(character)
random_characters.remove(character)
message = ""
for character in selected_characters:
message += str(character)
return message
active = True
while active:
message = prize()
winning_message = prize()
if message == winning_message:
active = False
print(f"Any ticket matching these four characters: {message} will win the prize!")
print(f"My ticket: {winning_message}")
time.sleep(1)
Rezultat:

Natomiast kiedy chciałem zastosowac podejście obiektowe i zainicjować funkcje, ciag znakow dodaje sam do siebie poprzedni ciag znaków z poprzedniej iteracji pętli. Czy ktoś byłby mi w stanie wytlumaczyć dlaczego?
Kod:
from random import choice
import time
class Prize():
def __init__(self):
self.random_characters = [1,2,3,4,5,6,7,8,9,0,'a','b','c','d','e']
self.selected_characters = []
self.message = ""
def randomize(self):
for i in range(0,4):
character = choice(self.random_characters)
self.selected_characters.append(character)
self.random_characters.remove(character)
for i in self.selected_characters:
self.message += str(i)
return self.message
active = True
message = Prize()
winning_message = Prize()
while active:
random_ticket = message.randomize()
my_ticket = winning_message.randomize()
if random_ticket == my_ticket:
active = False
print(f"Any ticket matching these four characters: {random_ticket} will win the prize!")
print(f"My ticket: {my_ticket}")
time.sleep(1)
Wynik:

Z góry dziękuję za odpowiedź!