Tutaj masz taki kod
if win_check(board, char):
print("Congratulations,",name,"! You've won!")
A zaraz niżej masz kod identyczny tylko dla drugiego gracza.
if win_check(board, char_2):
print("Congratulations,",name2,"! You've won!")
break
pomyśl jak to można zdeduplikować (np. wydzielić funkcję, która będzie drukować zwycięstwa dla dowolnego gracza?). No i możesz mieć dwuelementową listę graczy i odpalać na obu elementach tę funkcję, zamiast ręcznie robić ifa dla każdego gracza. (fajne ćwiczenie możesz zrobić - co jeśli graczy byłoby np. 3 zamiast 2?)
name = input('Player 1, please, choose your player\'s name')
name2 = input('Player 2, please, choose your player\'s name')
Tak samo tutaj - stringi ci się powtarzają. Ogólnie masz mnóstwo tego typu duplikacji, co jest pisaniem na krótką metę (a przecież możesz te stringi wydzielić choćby do jakiejś stałej).
Zrób eksperyment myślowy: wyobraź sobie teraz, że masz przetłumaczyć wszystkie wyświetlane na ekranie na teksty na język polski.
Już widzisz problem? Duplikują się, więc więcej będziesz mieć do roboty w razie potrzeby zmiany.
print('Please, enter a valid input.')
No i te printy... weź teraz zrób ćwiczenie i np. zrób z tej aplikacji aplikację okienkową. I to w ten sposób, żeby ta logika, którą masz mogła działać równocześnie w konsoli, jak w okienkach.
Widzisz już problem? Mieszasz sposób prezentacji danych (print) z logiką gry.
Wiem, że to niewiele i kodu jest tam dużo więcej niż mogłoby być, ale zacząłem jakiś miesiąc temu od zera.
Jeśli dopiero miesiąc temu zacząłeś programować, to masz jeszcze dużo czasu, żeby się nauczyć.
Swoją drogą zastanawiam się, czemu każdy kod osób początkujących wygląda podobnie - masę kodu kopiuj-wklej i drabinki ifów. Czy to jest naturalny odruch osoby zaczynającej programować? (ja już szczerze mówiąc nie pamiętam, jak pisałem na początku). Czy może jakaś infekcja z tutoriali, w którym takiego pisania uczą? Bo to aż takie typowe. Kod, który jest strasznie sztywny i który widać, że został pisany, że ktoś pisał tylko rzeczy od A do C to co sobie założył.