Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #42 - wystąpią Łukasz Langa i Dominik Kozaczko
Szukaj Szukaj
Strony: [1] 2 3 ... 10
 1 
 : Dzisiaj o 08:02 
Zaczęty przez sylwia - Nowe: wysłane przez IgorRochaPL
Sylwia,

Jeśli wolisz lekcje wideo, proponuję tę stronę: clas.pt/python-beginners

 2 
 : Dzisiaj o 00:47 
Zaczęty przez venxx - Nowe: wysłane przez venxx
@Ameise dziękuję Ci bardzo za poświęcony czas i wyczerpującą odpowiedź.
Dołożę wszelkich starań w celu przeanalizowania tego co napisałeś i wgłębienia się w kod
ze strony papersoccer. Jeśli będę miał z czymś problem postaram się dać znać Uśmiech

 3 
 : Wczoraj o 14:32 
Zaczęty przez nUmer - Nowe: wysłane przez nUmer
Witam serdecznie,

korzystając z PyGTK tworzę okno z tekstem, którego dla przykładu dwie pierwsze linie, wiersze chcę zablokować przed edycją i usunięciem (w pozostałych chcę pisać).
Głowiłem się nad tkinterem - nic nie wymyśliłem i sięgnąłem za pyGTK, tu również utknąłem.
Za wszelkie porady będę wdzięczny.

Kod
mport gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Pango
 
class TextViewWindow(Gtk.Window):
 
   def __init__(self):
       Gtk.Window.__init__(self, title="Title")
 
       self.set_default_size(450, 350)
 
       self.grid = Gtk.Grid()
       self.add(self.grid)
 
       self.create_textview()
#       self.set_editable()
 
   def create_textview(self):
       scrolledwindow = Gtk.ScrolledWindow()
       scrolledwindow.set_hexpand(True)
       scrolledwindow.set_vexpand(True)
       self.grid.attach(scrolledwindow, 0, 1, 3, 1)
 
       self.textview = Gtk.TextView()
       self.textbuffer = self.textview.get_buffer()
       self.textbuffer.set_text("Pierwszy wiersz\n" + "Drugi wiersz")
 
       start_iter = self.textbuffer.get_start_iter()
       end_iter = self.textbuffer.get_end_iter()
 
       scrolledwindow.add(self.textview)
 
win = TextViewWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

 4 
 : Wczoraj o 11:13 
Zaczęty przez robin - Nowe: wysłane przez robin
Mógłby ktoś obeznany powiedzieć coś o ważności algorytmów i struktur danych w robieniu stronek np w Django czy baz danych. Czy ich znajomość jest czymś koniecznym czy można bez nich się obejść na początku.  Czy w Pythonie implementuje je się w samych Pythonie czy w innych językach zazwyczaj ? I jakie działy są najbardziej przydatne sortowanie, searching, graphs , strings.

 5 
 : 21:00 15/06/19 
Zaczęty przez venxx - Nowe: wysłane przez Ameise
Dwa przykłady ode mnie (opierając się na przeróbce skryptów ze strony papersoccer.pl):

1) Gole - gif --- Gole - download --- Tak jak już pisałem powyżej, wystarczy lekko przerobić kod z orlika treningowego np.:

- dodałem tablicę gmochGoals
- w funkcji prev() i next() zamiast gmochMoves dałem gmochGoals - żeby wyświetlał tylko gole, a nie wszystkie możliwe ruchy
- w funkcji setGmochMode() dodałem gmochGoals = [], żeby wyzerować tablicę - kiedy ktoś odklika mazak Gmocha
- w funkcji marker() dodałem ifa dla ruchów (0,1,3,4,5,7 - bez 2 i 6, bo w tych przypadkach nigdy nie nastąpi taka możliwość), czy piłka w bramce:

Kod
// gorna bramka
if (tmpCursorY-1 == 0) {
   gmochGoals.push(gmochMultiMoves[i] + "0");
}

lub                         

Kod
// dolna bramka
if (tmpCursorY+1 == 12) {
   gmochGoals.push(gmochMultiMoves[i] + "3");
}

- w funkcji drawGameState(), przy ifie, który sprawdza, czy gmochMode == 1, zamieniłem wszystkie gmochMoves na gmochGoals - żeby rysował tylko gole, nie wszystkie możliwe ruchy

I gotowe. Trochę wystarczy pogłówkować i naprawdę mając kod z tej strony można szybko dopisać sobie nowe funkcje (ale przyznaję, mi zajęło 3 dni, zanim zrozumiałem działanie Język)

