Tragedii nie ma ale jest sporo niezręczności i niejasnego kodu.
Np funkcja
def sprawdz_litere(wyraz, litera):
Zwraca listę indeksów zawierających dana literkę. Nigdy przenigdy bym tego nie wywnioskował po nazwie.
def odkryj_litere(lista, litera, odwrocony):
czym jest lista? Nie jestem w stanie domyslić się ani po nazwie a po ciele funkcji też ciężko. Dopiero analiza przebiegu całego kodu pozwala to zrozumieć. To dosyć poważny błąd.
A tak bym zrefactorował niektóre funkcje:
def odwroc_wyraz(wyraz):
odwrocony = ""
for i in range(len(wyraz)):
odwrocony += "-"
return odwrocony
def reverse_string(str_: str):
return str_[::-1]
def losuj_wyraz():
plik = open("wyrazy.txt", "r")
lista = plik.readlines()
wyrazy = []
for i in lista:
wyraz = i.strip()
wyrazy.append(wyraz)
liczba = random.randint(0, 9)
return wyrazy[liczba]
def get_random_word():
with open("wyrazy.txt") as words_file:
words = [line.strip() for line in words_file]
return random.choice(words)
def wygrales(wyraz):
odwrocony = list(wyraz)
for i in odwrocony:
if i == "-":
return False
return True
def is_win(phrase: str):
return "-" in phrase
def sprawdz_litere(wyraz, litera):
lista = list(wyraz)
zwroc = []
for i, letter in enumerate(lista):
if letter == litera:
zwroc.append(i)
return zwroc
def check_letter(current_phrase: str, whole_phrase: str, letter: str) -> bool:
return letter in whole_phrase and letter not in current_phrase
def odkryj_litere(lista, litera, odwrocony):
odwrocona_lista = list(odwrocony)
for i in lista:
odwrocona_lista[i] = litera
odwrocony_wyraz = "".join(odwrocona_lista)
return odwrocony_wyraz
def reveal_letter(current_phrase: str, whole_phrase: str, letter_to_reveal: str) -> str:
current_phrase_list = list(current_phrase)
for idx, letter in enumerate(whole_phrase):
if letter == letter_to_reveal:
current_phrase_list[idx] = letter
return "".join(current_phrase_list)
obrazy_ascii jak sama nazwa wskazuje nie powinny byc funkcja tylko listą stringów.