Pomoc w kodzie by Grzego

0

Cześć wszystkim, na początek chciałbym zaznaczyć, że jestem totalnie początkujący w programowaniu jak i Pythonie więc poniższy przypadek może okazać się dla większości banalnie prosty aczkolwiek nie mogę sobie z nim poradzić.

W wątku tym chciałbym wrzucać wszystkie moje problemy z jakimi się spotykam i prosić o porady.

Dla wyjaśnienia jestem w połowie książki Marka Lutza więc wielu możliwości Pythona po prostu nie znam, dlatego korzystam z rzeczy najprostszych.

W skrócie, wymyśliłem, że napiszę prostą aplikację do gry w Texas Holdem dla 2, 3 lub 4 graczy. Zbudowałem funkcję która losuje kartę z talii i chciałbym napisać kod, który na początek wybierze po dwie karty dla każdego gracza i doda je do listy gracza w liście graczy. Lista gracza to zagnieżdżona lista odpowiadająca za to co dany gracz ma w ręce.

import random

pelna_talia = ('At', 'Kt', 'Qt', 'Jt', '10t', '9t', '8t', '7t', '6t', '5t', '4t', '3t', '2t',
               'Aka', 'Kka', 'Qka', 'Jka', '10ka', '9ka', '8ka', '7ka', '6ka', '5ka', '4ka', '3ka', '2ka',
               'Aki', 'Kki', 'Qki', 'Jki', '10ki', '9ki', '8ki', '7ki', '6ki', '5ki', '4ki', '3ki', '2ki',
               'Ap', 'Kp', 'Qp', 'Jp', '10p', '9p', '8p', '7p', '6p', '5p', '4p', '3p', '2p')
talia_do_gry = list(pelna_talia)
stol = []
wybrana_karta = ""

print('Witaj przy stole do gry w Texas Holdem, usiądź wygodnie i przygotuj żetony')
liczba_graczy = input('Jaka jest liczba graczy? (2, 3 czy 4): ')
zaczynamy = input('No to co? Zaczynamy? (Tak/Nie): ')

#Tworzy listę graczy na podstawie inputu
gracze = [[]] * int(liczba_graczy)

#Losuje jedną kartę z tali do gry
def losowanie():
    global wybrana_karta, talia_do_gry
    poz = random.randrange(len(talia_do_gry))
    wybrana_karta = talia_do_gry[poz]
    talia_do_gry.remove(wybrana_karta)
    return wybrana_karta

if zaczynamy == 'Tak':
    for gracz in gracze:
        losowanie()
        gracze[0].append(wybrana_karta)

Jak widać na dole rozpisałem pętle która miała wykonać losowanie dla każdego gracza i dodać w pozycji 0 każdej listy ale coś jest nie tak i kod wybiera dwie karty i dodaje do każdej listy. 0 póki co jest stałą ale będę chciał je zamienić na zmienną.

Co trzeba poprawić żeby kod losował kartę i dodawał ją na wybraną pozycję w liście gracza?

Dzięki za pomoc!

0

Zalecam to skasować już teraz i napisać od nowa, tym razem z głową. Opakuj to jak człowiek w odpowiednie klasy (dla Karty oraz Talii) ;)

0

Shalom, tak myślałem, że spotkam się z taką odpowiedzią. Łatwiej napisać skasuj niż pomóc, prawda? :) Wiem, że to dla Ciebie jest coś poniżej krytyki ale jakoś się trzeba uczyć. Gdybym znał klasy to bym je zastosował, jestem na samym początku więc wykorzystuje to co umiem, a kod piszę w celach praktyki i zdaję sobie sprawę, że osoba zaawansowana napisałaby go lepiej.

0

to je poznaj i zastosuj. Jezeli robisz kwadratowe kolo, to ktos Ci mowi zebys uzyl jakiegos narzedzia do obracania i wtedy wyjdzie Ci ladne kolo a nie kwadrat

A ty mowisz
"wiedzialem, ze ktos mi powie bym moje kwadratowe kolo wyrzucil i zrobil od poczatku ale..."

nie. nie ma zadnego ale. Kwadratowe kolo nie jest kolem.
Twoj kod jest zly. Dostales wskazowki jak go poprawic, wiec doucz sie czego ni rozumiez z odpowiedzi i popraw

0

@fasadin: ja sobię zdaje sprawę, że @Shalom naprowadził mnie na dobry tor i bardzo mu za to dziękuję. Z tym, że ja wiedziałem, że za pomocą klas zrobię to lepiej ale, że jako ich nie znam i uznaję dochodzenie krok po kroku na własnych błędach do celu to chciałem zrobić to sam za pomocą kwadratury koła jak to nazwałeś. Ok koniec tematu póki co bo szkoda waszego jak i mojego czasu. Wrócę jak przepiszę to na klasy.

0

Nie wiedzac czemu poczatkujacym czesto wydaje sie ze mechanizmy takie jak klasy sa po to zeby utrudnic im zycie i probuja na sile napisac cos bez ich uzywania. A jest zupelnie odwrotnie -> to wszystko jest po to zeby bylo latwiej!
Jesli mialbym uzyc jakiejs analogii to skladnia jezyka to skrzynka z narzedziami. Ty wyciagnales z niej kombinerki i probujesz na sile wszystko nimi zrobic, bo jak dobrze zlapac to i nakretke sie nakreci, jak dobrze walniejsz do gwozdzia wbijesz, ba, mozesz nawet zlapac wiertlo i udawac ze to wiertarka ;) Na upartego sie da, ale bedzie o duzo mniej efektywne i bardziej skomplikowane od wyjecia ze skrzynki odpowiedniego narzedzia.

Szczegolnie ze teraz w ogole nie masz tam informacji o punktach za dana karte, albo o figurach. Ciekawi mnie jak bys to chcial dodac do tego kodu ;)

0

@Shalom: ja nie powiedziałem, że napiszę ten kod bez użycia klas bo one są skomplikowane i niepotrzebne :) napisałem tylko, że ich nie znam i chciałem to zrobić drogą okrężną, a jakbym je poznał to bym przepisał tak jak powinno być.

Druga sprawa, Ty z racji doświadczenia widzisz ścianę i mówisz mi, że ta ściana tam jest. Ja bym sobie szedł i w tą ścianę uderzył. Droga początkującego jest trudna i może przebiegać na wiele różnych sposobów. Jeden by po prostu zaczął od klas i douczał się rzeczy w miarę potrzeb, ja chciałem iść po kolei i dojść do klas. Przyjmuje, że lepiej do pewnych rzeczy dochodzić samemu i sparzyć się na błędach.

Dzięki jeszcze raz, pouczę się klas i napiszę to od nowa.

0

Jesli nie znasz programowania obiektowego to wlasnie jest swietny moment zeby je poznac :D

Zacznij od projektowania na kartce jakie twoj program bedzie mial klasy i metody.

Jest taka ksiazka do podstaw nazywa sie: "Python dla kazdego. Podstawy programowania" wydawnictwa Helion.
Tam jest opisany sposob jak stworzyc gre w karty "na klasach". Mozesz potraktowac to jako punkt startowy do twojego programu.

Jesli ponad wszystko nie chcesz uzywac klas to proponuje zabrac sie za inny problem.
Moje propozycje to: uproszczone kolko i krzyzyk, wisielec jakies bardzo malo rozbudowane sudoku itp.

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