2) Bot - gif --- Bot - download -  I kolejny przykład, jak zmodyfikować kod z orlika treningowego, żeby zrobić najprostszego bota (tzn. robisz ruch, a bot w odpowiedzi wykonuje najdłuższy możliwy - nie ma tu żadnej głębokości przeszukiwania minimax itp., po prostu okroiłem maksymalnie mazak Gmocha i ze wszystkich możliwych ruchów automatycznie wykonuje tylko jeden, ten o najdłuższej długości, a jeśli jest ich więcej, to losuje jeden z nich)

- dodałem zmienną botMode = 0
- w funkcji buttonPress() dodałem ifa:

Kod
// jesli uzytkownik wlaczyl tryb bota, po kazdym kliknietym, zakonczonym ruchu przeciwnika wywoluj okrojony mazak Gmocha (marker())
if (botMode == 1 && multiMove == 0) {
   marker();
}

- w funkcji marker() wywaliłem ( w "2. Dodanie do tymczasowej tablicy tmpBoard trwają ...") wszystkie tmpCursorList.push([tmpCursorX, tmpCursorY, "0"]); itp. bo nie mają znaczenia; w ("3. Na koniec sprawdzenie 8 ruchów. Jeśli można ...") dla każdego ruchu wywalam wyliczenia boardClicks, boardFingerprint, bo nie mają znaczenia, a dodaję:

Kod
// gmochMoves zawiera wszystkie najdluzsze ruchy, jesli aktualny ruch jest dluzszy, wyczysc tablice gmochMoves i dodaj ruch - to teraz on bedzie najdluzszy - i wszystkie kolejne o takiej samej dlugosci beda dodawane do gmochMoves
 
next_move = gmochMultiMoves[i] + "0";
if (gmochMoves.length != 0 && next_move.length > gmochMoves[0].length) {
   gmochMoves = [];
}
gmochMoves.push(gmochMultiMoves[i] + "0");


- w funkcji marker() przy końcowym ifie gmochMultiMoves.length == 0 dodałem (kod wziąłem z funkcji prevMove(), można powiedzieć, że to tak, jakbym na stronie papersoccer.pl w orliku treningowym uruchomił mazak Gmocha, a następnie kliknął 'zatwierdź ruch' - muszę tak zrobić, żeby teraz zaktulizować pozycję kursora itp.):

Kod
                var random_move = gmochMoves[Math.floor(Math.random()*gmochMoves.length)];
               moves.push(random_move);
 
               for (var m=0;m<random_move.length;m++) {
                   if (random_move[m] == "0") {
                       board[cursorX][cursorY] = board[cursorX][cursorY] + "0";
                       board[cursorX][cursorY-1] = board[cursorX][cursorY-1] + "4";  
 
                       cursorY = cursorY - 1;
                   } else if (random_move[m] == "1") {
                       board[cursorX][cursorY] = board[cursorX][cursorY] + "1";
                       board[cursorX+1][cursorY-1] = board[cursorX+1][cursorY-1] + "5";
 
                       cursorX = cursorX + 1;
                       cursorY = cursorY - 1;
                   } else if (random_move[m] == "2") {
                       board[cursorX][cursorY] = board[cursorX][cursorY] + "2";
                       board[cursorX+1][cursorY] = board[cursorX+1][cursorY] + "6";
 
                       cursorX = cursorX + 1;
                   } else if (random_move[m] == "3") {
                       board[cursorX][cursorY] = board[cursorX][cursorY] + "3";
                       board[cursorX+1][cursorY+1] = board[cursorX+1][cursorY+1] + "7";
 
                       cursorX = cursorX + 1;
                       cursorY = cursorY + 1;
                   } else if (random_move[m] == "4") {
                       board[cursorX][cursorY] = board[cursorX][cursorY] + "4";
                       board[cursorX][cursorY+1] = board[cursorX][cursorY+1] + "0";
 
                       cursorY = cursorY + 1;
                   } else if (random_move[m] == "5") {
                       board[cursorX][cursorY] = board[cursorX][cursorY] + "5";
                       board[cursorX-1][cursorY+1] = board[cursorX-1][cursorY+1] + "1";
 
                       cursorX = cursorX - 1;
                       cursorY = cursorY + 1;
                   } else if (random_move[m] == "6") {
                       board[cursorX][cursorY] = board[cursorX][cursorY] + "6";
                       board[cursorX-1][cursorY] = board[cursorX-1][cursorY] + "2";
 
                       cursorX = cursorX - 1;
                   } else if (random_move[m] == "7") {
                       board[cursorX][cursorY] = board[cursorX][cursorY] + "7";
                       board[cursorX-1][cursorY-1] = board[cursorX-1][cursorY-1] + "3";
 
                       cursorX = cursorX - 1;
                       cursorY = cursorY - 1;
                   }
               }
 
               xrange = [];
               yrange = [];
               for(var i=cursorX-1;i<cursorX+2;i++){xrange.push(i);}
               for(var i=cursorY-1;i<cursorY+2;i++){yrange.push(i);}
 
               gmochId = 0;
               gmochMoves = [];
               gmochBlocked = [];
               gmochPermutation = [];
 
               //marker();
               next();


Trochę więcej kombinowania, ale też w miarę proste, trzeba tylko dobrze pomyśleć Język To tyle ode mnie, i tak poświęciłem większość część soboty na zrobienie tych dwóch rzeczy (a tylko przerobiłem kod od kogoś i dodałem parę linijek, a co dopiero tłumaczyć wszystko od początku i napisać to w pythonie Chichot a gdzie minimax czy inne rzeczy Chichot) Według mnie olej pygame i spróbuj się wgłębić w ten kod z githuba, praktycznie logikę gry masz już napisaną, teraz tylko dopisać własne funkcje. Ja nie mam czasu nikogo uczyć/tłumaczyć, więc życzę ci wytrwałości w nauce i powodzenia! Uśmiech

 6 
 : 07:55 15/06/19 
Zaczęty przez Bartoszeg02 - Nowe: wysłane przez Bartoszeg02
Dzięki serdeczne !
O tym książka nie wspominała (albo ten akapit przeoczyłem) - teraz jest wszystko jasne!
w ramach podziękowania mogę jedynie podarować +1 do reputacji ! Uśmiech

 7 
 : 01:48 15/06/19 
Zaczęty przez venxx - Nowe: wysłane przez venxx
@Sig wydaje mi się, że wiem co masz na myśli tylko w jaki sposób mógłbym to wykonać patrząc na mój kod?
@Guaz Mógłbyś trochę bardziej rozwinąć myśl tego drzewka?
@Ameise Znasz tę grę? Bardzo się ciesze bo jest mało popularna. Co do tych bardziej zaawansowanych opcji narazie się za nie nie porywam bo mam problem z tą prostą sprawą rok temu próbowałem to zrobić ale sam nie dam rady. Te linki które wysłałeś są mi dobrze znane nawet znam gościa który to zrobił. Czemu porzucił ten projekt nie mam pojęcia prawdopodobnie brak czasu i brak zysków z tego.
Jeśli ktoś miałby czas prosiłbym o bardziej szczegółową pomoc ponieważ piszę tutaj już w ostateczności ponieważ sam już mam problem cokolwiek dodać do mojego kodu i obawiam się, aby on miał sens trzeba by go napisać porządnie od nowa.

 8 
 : 22:00 14/06/19 
Zaczęty przez codern - Nowe: wysłane przez AQuatro
Warto zwrócić uwagę, na to, żeby edytor nie rąbał wzroku. Trzeba pamiętać, że pewnie będziemy przesiadywać nad kodem wiele godzin, więc dobrze, żeby dawka promieniowania nie była zbyt wysoka. Dlatego ja używam na co dzień zwykłego midnight commandera (Linux) czyli mcedit. Przy niebieskim tle da się wytrzymać o wiele dłużej niż przy białym.

 9 
 : 18:59 14/06/19 
Zaczęty przez Bartoszeg02 - Nowe: wysłane przez raydeal
Python widzi key jako zmienną lokalną i o to się czepia.
Gdybyś nie miał tej linii w main()
Kod
key = choose_stat(points)
to by widział key którą przypisałeś przed definicją main() a w tym przypadku jako że masz przypisanie do zmiennej o takiej nazwie w main() to traktuje tą zmienną jako lokalną.
Przenieś key='' oraz points do main() przed pętle i będzie dobrze.

 10 
 : 18:47 14/06/19 
Zaczęty przez python_django - Nowe: wysłane przez raydeal
Jeśli stawiasz nową strukturę w innej bazie to jest to w miarę proste, bo część danych z tabeli User przenosisz do UserCompany metodą dowolną. Reszta pozostaje bez zmian.
W zależności jak dużo tabel i jak powiązane to albo robisz backup pozostałych tabel (bez User i UserCompany) i import albo używając Pythona przenosisz dane z tabeli do tabeli.

Jeśli chodziło Ci o przeniesienie danych w ramach tej samej bazy przy wykonywaniu migracji Djangowych to mocno się to komplikuje. Trzeba robić to w kilku krokach uważając żeby nie stracić danych.

Strony: [1] 2 3 ... 10
© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot