<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze pytania i odpowiedzi w Python</title>
<link>https://forum.pasja-informatyki.pl/qa/programowanie/python</link>
<description>Powered by Question2Answer</description>
<item>
<title>Odpowiedź: Przechwytywanie błędów .exe w Pythonie</title>
<link>https://forum.pasja-informatyki.pl/594072/przechwytywanie-bledow-exe-w-pythonie?show=599938#a599938</link>
<description>

&lt;p&gt;&lt;strong&gt;Witamy Pana&lt;/strong&gt;
&lt;br&gt;
Poniżej przygotowaliśmy dla Pana rozwiązanie:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
import subprocess

try:
    result = subprocess.run(
        [&quot;nazwa_programu.exe&quot;, &quot;argument1&quot;, &quot;argument2&quot;],
        capture_output=True,
        text=True,
        check=True
    )
    print(&quot;Komunikat:&quot;, result.stdout)

except subprocess.CalledProcessError as e:
    print(&quot;Błąd wykonania!&quot;)
    print(&quot;Kod:&quot;, e.returncode)
    print(&quot;stderr:&quot;, e.stderr)
&lt;/pre&gt;



&lt;p&gt;
&lt;br&gt;
check=True wyrzuci Panu wyjątek jeśli .exe zwróci kod 0
&lt;br&gt;
capture_output=True przechwyci stdout i stderr
&lt;br&gt;
stderr to komunikat o błeddzie
&lt;br&gt;

&lt;br&gt;
&lt;strong&gt;Pozdrawiamy&lt;/strong&gt;
&lt;br&gt;
Życzymy dużo sukcesów w nauce programowania!&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/594072/przechwytywanie-bledow-exe-w-pythonie?show=599938#a599938</guid>
<pubDate>Tue, 28 Apr 2026 15:31:38 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Matura próbna 2024 zadanie 1</title>
<link>https://forum.pasja-informatyki.pl/597850/matura-probna-2024-zadanie-1?show=599909#a599909</link>
<description>

&lt;p&gt;&lt;strong&gt;Domyślamy się że chodzi o to, że w zadaniu jest prośba o napisanie algorytmu, a nie kodu programu.&amp;nbsp;&lt;/strong&gt;Pan napisał kod, a wyżej wkleił Pan algorytm.&amp;nbsp; Na dole jest python, u góry ciąg czynności.&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597850/matura-probna-2024-zadanie-1?show=599909#a599909</guid>
<pubDate>Tue, 21 Apr 2026 20:02:59 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Problem z wykrywaniem kamery i mikrofonu (Django - WebRTC)</title>
<link>https://forum.pasja-informatyki.pl/598402/problem-z-wykrywaniem-kamery-i-mikrofonu-django-webrtc?show=599906#a599906</link>
<description>

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Nasze uwagi:&lt;/em&gt;&lt;/strong&gt;
&lt;br&gt;
createMicrophoneAndCameraTracks() zwraca tylko jeden track → użytkownik nie publikuje niczego.&amp;nbsp;Brak obsługi user-unpublished → po wyłączeniu kamery/mikrofonu nie wraca&amp;nbsp;obraz/dźwięk.&amp;nbsp;Ponowne client.publish() w handleUserLeft → psuje połączenia, renegocjacje, gubienie tracków.&amp;nbsp;Autoplay blokuje audio → Chrome/Safari nie odtwarzają dźwięku bez interakcji.&amp;nbsp;Safari/iOS nie wspiera VP8 → brak obrazu u części użytkowników.&amp;nbsp;Brak tokena przy włączonym App Certificate → część klientów nie publikuje.&amp;nbsp;Brak obsługi błędów subscribe() → jeśli subskrypcja się wywali, audio/video nie pojawi się.&amp;nbsp;Brak kontenera video gdy user publikuje tylko audio → audio nie ma gdzie się odtworzyć.&amp;nbsp;Zbyt agresywne encoderConfig → część urządzeń nie wspiera 1080p → brak tracków.&amp;nbsp;Brak renegocjacji po reconnectach → część użytkowników nie dostaje tracków.&amp;nbsp;Niektóre przeglądarki blokują kamerę mimo zgody → track null, brak publikacji.&amp;nbsp;Zbyt późne podpinanie eventów user-published → pierwszy publish może zostać zgubiony.&amp;nbsp;Brak HTTPS (jeśli dotyczy) → WebRTC ograniczone, szczególnie na iOS.&amp;nbsp;Zajęta kamera/mikrofon przez inną aplikację → track null, użytkownik „niewidzialny”.&amp;nbsp;Problemy z wirtualnymi kamerami&amp;nbsp;→ Agora nie tworzy videoTrack.
&lt;br&gt;

&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Polecamy usprawnić na początek:&lt;/em&gt;&lt;/strong&gt;
&lt;br&gt;
createMicrophoneAndCameraTracks() zwraca null → użytkownik nie publikuje niczego (kamera/mikrofon niedostępne lub nieobsługiwane).
&lt;br&gt;
Safari / iOS nie wspiera VP8 → brak obrazu u części użytkowników.
&lt;br&gt;
Autoplay blokuje audio → użytkownik widoczny, ale niesłyszalny.
&lt;br&gt;
Błąd w handleUserLeft (ponowne publish) → psuje połączenia i gubi tracki.
&lt;br&gt;
Brak obsługi user-unpublished → po wyciszeniu kamera/mikrofon nie wracają.
&lt;br&gt;

&lt;br&gt;
Reszta ok&amp;nbsp;&lt;img alt=&quot;devil&quot; src=&quot;https://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/devil_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;devil&quot;&gt;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598402/problem-z-wykrywaniem-kamery-i-mikrofonu-django-webrtc?show=599906#a599906</guid>
<pubDate>Tue, 21 Apr 2026 19:33:58 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Szukam działającej (w miarę nowej) libki python pod WHOIS (dla domen pl eu i com), Najchętniej Py, C# lub Java</title>
<link>https://forum.pasja-informatyki.pl/599819/szukam-dzialajacej-miare-nowej-libki-python-pod-whois-dla-domen-com-najchetniej-java?show=599834#a599834</link>
<description>Z WHOIS-em ogólnie jest taki problem, że to nigdy nie było ustandaryzowane i każda domena/TLD zwraca trochę inny format, więc parsowanie tego to często loteria – stąd te biblioteki, które „raz działają, raz nie”&lt;br /&gt;
Ja mogę tylko z Javy coś zasugerować, mianowicie &amp;nbsp;Apache Commons Net (WhoisClient) &lt;a href=&quot;https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/whois/WhoisClient.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/whois/WhoisClient.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Natomiast nie ma bibliteki np. w Javie, która ogarnie Ci wszystkie TLD, więc pewnie trzeba będzie dopisać jakieś własne podyfikacje z poziomu kodu, nie wiem jak w Pythonie. &lt;br /&gt;
Jednak problem raczej jest nie w bibliotece tylko w samym WHOIS – jak potrzebujesz stabilnych danych, to serio rozważ RDAP </description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599819/szukam-dzialajacej-miare-nowej-libki-python-pod-whois-dla-domen-com-najchetniej-java?show=599834#a599834</guid>
<pubDate>Tue, 24 Mar 2026 12:34:55 +0000</pubDate>
</item>
<item>
<title>Mam prośbe ocenił by ktoś moją app na githubie lub zaproponował ulepszenia</title>
<link>https://forum.pasja-informatyki.pl/599711/mam-prosbe-ocenil-by-ktos-moja-app-na-githubie-lub-zaproponowal-ulepszenia</link>
<description>Oto link do mojej aplikacji github: &lt;a href=&quot;https://github.com/Krzyzyk33/CMDAI.git&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/Krzyzyk33/CMDAI.git&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Prosiłbym żebyście mi pomogli w ulepszaniu mojej aplikacji oraz o pomoc w testowaniu jej. Oczywiście żeby aplikacja zadziałała trzeba zainstalować model i dodać go do pliku models/ .&lt;br /&gt;
&lt;br /&gt;
Reszta informacji w README.md i FAQ.md.&lt;br /&gt;
&lt;br /&gt;
Dziękuje za pomoc</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599711/mam-prosbe-ocenil-by-ktos-moja-app-na-githubie-lub-zaproponowal-ulepszenia</guid>
<pubDate>Fri, 20 Feb 2026 18:08:40 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: [Python] Jakie bibloteki na start?</title>
<link>https://forum.pasja-informatyki.pl/599398/python-jakie-bibloteki-na-start?show=599433#a599433</link>
<description>Pandas to taki Excel w pythonie :) - operuje się głównie na tablicach (coś jak arkusze) czy wektorach. Główne zastosowanie: kiedyś to statystyka, dziś bardziej AI. NumPy i SciPy to obliczenia numeryczne / inżynierskie. Pandas powoli jest wypierany przez Polars.&lt;br /&gt;
&lt;br /&gt;
W AI korzysta się głównie z SciKit (nadal jest szeroko używany), PyTorch, Tensorflow i od niedawna JAX. W poszczególnych działkach jak np. NLP dochodzą jeszcze NLTK, SpaCy, GenSim, textBlob i podobne. Warto znać też Streamlit czy Gradio i podobne. Do wiizualizacji Plotly czy Matplotlib i kilka innych. Później jak wejdziesz w AI i obliczenia na klastrach to Dask, Ray i podobne wchodzą w gre. Modin czy Vaex przeniosą Pandas do obliczeń na wielu maszynach lub GPU. Do BigData używa się głównie PySpark.&lt;br /&gt;
&lt;br /&gt;
Do web-dev głównie FastAPI i Django i ew. coś jak Litestar czy Quartz który jest async-Flaskiem (czasem oba się pojawiają w ogłoszeniach). Pyramid można sobie już odpuścić ;), choć na polskim forum pythona jest jedna oferta w tym frameworku (budują w nim odpowiednik Allegro, chyba w Danii).</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599398/python-jakie-bibloteki-na-start?show=599433#a599433</guid>
<pubDate>Fri, 05 Dec 2025 14:31:58 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Jak pozbyć się zmiennej statycznej?</title>
<link>https://forum.pasja-informatyki.pl/599257/jak-pozbyc-sie-zmiennej-statycznej?show=599258#a599258</link>
<description>

&lt;p&gt;Najlepiej to zacznij od refactoringu i nauczenia sie podstawowych dobrych praktyk, typu SOLID&lt;/p&gt;



&lt;blockquote&gt;


&lt;p&gt;Wie ktoś jak pozbyć zmiennej statycznej Menu.nesting_level i przekazywać zaktualizowane informacje dotyczące poziomu zagnieżdżenia Menu dopiero w momencie wywoływania metody menu.add_item np menu.add_item('Podmenu', submenu.loop)&amp;nbsp;lub menu.add_submenu? Nie wszystkie obiekty Menu mają być podmenu powiązanymi z innymi menu w programie.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Tekst brzmi na coś bardzo skomplikowanego, ale z tego co rozumiem, masz problem z przekazywaniem wartości zmiennej do innych obiektów, bo gubisz się w tym kodzie, bo wszystko robi wszystko, nie wiadomo co ma służyć do czego&lt;/p&gt;



&lt;p&gt;No i jeszcze te zagnieżdżenia...&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
    def _read_choice(self) -&amp;gt; MenuItem:
        with redirect_stdio(self.stdin, self.stdout):
            while True:
                self._display_menu()
                try:
                    user_input = input(_('Your choice: ')).strip().lower()
                except (EOFError, KeyboardInterrupt):
                    print(_('\nExiting...'))
                    return self.items[-1]
 
                try:
                    if user_input.isdigit():
                        idx = int(user_input)
                        if not 1 &amp;lt;= idx &amp;lt;= len(self.visible_items):
                            raise ValueError
                        candidate = self.visible_items[idx - 1]
                    else:
                        for idx, item in enumerate(self.visible_items):
                            if user_input == item.key:
                                candidate = self.visible_items[idx]
                                break
                        else:
                            raise ValueError
                    if not candidate.enabled:
                        print_input_error(_('invalid operation'))
                        wait_for_enter()
                    else:
                        return candidate
                except ValueError:
                    print_input_error(_('invalid choice'))&lt;/pre&gt;



&lt;p&gt;Wrócisz do kodu po miesiącu i zrozumienie co jak działa zajmie ci 10 razy więcej czasu niż powinno (ja czytając na szybko nie rozumiem, musiałbym się skupić i dokładnie przeanalizować)&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599257/jak-pozbyc-sie-zmiennej-statycznej?show=599258#a599258</guid>
<pubDate>Mon, 13 Oct 2025 11:08:15 +0000</pubDate>
</item>
<item>
<title>mypy - typ zwracanej wartości przez funkcję taki sam jak typ argumentu funkcji</title>
<link>https://forum.pasja-informatyki.pl/599249/mypy-typ-zwracanej-wartosci-przez-funkcje-taki-sam-jak-typ-argumentu-funkcji</link>
<description>

&lt;p&gt;Hej, jak mogę powiedzieć mypy że typ zwracany powinien być taki sam jak ten przekazany w parametrze _type do funkcji read_number bez bawienia się w Any?&lt;/p&gt;



&lt;p&gt;Chodzi mi o takie coś&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
def read_number(prompt: str = 'Enter the number (cannot be zero): ', *,
                _type: type = float) -&amp;gt; _type (?) wywala błąd undefined name _type:
    while True:
        try:
            return _type(input(prompt))
        except ValueError:
            print('Error: not a number. Try again...')&lt;/pre&gt;



&lt;p&gt;Funkcja ma zwracać taki sam typ jak ten zdefiniowany w zmiennej _type.&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599249/mypy-typ-zwracanej-wartosci-przez-funkcje-taki-sam-jak-typ-argumentu-funkcji</guid>
<pubDate>Sat, 11 Oct 2025 11:55:54 +0000</pubDate>
</item>
<item>
<title>SYMULATOR MARTA-CRYPTO AES KOMUNIKATOR</title>
<link>https://forum.pasja-informatyki.pl/598942/symulator-marta-crypto-aes-komunikator</link>
<description>

&lt;p&gt;CZEŚĆ STWORZYŁEM NIKOMU NIE POTRZEBNY SYMULATOR KOMUNIKATORA Z SZYFROWANIEM PLIKÓW, WERSJA EDUKACYJNA MAM RÓWNIEŻ WERSJE EXE,(WINDOWS&amp;nbsp;TRAKTUJE GO JAK WIRUSA HE HE&lt;img alt=&quot;wink&quot; src=&quot;https://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/wink_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;wink&quot;&gt;)&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=1646132344671537033&quot; style=&quot;height:351px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;Kod w Pythonie&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
import tkinter as tk
from tkinter import messagebox, filedialog
import base64
import math
import random
import hashlib
import json
import os
from sympy import primerange, isprime
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
from cryptography.hazmat.backends import default_backend

# === Marta-Crypto AES ===

def tekst_na_sume_ascii(tekst):
    return sum(ord(znak) for znak in tekst)

def znajdz_szyfr_marta(tekst):
    suma_ascii = tekst_na_sume_ascii(tekst)
    if suma_ascii &amp;lt;= 10:
        return None
    
    r = random.randint(1, 7)
    s = int(math.log(suma_ascii) + r)
    k = max(2, int(math.log(s)) if s &amp;gt; 0 else 2)

    liczby_pierwsze = list(primerange(2, suma_ascii))
    if len(liczby_pierwsze) &amp;lt; k:
        return None

    szyfr = random.choices(liczby_pierwsze, k=k)
    aktualna_suma = sum(szyfr)
    roznica = suma_ascii - aktualna_suma
    if roznica != 0:
        poprawiona = szyfr[-1] + roznica
        if poprawiona &amp;gt; 1 and isprime(poprawiona):
            szyfr[-1] = poprawiona

    return szyfr

def generuj_klucz_aes(klucz_uzytkownika, szyfr_marta):
    dane = klucz_uzytkownika + ''.join(str(p) for p in szyfr_marta)
    return hashlib.sha256(dane.encode()).digest()

def szyfruj_aes(tekst, klucz_aes):
    iv = os.urandom(16)
    cipher = Cipher(algorithms.AES(klucz_aes), modes.CBC(iv), backend=default_backend())
    encryptor = cipher.encryptor()
    padder = padding.PKCS7(128).padder()
    if isinstance(tekst, str):
        tekst = tekst.encode()
    padded_data = padder.update(tekst) + padder.finalize()
    zaszyfrowane = encryptor.update(padded_data) + encryptor.finalize()
    return base64.b64encode(iv + zaszyfrowane).decode()

def odszyfruj_aes(tekst_b64, klucz_aes):
    dane = base64.b64decode(tekst_b64)
    iv = dane[:16]
    zaszyfrowane = dane[16:]
    cipher = Cipher(algorithms.AES(klucz_aes), modes.CBC(iv), backend=default_backend())
    decryptor = cipher.decryptor()
    odszyfrowane_padded = decryptor.update(zaszyfrowane) + decryptor.finalize()
    unpadder = padding.PKCS7(128).unpadder()
    return unpadder.update(odszyfrowane_padded) + unpadder.finalize()

def zapisz_wiadomosc(nadawca, odbiorca, szyfr, zaszyfrowane_b64, hash_val):
    dane = {
        &quot;nadawca&quot;: nadawca,
        &quot;odbiorca&quot;: odbiorca,
        &quot;szyfr&quot;: szyfr,
        &quot;zaszyfrowane&quot;: zaszyfrowane_b64,
        &quot;hash&quot;: hash_val
    }
    filepath = filedialog.asksaveasfilename(defaultextension=&quot;.json&quot;,
                                            filetypes=[(&quot;Pliki JSON&quot;, &quot;*.json&quot;)],
                                            title=&quot;Zapisz wiadomość jako&quot;)
    if filepath:
        with open(filepath, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
            json.dump(dane, f, indent=2)
        return filepath
    return None

def wczytaj_wiadomosc():
    filepath = filedialog.askopenfilename(defaultextension=&quot;.json&quot;,
                                          filetypes=[(&quot;Pliki JSON&quot;, &quot;*.json&quot;)],
                                          title=&quot;Wybierz plik z wiadomością&quot;)
    if filepath:
        try:
            with open(filepath, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f:
                return json.load(f)
        except FileNotFoundError:
            return None
    return None

def szyfruj_plik():
    klucz = entry_klucz.get()
    if not klucz:
        messagebox.showwarning(&quot;Błąd&quot;, &quot;Podaj klucz przed szyfrowaniem pliku!&quot;)
        return

    filepath = filedialog.askopenfilename(
        title=&quot;Wybierz plik do zaszyfrowania&quot;,
        filetypes=[(&quot;Wszystkie pliki&quot;, &quot;*.*&quot;)]
    )
    if not filepath:
        return

    with open(filepath, &quot;rb&quot;) as f:
        dane_bin = f.read()

    # Generujemy szyfr Marta na podstawie nazwy pliku (lub możesz zmienić na dane_bin jeśli chcesz)
    szyfr = znajdz_szyfr_marta(os.path.basename(filepath))
    if not szyfr:
        messagebox.showerror(&quot;Błąd&quot;, &quot;Nie udało się wygenerować szyfru!&quot;)
        return

    klucz_aes = generuj_klucz_aes(klucz, szyfr)
    iv = os.urandom(16)
    cipher = Cipher(algorithms.AES(klucz_aes), modes.CBC(iv), backend=default_backend())
    encryptor = cipher.encryptor()
    padder = padding.PKCS7(128).padder()
    padded = padder.update(dane_bin) + padder.finalize()
    zaszyfrowane = encryptor.update(padded) + encryptor.finalize()

    zaszyfrowane_b64 = base64.b64encode(iv + zaszyfrowane).decode()
    hash_val = hashlib.sha256(dane_bin).hexdigest()

    dane = {
        &quot;szyfr&quot;: szyfr,
        &quot;nazwa_pliku&quot;: os.path.basename(filepath),
        &quot;zaszyfrowane&quot;: zaszyfrowane_b64,
        &quot;hash&quot;: hash_val
    }
    savepath = filedialog.asksaveasfilename(
        defaultextension=&quot;.json&quot;,
        filetypes=[(&quot;Pliki JSON&quot;, &quot;*.json&quot;)],
        title=&quot;Zapisz zaszyfrowany plik jako&quot;
    )
    if savepath:
        with open(savepath, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
            json.dump(dane, f, indent=2)
        messagebox.showinfo(&quot;Sukces&quot;, f&quot;Plik został zaszyfrowany i zapisany: {savepath}&quot;)

def odszyfruj_plik():
    klucz = entry_klucz.get()
    if not klucz:
        messagebox.showwarning(&quot;Błąd&quot;, &quot;Podaj klucz przed odszyfrowaniem pliku!&quot;)
        return

    filepath = filedialog.askopenfilename(
        defaultextension=&quot;.json&quot;,
        filetypes=[(&quot;Pliki JSON&quot;, &quot;*.json&quot;)],
        title=&quot;Wybierz zaszyfrowany plik do odszyfrowania&quot;
    )
    if not filepath:
        return

    try:
        with open(filepath, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f:
            dane = json.load(f)
    except Exception as e:
        messagebox.showerror(&quot;Błąd&quot;, f&quot;Nie udało się wczytać pliku:\n{e}&quot;)
        return

    szyfr = dane.get(&quot;szyfr&quot;)
    zaszyfrowane_b64 = dane.get(&quot;zaszyfrowane&quot;)
    nazwa_pliku = dane.get(&quot;nazwa_pliku&quot;, &quot;plik_odszyfrowany&quot;)
    _, ext = os.path.splitext(nazwa_pliku)
    if ext == &quot;&quot;:
        ext = &quot;.bin&quot;  # domyślne rozszerzenie, jeśli brak oryginalnego

    if not szyfr or not zaszyfrowane_b64:
        messagebox.showerror(&quot;Błąd&quot;, &quot;Niepoprawny format pliku zaszyfrowanego!&quot;)
        return

    klucz_aes = generuj_klucz_aes(klucz, szyfr)
    try:
        odszyfrowane_bytes = odszyfruj_aes(zaszyfrowane_b64, klucz_aes)
    except Exception as e:
        messagebox.showerror(&quot;Błąd&quot;, f&quot;Nieprawidłowy klucz lub uszkodzone dane:\n{e}&quot;)
        return

    hash_sprawdzenie = hashlib.sha256(odszyfrowane_bytes).hexdigest()
    if hash_sprawdzenie != dane.get(&quot;hash&quot;):
        messagebox.showwarning(&quot;Uwaga&quot;, &quot;Hash pliku nie zgadza się! Plik może być uszkodzony lub zły klucz.&quot;)

    savepath = filedialog.asksaveasfilename(
        initialfile=&quot;odszyfrowany&quot; + ext,
        title=&quot;Zapisz odszyfrowany plik jako&quot;,
        filetypes=[(&quot;Wszystkie pliki&quot;, &quot;*.*&quot;)]
    )
    if not savepath:
        return

    # Dopisz rozszerzenie, jeśli użytkownik go nie podał
    if not os.path.splitext(savepath)[1]:
        savepath += ext

    try:
        with open(savepath, &quot;wb&quot;) as f:
            f.write(odszyfrowane_bytes)
        messagebox.showinfo(&quot;Sukces&quot;, f&quot;Plik odszyfrowany i zapisany:\n{savepath}&quot;)
    except Exception as e:
        messagebox.showerror(&quot;Błąd&quot;, f&quot;Nie udało się zapisać pliku:\n{e}&quot;)

# === GUI ===

root = tk.Tk()
root.title(&quot; Marta-Crypto AES Komunikator&quot;)

tk.Label(root, text=&quot; Nadawca&quot;).grid(row=0, column=0)
entry_nadawca = tk.Entry(root, width=40)
entry_nadawca.grid(row=0, column=1)

tk.Label(root, text=&quot; Odbiorca&quot;).grid(row=1, column=0)
entry_odbiorca = tk.Entry(root, width=40)
entry_odbiorca.grid(row=1, column=1)

tk.Label(root, text=&quot; Wiadomość&quot;).grid(row=2, column=0)
text_wiadomosc = tk.Text(root, height=10, width=60)
text_wiadomosc.grid(row=2, column=1)

tk.Label(root, text=&quot; Klucz&quot;).grid(row=3, column=0)
entry_klucz = tk.Entry(root, show=&quot;*&quot;, width=40)
entry_klucz.grid(row=3, column=1)

def nadaj_wiadomosc():
    nadawca = entry_nadawca.get()
    odbiorca = entry_odbiorca.get()
    wiadomosc = text_wiadomosc.get(&quot;1.0&quot;, tk.END).strip()
    klucz = entry_klucz.get()

    if not wiadomosc or not klucz:
        messagebox.showwarning(&quot;Błąd&quot;, &quot;Podaj wiadomość i klucz!&quot;)
        return

    szyfr = znajdz_szyfr_marta(wiadomosc)
    if not szyfr:
        messagebox.showerror(&quot;Błąd&quot;, &quot;Nie udało się wygenerować szyfru!&quot;)
        return

    klucz_aes = generuj_klucz_aes(klucz, szyfr)
    zaszyfrowane_b64 = szyfruj_aes(wiadomosc, klucz_aes)
    hash_val = hashlib.sha256(wiadomosc.encode()).hexdigest()
    filepath = zapisz_wiadomosc(nadawca, odbiorca, szyfr, zaszyfrowane_b64, hash_val)
    if filepath:
        messagebox.showinfo(&quot;Sukces&quot;, f&quot;Wiadomość zaszyfrowana i zapisana do pliku:\n{filepath}&quot;)

def odbierz_wiadomosc():
    klucz = entry_klucz.get()
    dane = wczytaj_wiadomosc()
    if not klucz or not dane:
        messagebox.showwarning(&quot;Błąd&quot;, &quot;Brak klucza lub wiadomości!&quot;)
        return

    klucz_aes = generuj_klucz_aes(klucz, dane[&quot;szyfr&quot;])
    try:
        wiadomosc = odszyfruj_aes(dane[&quot;zaszyfrowane&quot;], klucz_aes).decode()
    except Exception:
        messagebox.showerror(&quot;Błąd&quot;, &quot;Nieprawidłowy klucz lub dane!&quot;)
        return

    hash_sprawdzenie = hashlib.sha256(wiadomosc.encode()).hexdigest()
    zgodnosc = hash_sprawdzenie == dane[&quot;hash&quot;]
    messagebox.showinfo(&quot;Odszyfrowano&quot;,
                        f&quot;Nadawca: {dane['nadawca']}\nOdbiorca: {dane['odbiorca']}\n\nTreść: {wiadomosc}\n\nHash zgodny: {zgodnosc}&quot;)

tk.Button(root, text=&quot; Nadaj wiadomość&quot;, command=nadaj_wiadomosc, bg=&quot;lightgreen&quot;).grid(row=4, column=0, pady=10)
tk.Button(root, text=&quot; Odbierz wiadomość&quot;, command=odbierz_wiadomosc, bg=&quot;lightblue&quot;).grid(row=4, column=1)

tk.Button(root, text=&quot; Szyfruj plik&quot;, command=szyfruj_plik, bg=&quot;lightgray&quot;).grid(row=5, column=0, pady=10)
tk.Button(root, text=&quot; Odszyfruj plik&quot;, command=odszyfruj_plik, bg=&quot;lightyellow&quot;).grid(row=5, column=1)

root.mainloop()&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Tutaj jest wersja exe:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://drive.google.com/drive/folders/1DIGX8wIGqpDm_UH0zIqCD_z8Kb1kHkWW?usp=sharing&quot;&gt;https://drive.google.com/drive/folders/1DIGX8wIGqpDm_UH0zIqCD_z8Kb1kHkWW?usp=sharing&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Można tym programem szyfrować i odszyfrowywać pliki, tekstowe i inne również, oczywiście pewnie nie działa dobrze wszystko, ale dla zabawy może do czegoś komuś posłużyć.&amp;nbsp;&lt;img alt=&quot;wink&quot; src=&quot;https://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/wink_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;wink&quot;&gt;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598942/symulator-marta-crypto-aes-komunikator</guid>
<pubDate>Wed, 23 Jul 2025 21:59:34 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Darmowy kurs Python poziom podstawowy dla chętnych</title>
<link>https://forum.pasja-informatyki.pl/598291/darmowy-kurs-python-poziom-podstawowy-dla-chetnych?show=598782#a598782</link>
<description>spóźniłem się... jak zwykle :(</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598291/darmowy-kurs-python-poziom-podstawowy-dla-chetnych?show=598782#a598782</guid>
<pubDate>Thu, 05 Jun 2025 09:27:37 +0000</pubDate>
</item>
<item>
<title>Od kilku dni zmagam sie z Cloudflare Bot Challenge</title>
<link>https://forum.pasja-informatyki.pl/598691/od-kilku-dni-zmagam-sie-z-cloudflare-bot-challenge</link>
<description>

&lt;p&gt;Może zacznę od wiedzy jaką zdobyłem przez te kilka dni:&lt;/p&gt;



&lt;p&gt;1. Cloudflare Bot Challenge sprawdza user-agenta, czyli to czy przeglądarka jest zgodna z systemem operacyjnym i jej wersja jest aktualna&lt;/p&gt;



&lt;p&gt;2. Gnerowane są hasze JA3 i&amp;nbsp; JA4 czyli fingerprint przeglądarki, ja aby uzyskać większą wiarygodność używałem biblioteki:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
tls_client&lt;/pre&gt;



&lt;p&gt;Czy większa skuteczność? W zależności od testu, trudno jest mi to oszacować, aproksymacja niestety ma duże odchylenie standardowe i po wykonaniu iluś testów ciężko jest mi powiedzieć, czy jest to faktycznie lepsze od zwykłego użycia selenium.&lt;/p&gt;



&lt;p&gt;3. Próbowałem pakietu:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
undetected-chromedriver &lt;/pre&gt;



&lt;p&gt;Jednak to repo na github nie jest już wspierane, testy wychodzą też różnie&lt;/p&gt;



&lt;p&gt;4. Kożystałem z losowych adresów tor, co ciekawe przeglądanie interetu przez tor-browser nie generuje problemu wiecznie zapętlającej się captcha, której nawet ręcznie nie można przejść, jednak w przypadku selenium on pojawi się zawsze.&lt;/p&gt;



&lt;p&gt;5. Obszedłem captche za pomocą wstrzyknięcia skryptu js, który wyciągał takie parametry jak:&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
pageAction &amp;lt;string&amp;gt; required

The action field can be found in the callback function to load the captcha. If cloudflareTaskType is used, the action is usually &quot;managed&quot; or &quot;non-interactive&quot;.

data &amp;lt;string&amp;gt;required
The value of the data field can be taken from the cData parameter.
pageData &amp;lt;string&amp;gt; required

The value of the pageData field can be taken from the chlPageData parameter.&lt;/pre&gt;



&lt;p&gt;Wzorując się na tym fragmencie dokumentacji technicznej, wiedziałem gdzie tego szukać, ale wyciągnąć dynamicznie renderowane parametry nie było łatwo. Zrobiłem to po przez wstrzykiwanie kodu js w stronę html przed jej pełnym załądowaniem. Ta dokumentacja jest dostępna tutaj:&amp;nbsp;&lt;a href=&quot;https://docs.capmonster.cloud/docs/captchas/turnstile-task/?roistat_visit=615435&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://docs.capmonster.cloud/docs/captchas/turnstile-task/?roistat_visit=615435&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;6. Wysyłałem następnie te parametry do api i otrzymywałem token, który wstrzykiwałem w stronę.&lt;/p&gt;



&lt;p&gt;7. To rozwiązanie działąło mi krótko, bo tylko przez jeden dzień. Co ciekawe ręcznie nie potrafiłem rozwiązać tego wyzwania, ale wstrzyknięcie tokena działało.&lt;/p&gt;



&lt;p&gt;8. Teraz to rozwiązanie już mi nie działa, bo rozwiązanie powoduje zapętlenie&lt;/p&gt;



&lt;p&gt;9. Najlepszym rozwiązaniem wydaje się posiadać pulę, zaufanych adresów, ip, które nie są oflagowane&lt;/p&gt;



&lt;p&gt;10. Próbowałem użyć także proxy, gdzie wszystkie wydają się być oflagowane&lt;/p&gt;



&lt;p&gt;Jakie rozwiązanie tego problemu możecie mi zaproponować?&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598691/od-kilku-dni-zmagam-sie-z-cloudflare-bot-challenge</guid>
<pubDate>Sun, 18 May 2025 08:25:44 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Jaki kurs Pythona OD ZERA?</title>
<link>https://forum.pasja-informatyki.pl/598451/jaki-kurs-pythona-od-zera?show=598682#a598682</link>
<description>

&lt;p&gt;A nie zastanawiałeś się nad książką ? Mogę polecić ci &lt;a rel=&quot;nofollow&quot; href=&quot;https://helion.pl/ksiazki/python-na-start-programowanie-dla-nastolatkow-michal-wiszniewski,zaprpv.htm#format/d&quot; target=&quot;_blank&quot;&gt;Python na start&lt;/a&gt; Sam zacząłem się uczyć od zera, w tej książce masz fajni opisane przykłady zastosowanie pythona właśnie na start.&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598451/jaki-kurs-pythona-od-zera?show=598682#a598682</guid>
<pubDate>Fri, 16 May 2025 07:05:09 +0000</pubDate>
</item>
<item>
<title>Zadanie 64.4 ze zbioru zadań CKE Python</title>
<link>https://forum.pasja-informatyki.pl/598571/zadanie-64-4-ze-zbioru-zadan-cke-python</link>
<description>

&lt;pre class=&quot;brush:python;&quot;&gt;
def policz_zle_wiersze(obraz):
    zle = 0
    kandydat_na_zly_nr_wiersza = -1
    for j in range(0, 20): # nr_wiersza (index)
        wiersz = obraz[j]
        ile_jedynek = 0
        ile_zer = 0
        for i in range(0, 20):
            znak = wiersz[i]
            if znak == '1':
                ile_jedynek += 1
            else:
                ile_zer += 1
        bit_parzystosci = wiersz[-1] #string
        if int(bit_parzystosci) != ile_jedynek % 2:
            if zle == 0:    # jesli to byl pierwszy zly, to zapamietaj kandydata
                kandydat_na_zly_nr_wiersza = j+1
            zle += 1

    return (zle, kandydat_na_zly_nr_wiersza) # {ilość złych, nr_1.złego_wiersza}

def policz_zle_kolumny(obraz):
    zle = 0
    kandydat_na_zly_nr_kolumny = -1
    for i in range(0, 20): # indeks kolumny
        ile_jedynek = 0
        ile_zer = 0
        for wiersz in obraz:
            znak = wiersz[i]
            if znak == '1':
                ile_jedynek += 1
            else:
                ile_zer += 1

        bit_parzystosci = obraz[-1][i] # na planszy
        if ile_jedynek % 2 != int(bit_parzystosci):
            if zle == 0:
                kandydat_na_zly_nr_kolumny = i+1
            zle += 1

    return (zle, kandydat_na_zly_nr_kolumny)

for i in range(0, len(dane)):
    nr_obrazu = i+1
    obraz = dane[i]
    ile_zlych_wiersz = policz_zle_wiersze(obraz) # idąc wierszem, bity w pionie
    ile_zlych_kolumna = policz_zle_kolumny(obraz) # idąc pionowo, bity w wierszu

    if ile_zlych_kolumna[0] == 1 and ile_zlych_wiersz[0] == 1: # 1
        # po jednej zlej w wierszu i jednej zlej w kolumnie
        print(f'({nr_obrazu}, {ile_zlych_wiersz[1]}, {ile_zlych_kolumna[1]})')
    elif ile_zlych_kolumna[0] == 0 and ile_zlych_wiersz[0] == 1: # 2
        print(f'({nr_obrazu}, {ile_zlych_wiersz[1]}, {21})')
    elif ile_zlych_wiersz[0] == 0 and ile_zlych_kolumna[0] == 1:
        print(f'({nr_obrazu}, {21}, {ile_zlych_kolumna[1]})')&lt;/pre&gt;



&lt;p&gt;Witam. Robię zadanie i plan mój po krótce jest taki że:&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
1 zły wiersz + 1 zła kolumna → trzeba zmienić piksel, 
1 zły wiersz tylko → trzeba zmienić bit na końcu wiersza, 
1 zła kolumna tylko → trzeba zmienić bit na dole kolumny to wszystko jest super.&lt;/pre&gt;



&lt;p&gt;Nie mogę znaleźć błędu. Moje odpowiedzi to:&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
(3, 1, 21)
(14, 1, 21)
(29, 2, 21)
(32, 21, 1)
(45, 21, 18)
(72, 21, 8)
(90, 21, 5)
(129, 21, 8)
(142, 19, 16)
(143, 7, 21)
(154, 7, 21)&lt;/pre&gt;



&lt;p&gt;natomaist ich &quot;poprawne&quot;, to :&lt;/p&gt;



&lt;pre&gt;
(14,1,15)
(19,4,20)
(26,21,13)
(29,2,8)
(33,15,21)
(115,21,14)
(116,21,13)
(129,21,14)
(131,10,7)
(143,7,15)
(154,7,7)
(161,21,17)
(162,21,16)
(187,21,18)
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Proszę o pomoc i życzę miłej soboty. Pozdrawiam&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598571/zadanie-64-4-ze-zbioru-zadan-cke-python</guid>
<pubDate>Sat, 26 Apr 2025 07:15:15 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Matura funkcje wbudowane</title>
<link>https://forum.pasja-informatyki.pl/598503/matura-funkcje-wbudowane?show=598509#a598509</link>
<description>Tak&lt;br /&gt;
&lt;br /&gt;
Zgodnie z zadaniem, nie możesz używać niczego, poza tym co jest wymienione (czyli podstawowe operatory matematyczne)</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598503/matura-funkcje-wbudowane?show=598509#a598509</guid>
<pubDate>Thu, 17 Apr 2025 14:27:30 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Python, MySQL i github</title>
<link>https://forum.pasja-informatyki.pl/598403/python-mysql-i-github?show=598404#a598404</link>
<description>(Fajnie, gdybyś powiedział co to za program, co w zasadzie robi. Bo w zależności od tego, moja odpowiedź może się zmienić.)&lt;br /&gt;
&lt;br /&gt;
Jako absolutne minimum, powinieneś mieć zdokumentowaną schemę, tak. Nie słownie, tylko od razu SQLowo.&lt;br /&gt;
&lt;br /&gt;
Lepiej, jak napiszesz przy okazji od razu skrypt który przygotuje schemę (i opcjonalnie np wypełni przykładowymi danymi) i skrypt wrzucający dane.&lt;br /&gt;
&lt;br /&gt;
Jeszcze lepiej, jeśli użyjesz standardowego mechanizmu migracji zamiast ręcznie pisać cokolwiek. W sensie użytkownik bierze Twoje repo, odpala `python manage.py migrate` (django) lub `alembic upgrade` (sqlalchemy) lub coś podobnego.&lt;br /&gt;
&lt;br /&gt;
A swoją drogą, czy w ogóle na pewno to musi być koniecznie MySQL? Bo to też trochę niefajne, wymuszać konkretną bazę (i u nas większość by wolała podpiąć do istniejącego clustra postgresowego :P Albo lokalnego sqlite'a do eksperymentów). I to też coś co od lat biblioteki do baz rozwiązują &amp;quot;out of the box&amp;quot;.</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598403/python-mysql-i-github?show=598404#a598404</guid>
<pubDate>Mon, 31 Mar 2025 11:43:52 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: &quot;def miller_rabin(L, k=5)&quot; (BEZ LOSOWOŚĆ!!!, BEZ RANDOMU) Test MART'a HE HE</title>
<link>https://forum.pasja-informatyki.pl/598279/def-miller_rabin-l-k-5-bez-losowosc-bez-randomu-test-marta-he-he?show=598296#a598296</link>
<description>

&lt;p&gt;Przeiteruj się po liczbach od 1 do miliona i sprawdź czy twój algorytm działa tak samo dobrze jak ten Milera-Rabina. Mi się tego nie chce robić.&lt;/p&gt;



&lt;p&gt;Następnie spójrz w swój kod i zobacz ze złożoność twojego algorytmu to O(sqrt(n)). W takim czasie można ze 100% pewnością powiedzieć czy liczba jest pierwsza po prostu sprawdzając czy któraś z liczb do pierwiastka dzieli tę liczbę. Wniosek. Twój algorytm jest bezużyteczny. Liczę na najlepszą odpowiedź za zaoszczędzenie twojego czasu i powstrzymanie Cię od dalszego brnięcia w ślepą uliczkę&amp;nbsp;&lt;img alt=&quot;smiley&quot; src=&quot;https://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/regular_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;smiley&quot;&gt;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598279/def-miller_rabin-l-k-5-bez-losowosc-bez-randomu-test-marta-he-he?show=598296#a598296</guid>
<pubDate>Sun, 16 Mar 2025 00:35:04 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Klasyfikacja samochodu w python na podstawie jego danych</title>
<link>https://forum.pasja-informatyki.pl/598042/klasyfikacja-samochodu-w-python-na-podstawie-jego-danych?show=598055#a598055</link>
<description>problem może leżeć w funkcji aktywacji, której używasz, czyli schodkowa. Jeśli twoje dane wejściowe są różne od oczekiwanego zakresu, mogą występować problemy z klasyfikacją. Funkcja schodkowa daje tylko 0 lub 1, co może być za mało elastyczne przy niektórych danych.&lt;br /&gt;
&lt;br /&gt;
Spróbuj zmienić funkcję aktywacji na np. funkcję sigmoidalną lub ReLU, które mogą lepiej dopasować się do Twoich danych. Możesz również sprawdzić, czy masz odpowiednią skalę danych (np. przez standaryzację), ponieważ duże różnice w wartościach wejściowych mogą wpływać na działanie sieci.</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598042/klasyfikacja-samochodu-w-python-na-podstawie-jego-danych?show=598055#a598055</guid>
<pubDate>Fri, 14 Feb 2025 21:08:06 +0000</pubDate>
</item>
<item>
<title>Numpy vs PyTorch - przekazywanie tablic, GPU</title>
<link>https://forum.pasja-informatyki.pl/598040/numpy-vs-pytorch-przekazywanie-tablic-gpu</link>
<description>Cześć, mam taki problem; moim zadaniem jest przeniesienie kodu z NumPy na PyTorch.&lt;br /&gt;
&lt;br /&gt;
w wersji NumPy jest podwójna pętla for, i w wewnętrznej pętli jest:&lt;br /&gt;
for i in rangę(x):&lt;br /&gt;
b = a&lt;br /&gt;
a = np.ones(C)&lt;br /&gt;
// jakieś obliczenia na nowym a&lt;br /&gt;
// jakieś porównanie miedzy b (&amp;quot;starym a&amp;quot;) i nowym a&lt;br /&gt;
&lt;br /&gt;
Gdy te sama pętle napisałem w torchu,&lt;br /&gt;
&lt;br /&gt;
po prostu piszac&lt;br /&gt;
&lt;br /&gt;
a = torch.ones(C)&lt;br /&gt;
to kod nagle zaczął działać nieakceptowanie wolno (jest to powiązane z tym, ze działa on na GPU, i kod cały czas alokuje i inicjalizuje te zmienna od nowa na GPU)&lt;br /&gt;
&lt;br /&gt;
początkowo rozwiązałem to w taki sposób, ze&lt;br /&gt;
przed pętla for stworzyłem zmienna a_pattern = torch.ones(C)&lt;br /&gt;
a w pętli for robiłem przypisanie a = a_pattern&lt;br /&gt;
I to działa bardzo szybko, bo zmienna jest inicjalizowana tylko raz, ale prowadzi do złych wyników, bo teraz b = a = a_pattern i b przyjmuje wartość a_pattern, &amp;nbsp;bo tensorki się przekazują przez referencje (jak chyba wszystko w Pythonie)&lt;br /&gt;
&lt;br /&gt;
Próbowałem funkcje .clone, .copy, .detach, &amp;nbsp;.empty i .fill, przepisywanie w pętli for zamiast całej zmiennej od razu, &amp;nbsp;- nic nie działa - wszystko albo działa wolno i daje dobry wynik (jak a = torch.ones()), albo działa szybko i daje zły wynik (jak a = a_pattern). Potrzebuje rozwiązania które działa szybko i dobrze. Kod jako calom jest przyspieszony w porównaniu do wersji numpy, wiec jak Wasze rozwiazanie będzie działać kilka % wolniej od wersji numpy to nie ma problemu, ale niestety w mojej sytuacji instrukcja a = torch.ones(C) to 99% czasu działania programu, co jest nie do przyjęcia.&lt;br /&gt;
&lt;br /&gt;
Przepraszam ze nie załączam kodu ale i tak go nie odpalicie bo to wiele plików i duży dataset; ale zdiagnozowałem ze problemem jest tylko i aż ta jedna instrukcja. &lt;br /&gt;
&lt;br /&gt;
Czy ktoś ma pomysł jak to rozwiązać? &lt;br /&gt;
&lt;br /&gt;
Jakby co: przeniesienie kodu na GPU działa, nvtop pokazuje, ze zarówno pamięć jak i mcc obliczeniowa GPU jest mocno utylizowana</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598040/numpy-vs-pytorch-przekazywanie-tablic-gpu</guid>
<pubDate>Thu, 13 Feb 2025 12:24:02 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Python moduł nie chce się zaimportować</title>
<link>https://forum.pasja-informatyki.pl/597676/python-modul-nie-chce-sie-zaimportowac?show=597681#a597681</link>
<description>Środowisko wirtualne języka Python, to katalog w którym umieszczone są skrypty oraz moduły. Aby to środowisko aktywować, uruchamiasz skrypt który znajduje się w katalogu bin środowiska wirtualnego. Dla MS Windows, to będzie plik z końcówką *.ps1 (PowerShell) lub *.bat (CMD). Po jego uruchomieniu, ustawia on szereg zmiennych środowiskowych które powodują, że moduły oraz sam język nie instaluje oprogramowania w systemie, tylko w katalogu środowiska wirtualnego. Tu masz dobry opis zagadnienia: &lt;a href=&quot;https://python.land/virtual-environments/virtualenv&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://python.land/virtual-environments/virtualenv&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
W Twoim przypadku, to środowisko wirtualne, powstało w katalogu .venv&lt;br /&gt;
&lt;br /&gt;
Jak je aktywujesz (z konsoli lub z VSC), to możesz robić importy a narzędziem pip , instalować nowe moduły &amp;quot;nie brudząc systemu&amp;quot;.</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597676/python-modul-nie-chce-sie-zaimportowac?show=597681#a597681</guid>
<pubDate>Sat, 11 Jan 2025 11:36:40 +0000</pubDate>
</item>
<item>
<title>Brak możliwości zalogowania do gry</title>
<link>https://forum.pasja-informatyki.pl/597616/brak-mozliwosci-zalogowania-do-gry</link>
<description>Witam. Mam problem z zalogowaniem sie na klienta gry. Klient normalnie sie odpala ale nie idzie sie zalogowac.. Pisalem do admina to chcial dane z pliku syserr ale po zobaczeniu go mowi,ze nie wie o co chodzi.. O to te dane:&lt;br /&gt;
&lt;br /&gt;
Exception &amp;nbsp;in &amp;lt;module 'collections' from 'collections.pyc'&amp;gt; ignored&lt;br /&gt;
sys:1: RuntimeWarning: Cython module failed to patch module with custom type&lt;br /&gt;
Exception &amp;nbsp;in &amp;lt;module 'collections' from 'collections.pyc'&amp;gt; ignored&lt;br /&gt;
0105 19:57:00821 :: Exception&lt;br /&gt;
0105 19:57:00821 :: &amp;nbsp;in&lt;br /&gt;
0105 19:57:00821 :: &amp;lt;module 'collections' from 'collections.pyc'&amp;gt;&lt;br /&gt;
0105 19:57:00821 :: &amp;nbsp;ignored</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597616/brak-mozliwosci-zalogowania-do-gry</guid>
<pubDate>Sun, 05 Jan 2025 19:19:25 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Alternatywny kod i błędny wynik</title>
<link>https://forum.pasja-informatyki.pl/597108/alternatywny-kod-i-bledny-wynik?show=597112#a597112</link>
<description>Czyli mojego rozwiązania nie da się zmodyfikować, aby było poprawne?</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597108/alternatywny-kod-i-bledny-wynik?show=597112#a597112</guid>
<pubDate>Sun, 01 Dec 2024 12:08:09 +0000</pubDate>
</item>
<item>
<title>Długi input w pythonie</title>
<link>https://forum.pasja-informatyki.pl/596671/dlugi-input-w-pythonie</link>
<description>Cześć, potrzebuje pomocy z zadaniem. Sam algorytm działa mi bezbłędnie, niestety jeden z testów zakłada na wejściu liczbę n&amp;lt;=9*10^999999. Python nie obsługuje konwersji liczby string na int dla tak dużych wartości. Jak inaczej mogę to przekonwertować na int niż poprzez int(input())?</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596671/dlugi-input-w-pythonie</guid>
<pubDate>Mon, 11 Nov 2024 12:59:47 +0000</pubDate>
</item>
<item>
<title>Błąd w kodzie na SPOJu</title>
<link>https://forum.pasja-informatyki.pl/596452/blad-w-kodzie-na-spoju</link>
<description>

&lt;pre class=&quot;brush:python;&quot;&gt;
n = input()
print(n.title().replace(&quot; &quot;, &quot;&quot;))&lt;/pre&gt;



&lt;p&gt;zadanie dotyczy&amp;nbsp;&lt;a href=&quot;https://pl.spoj.com/problems/JSPACE/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://pl.spoj.com/problems/JSPACE/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;kod w VSC działa a w samym SPOJu już nie.&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596452/blad-w-kodzie-na-spoju</guid>
<pubDate>Sat, 02 Nov 2024 13:13:51 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: siec neuronowa 3D?</title>
<link>https://forum.pasja-informatyki.pl/596369/siec-neuronowa-3d?show=596392#a596392</link>
<description>

&lt;p&gt;GPT to nie prosta sieć neuronowa tylko algorytm który po drodze odpala kilka razy obliczenia na neuronach&lt;/p&gt;



&lt;p&gt;I służy właśnie do tego, żeby mądrzej wykorzystać moc obliczeniową, nie robisz bezmyślnego dokładania mnóstwa neuronów, tylko starasz się żeby robiły lepszą robote&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=114693778972823902&quot; style=&quot;height:356px; width:600px&quot;&gt;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596369/siec-neuronowa-3d?show=596392#a596392</guid>
<pubDate>Wed, 30 Oct 2024 06:41:59 +0000</pubDate>
</item>
<item>
<title>Dziwne działąnie SOPJ-a</title>
<link>https://forum.pasja-informatyki.pl/596178/dziwne-dzialanie-sopj-a</link>
<description>

&lt;p&gt;Natrafiła mnie bardzo dziwna sytuacja, napisałem program do zadania &quot;Liczby Pierwsze&quot; na SPOJ (tutaj link do zadania: &lt;a rel=&quot;nofollow&quot; href=&quot;https://pl.spoj.com/problems/PRIME_T/&quot;&gt;https://pl.spoj.com/problems/PRIME_T/&lt;/a&gt; ) ale pojawił się problem bo SPOJ stwierdzał po sprawdzeniu że program minoł limit czasu ,ale po zmianie nazwy zmienej z &quot;ilosc_prub&quot; na &quot;n&quot; zaczą działać.&lt;/p&gt;



&lt;p&gt;Tutaj fragment kodu przed zmianą:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
ilosc_prub = int(input())
if ilosc_prub &amp;gt; 1 or ilosc_prub &amp;lt; 100000:
    for x in range(ilosc_prub):
        i=int(input())
        print(algorytm(i))&lt;/pre&gt;



&lt;p&gt;Oraz po zmianie:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
n = int(input())
if n &amp;gt; 1 or n &amp;lt; 100000:
    for x in range(n):
        i=int(input())
        print(algorytm(i))&lt;/pre&gt;



&lt;p&gt;Potem zacząlem się tym bawić i okazało się że kiedy zmiena ma więcej niż 4 litery nie akcetował zadania (powud zawsze ten sam, mineło za dużo czasu).&lt;/p&gt;



&lt;p&gt;Czy ktokolwiek wie dlaczego tak się dzieje?&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596178/dziwne-dzialanie-sopj-a</guid>
<pubDate>Mon, 14 Oct 2024 15:09:04 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Połączenie Reacta z VPS.</title>
<link>https://forum.pasja-informatyki.pl/596133/polaczenie-reacta-z-vps?show=596136#a596136</link>
<description>

&lt;blockquote&gt;


&lt;p&gt;Jak zastąpić backend w Django serwerem VPS.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Nie zastępujesz, Django cały czas działa. Taki VPS to po prostu wypożyczona cudza maszyna wirtualna z linuxem, nie inny rodzaj aplikacji. Wrzucasz kod na serwer i odpalasz Django bez praktycznie żadnych zmian (poza konfiguracją). Baza też może być ta sama którą dotychczas używałeś.&lt;/p&gt;



&lt;p&gt;Z różnicą że Django na serwerze powinien chodzić w trybie DEBUG=false, plus&amp;nbsp;zamiast być odpalanym przez zwykłe 'manage.py runserver', powinien stać np za nginxem i gunicornem/uwsgi (bo wbudowany 'runserver' jest tylko do developmentu, jest mniej wydajny i bezpieczny). Tu masz popularną instrukcję jak zrobić każdy krok:&amp;nbsp;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Przy czym nic tutaj nie jest specyficzne dla VPSów, instrukcja jest uniwersalna dla &quot;chcę produkcyjnie odpalić aplikację Django na maszynie linuxowej&quot;.&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596133/polaczenie-reacta-z-vps?show=596136#a596136</guid>
<pubDate>Tue, 08 Oct 2024 18:28:07 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Nauka programowania</title>
<link>https://forum.pasja-informatyki.pl/595993/nauka-programowania?show=596021#a596021</link>
<description>Hej,&lt;br /&gt;
&lt;br /&gt;
Nie tak dawno temu sam się borykałem z podobnym problemem, choć szedłem w inną stronę jeżeli chodzi o wybór języków.&lt;br /&gt;
&lt;br /&gt;
Co do Python, to uczyłem się także i tego języka. Na Twoim miejscu nie wydawałbym na żadne kursy, na YT masz bardzo dobre kursy uczące podstaw PY za darmo. Po polsku masz podstawy Pythona i Django, do tego omówienie bibliotek. Po angielsku masz już wszystko czego dusza zapragnie. Kursy za kilka tysięcy czy bootcampy to wywalanie pieniędzy (niemałych) w błoto. Sam jestem posiadaczem kursów: Python (Strefa Kursów), Html+Css+Js (Udemy). Poza HTML i CSS te kursy nie dały mi nic. Na YT znalazłem inne kursy, które pomogły mi wejść między innymi do: JS, PHP co później także z YT rozwinąłem w Vue, Node, Laravel.&lt;br /&gt;
&lt;br /&gt;
Musisz pamiętać że kurs tylko wprowadza do danego języka, reszta nauki to:&lt;br /&gt;
dokumentacja + StackOverflow + własne błędy + Hindusi na YT&lt;br /&gt;
&lt;br /&gt;
To oczywiście tylko i wyłącznie moja opinia, choć znam wiele przypadków, w których się sprawdziła :)&lt;br /&gt;
&lt;br /&gt;
Powodzenia z nauką języka, Python to bardzo przyjemny język</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595993/nauka-programowania?show=596021#a596021</guid>
<pubDate>Thu, 26 Sep 2024 06:46:53 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: PYTHON PROGRAM PIERWSZEŃSTWO SUM LICZB</title>
<link>https://forum.pasja-informatyki.pl/595986/python-program-pierwszenstwo-sum-liczb?show=596002#a596002</link>
<description>

&lt;p&gt;&lt;span style=&quot;font-size:18px&quot;&gt;&lt;strong&gt;TUTAJ DRUGI PROGRAM, KTÓRY BADA ZBIEŻNOŚĆ CIĄGU ROSNĄCEGO DLA DOWOLNEGO X, W STOSUNKU DO STAŁEGO ROSNĄCEGO CIĄGU 1,3,5...&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;font-size:18px&quot;&gt;&lt;strong&gt;DLA X=6&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;font-size:18px&quot;&gt;&lt;strong&gt;6,7,8,9,10, 11&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;font-size:18px&quot;&gt;&lt;strong&gt;1,3,5,7, 9,&amp;nbsp; 11&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;font-size:18px&quot;&gt;&lt;strong&gt;Zbieżny dla 6i11, 11=11, a 6 bo wielokrotność jedynki.&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;font-size:18px&quot;&gt;&lt;strong&gt;Po niekąd bada ten program pierwszeństwo liczb. Gdy np. 6 wskaże mi tylko 6 i 11, wiem że suma 5+6 daje liczbę pierwszą.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;font-size:18px&quot;&gt;&lt;strong&gt;MIŁEJ ZABAWY.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
def is_multiple(a, b):
    &quot;&quot;&quot;Sprawdza, czy a jest wielokrotnością b.&quot;&quot;&quot;
    return a % b == 0

def find_convergences(x):
    # Generowanie ciągów
    first_sequence = [i for i in range(x, 2*x)]
    second_sequence = [i for i in range(1, 2*x, 2)]
    
    # Wyznaczanie zbieżności na podstawie pozycji i wielokrotności
    convergences = []
    min_length = min(len(first_sequence), len(second_sequence))
    
    for i in range(min_length):
        # Sprawdzanie, czy elementy są równe lub czy są wielokrotności
        if first_sequence[i] == second_sequence[i] or is_multiple(first_sequence[i], second_sequence[i]) or is_multiple(second_sequence[i], first_sequence[i]):
            convergences.append(first_sequence[i])
    
    return convergences

# Wprowadzenie wartości x
x = int(input(&quot;Podaj wartość x: &quot;))
convergences = find_convergences(x)

# Wyświetlanie wyników
print(f&quot;Wartość x: {x}&quot;)
print(f&quot;Zbieżności: {convergences}&quot;)&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595986/python-program-pierwszenstwo-sum-liczb?show=596002#a596002</guid>
<pubDate>Mon, 23 Sep 2024 22:19:41 +0000</pubDate>
</item>
<item>
<title>Problem z tkinter.Canvas</title>
<link>https://forum.pasja-informatyki.pl/595792/problem-z-tkinter-canvas</link>
<description>

&lt;p&gt;Witam,&lt;/p&gt;



&lt;p&gt;Chciałem zrobić przewijaną listę obrazów w tkinter, gdzie każdy obraz jest generowany ze strony pliku pdf. Obrazy ImageTk.PhotoImage ładuję na ttk.Label i później ten obiekt próbuję ładować na tk.Canvas.&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
    def __showPDFPreview(self) -&amp;gt; None:
        y: int = 0
        for page in self.__pdfHandler:
            photoLabel: ttk.Label = ttk.Label(self.__canvas, image=page)
            self.__canvas.create_window(100, y, window=photoLabel, anchor=&quot;nw&quot;)
            y += 150

        scroll: ttk.Scrollbar = ttk.Scrollbar(self.__canvas, orient=tk.VERTICAL, command=self.__canvas.yview)
        scroll.pack(side=tk.RIGHT, fill=tk.Y)
        self.__canvas.config(yscrollcommand=scroll.set, scrollregion=(0, 0, 0, y))&lt;/pre&gt;



&lt;p&gt;Sam plik pdfa odczytuję za pomocą biblioteki fitz, a konwersja na zdjęcie wygląda następująco:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
    def __convertPageToImage(self, item: int) -&amp;gt; ImageTk.PhotoImage:
        page: fitz.Page = self.__pdfObjShow.load_page(item)
        pix: fitz.Pixmap = page.get_pixmap()
        img: Image = Image.frombytes('RGB', (pix.width, pix.height), pix.samples)
        # img.show()

        return ImageTk.PhotoImage(img)&lt;/pre&gt;



&lt;p&gt;Jednak z jakiegoś powodu obrazy te nie pojawiają się na tk.Canvas. Obiekty ttk.Label znajdują się jako dzieci tk.Canvas ale obrazu brak.&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595792/problem-z-tkinter-canvas</guid>
<pubDate>Fri, 06 Sep 2024 10:39:21 +0000</pubDate>
</item>
<item>
<title>Zadanie Wycinek błąd w kodzie</title>
<link>https://forum.pasja-informatyki.pl/595710/zadanie-wycinek-blad-w-kodzie</link>
<description>

&lt;p&gt;Link do treści&amp;nbsp;zadania: &lt;a href=&quot;https://szkopul.edu.pl/problemset/problem/pAy3KzzMQ8Gh-LFsyL0tZts6/site/?key=statement&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://szkopul.edu.pl/problemset/problem/pAy3KzzMQ8Gh-LFsyL0tZts6/site/?key=statement&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Cześć, rozwiązuje zadanie Wycinek. Moim rozwiązaniem jest najpierw liczenie sum prefiksowych, potem zapisywanie kandydatów (liczb, które prefi[i]+s in prefi), a na końcu wybieram największa rożnice elementów prefi[i]+s - prefi[i].&amp;nbsp;Niestety nie mogę&amp;nbsp;wyłapać 2 błedów:&lt;/p&gt;



&lt;p&gt;Pierwszy&amp;nbsp;błąd polega na tym, że zamiast wypisywać BRAK, wypisuje mi liczbe całkowitą. Drugi błąd jest taki, że wynik jest większy niż powinien być.&amp;nbsp;Podejrzewam,&amp;nbsp; że chodzi o coś z sumami prefiksowymi.&lt;/p&gt;



&lt;p&gt;Mój kod w pythonie:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
n, s = map(int, input().split())
ciag = list(map(int, input().split()))
sum_pref = [0]
odp = 0
kandydaci = dict()
# liczenie sum prefiksowych
for i in range(n):
    sum_pref += [sum_pref[-1]+ciag[i]]

a = set(sum_pref) #Tworze seta, żeby było stałe wyszukiwanie sum_pref[i]+s w sumach pref.

# dodawanie kandydatów
for i in range(n):
    if sum_pref[i]+s in a:
        if sum_pref[i] not in kandydaci:
            kandydaci[sum_pref[i]] = i

# Szukanie najwiekszej róznicy sum_pref[i]-s - sum_pref[i]
odp = 0
for i in range(1, n+1):
    if sum_pref[i]-s in kandydaci:
        odp = max(odp, abs(i-kandydaci[sum_pref[i]-s]))

# Jeżeli odpowiedz jest rowna 0, to oznacza to, że nie ma żadnego takiego podciagu
if odp == 0:
    print('BRAK')
else:
    print(odp)&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595710/zadanie-wycinek-blad-w-kodzie</guid>
<pubDate>Fri, 30 Aug 2024 15:16:16 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Django - problem z wysyłanie maila (zapomnienie hasła)</title>
<link>https://forum.pasja-informatyki.pl/595593/django-problem-z-wysylanie-maila-zapomnienie-hasla?show=595594#a595594</link>
<description>Z tego co widzę, to masz zbyt stare Django na nowym Pythonie.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://stackoverflow.com/questions/77482831/smtp-starttls-got-an-unexpected-keyword-argument-keyfile&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://stackoverflow.com/questions/77482831/smtp-starttls-got-an-unexpected-keyword-argument-keyfile&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Próbowałeś guglować ten komunikat? :(</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595593/django-problem-z-wysylanie-maila-zapomnienie-hasla?show=595594#a595594</guid>
<pubDate>Mon, 19 Aug 2024 20:19:06 +0000</pubDate>
</item>
<item>
<title>Django edycja wpisu</title>
<link>https://forum.pasja-informatyki.pl/594708/django-edycja-wpisu</link>
<description>

&lt;p&gt;Witam&lt;/p&gt;



&lt;p&gt;Tworzę taką aplikację, gdzie w skrócie mówiąc dodaje się wpisy, usuwa je, edytuje itp., czyli taki podstawowy CRUD. Dodawanie i usuwanie wpisów działa dobrze, jednak problem pojawia się przy edytowaniu. Wpis zostaje zedytowany, ale stary wpis sprzed edycji też istnieje (czyli są 2 wpisy, a chciałbym tylko 1, po edycji). Czy ktoś może wie jak to naprawić?&lt;/p&gt;



&lt;p&gt;views.py - część pliku z funkcją do edycji wpisu:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
def entry_update(request, entry_id):
    entry = Entry.objects.get(id=entry_id)
    
    if request.method != 'POST':
        form = EntryForm(instance=entry)
    else:
        form = EntryForm(instance=entry, data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('/')
        
    context = {&quot;form&quot;: form}
    return render(request, &quot;my_app/site.html&quot;, context)&lt;/pre&gt;



&lt;p&gt;urls.py w katalogu aplikacji:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
urlpatterns = [
    (...)
    path('entry/&amp;lt;int:entry_id&amp;gt;/update', views.entry_update, name='entry-update')
]&lt;/pre&gt;



&lt;p&gt;forms.py:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
from django import forms
from .models import *

class EntryForm(forms.ModelForm):

    class Meta:
        model = Entry
        fields = '__all__'&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/594708/django-edycja-wpisu</guid>
<pubDate>Tue, 18 Jun 2024 07:50:20 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Określenie programowo CSS selectora (lub XPath) z kodu HTML na podstawie tekstu zawartego w tagu...</title>
<link>https://forum.pasja-informatyki.pl/594528/okreslenie-programowo-selectora-xpath-kodu-html-podstawie-tekstu-zawartego-tagu?show=594582#a594582</link>
<description>Masz na myśli takie działanie, jak podczas zdarzeń myszki, wykonywanych na danym elemencie, kiedy to przegladarka określa ścieżkę?&lt;br /&gt;
Jest to do zrobienia, ale wymaga dużo pracy i przemyślenia regexów, bo trzeba by napisać funkcje, która parsuje całego html do wystąpienia pożądanego elementu, uwzględniając - elementy html, ich klasy, idy itp. a pomijając pozostałe taki.&lt;br /&gt;
&lt;br /&gt;
Tylko muszę dobrze zrozumieć, tutaj masz w rust funkcje: &lt;a href=&quot;https://pastebin.com/vBacB88i&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://pastebin.com/vBacB88i&lt;/a&gt;&lt;br /&gt;
Nie gwarantuje, że każdy przypadek będzie stanie dobrze zbudować, trzeba by dalej modyfikować funkcje i poprawiać w oparciu o regexy.</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/594528/okreslenie-programowo-selectora-xpath-kodu-html-podstawie-tekstu-zawartego-tagu?show=594582#a594582</guid>
<pubDate>Thu, 13 Jun 2024 13:35:28 +0000</pubDate>
</item>
<item>
<title>Problem z znakami</title>
<link>https://forum.pasja-informatyki.pl/594429/problem-z-znakami</link>
<description>

&lt;p&gt;polskie znaki w vs codzie w terminalu&amp;nbsp;nie działają pytałem na githubie powiedzili że coś z code runnerem zadałem tam i od kilku dni nie ma odpowiedzi(nie ważne czy z code runnerem czy bez dalej nie działa) u góry z code runnerem na dole bez mam windowsa&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=1906333097130544719&quot; style=&quot;height:52px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=11928808303109869923&quot; style=&quot;height:125px; width:600px&quot;&gt;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/594429/problem-z-znakami</guid>
<pubDate>Fri, 07 Jun 2024 18:14:22 +0000</pubDate>
</item>
<item>
<title>Django TemplateDoesNotExist</title>
<link>https://forum.pasja-informatyki.pl/594403/django-templatedoesnotexist</link>
<description>

&lt;p&gt;Witam&lt;/p&gt;



&lt;p&gt;Mam szablon nadrzędny &lt;strong&gt;base.html&lt;/strong&gt; na poziomie katalogów powiedzmy &lt;strong&gt;projekt/aplikacja/&lt;/strong&gt;. Mam też plik &lt;strong&gt;index.html&lt;/strong&gt; na poziomie &lt;strong&gt;projekt/aplikacja/templates/aplikacja/&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Na samej górze w pliku &lt;strong&gt;index.html &lt;/strong&gt;mam wpis&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
{% extends &quot;aplikacja/base.html&quot; %}
&lt;/pre&gt;



&lt;p&gt;Gdy próbuję włączyć stronę główną wypisuje mi błąd&lt;/p&gt;



&lt;p&gt;&lt;em&gt;TemplateDoesNotExist at /&lt;/em&gt;&lt;/p&gt;



&lt;pre&gt;
&lt;em&gt;aplikacja/base.html&lt;/em&gt;&lt;/pre&gt;



&lt;p&gt;Jak można to naprawić? Przed zaaplikowaniem dziedziczenia z szablonu nadrzędnego wszystko działało dobrze.&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/594403/django-templatedoesnotexist</guid>
<pubDate>Thu, 06 Jun 2024 08:01:49 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Zmienne globalne ale w Pythonie</title>
<link>https://forum.pasja-informatyki.pl/594060/zmienne-globalne-ale-w-pythonie?show=594077#a594077</link>
<description>

&lt;p&gt;Jest jeszcze możliwy zapis bez użycia licznika&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
def ileParzystych(i=0):
    if i &amp;gt;= len(liczby):
        return 0
    if liczby[i] % 2 == 0:
        return 1 + ileParzystych(i + 1)
    else:
        return ileParzystych(i + 1)&lt;/pre&gt;



&lt;p&gt;choć jest on nieznacznie wolniejszy&lt;strong&gt;**&lt;/strong&gt; od wersji, którą zaproponował &lt;strong&gt;@Wiciorny&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
def ileParzystych(i, licznik=0):
    if i &amp;gt;= len(liczby):
        return licznik
    if liczby[i] % 2 == 0:
        licznik += 1
    return ileParzystych(i + 1, licznik)&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;** Test
&lt;br&gt;
- Procesor: Intel i7-9750H @ 2.60GHz
&lt;br&gt;
- Pamięć: 16GB @ 2400MHz
&lt;br&gt;
- Python 3.11.5&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
import time

liczby = [1, 5, 6, 3, 8, 7, 9, 6, 4, 5, 2, 3, 0] * 50

# Wersja z licznikiem
def ileParzystych_z_licznikiem(i=0, licznik=0):
    if i &amp;gt;= len(liczby):
        return licznik
    if liczby[i] % 2 == 0:
        licznik += 1
    return ileParzystych_z_licznikiem(i + 1, licznik)

# Wersja bez licznika
def ileParzystych_bez_licznika(i=0):
    if i &amp;gt;= len(liczby):
        return 0
    if liczby[i] % 2 == 0:
        return 1 + ileParzystych_bez_licznika(i + 1)
    else:
        return ileParzystych_bez_licznika(i + 1)

# Wersji z licznikiem
start_time = time.time()
ileParzystych_z_licznikiem()
time_z_licznikiem = time.time() - start_time

# Wersji bez licznika
start_time = time.time()
ileParzystych_bez_licznika()
time_bez_licznika = time.time() - start_time

print(f&quot;Czas wykonania wersji z licznikiem: {time_z_licznikiem:.10f} sekundy&quot;)
print(f&quot;Czas wykonania wersji bez licznika: {time_bez_licznika:.10f} sekundy&quot;)&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/594060/zmienne-globalne-ale-w-pythonie?show=594077#a594077</guid>
<pubDate>Sat, 25 May 2024 06:28:29 +0000</pubDate>
</item>
<item>
<title>siema robie asystenta głosowego z poradnika na yt mam błą a osoba na filmie nie kod jest taki sam</title>
<link>https://forum.pasja-informatyki.pl/593942/siema-robie-asystenta-glosowego-poradnika-mam-bla-osoba-filmie-nie-kod-jest-taki-sam</link>
<description>

&lt;pre class=&quot;brush:python;&quot;&gt;
import speech_recognition as sr
import webbrowser
import pyttsx3

engine = pyttsx3.init()
engine.setProperty('volume', 0.05)
engine.setProperty('rate', 190)

def recognise(msg=&quot;Powiedz coś!&quot;):
    r = sr.Recognizer()

    with sr.Microphone() as source:
        print(msg)
        audio = r.listen(source)
        try:
            recognised_text = r.recognize_google(audio, lenguage=&quot;pl-PL&quot;)
            print(&quot;powiedziałeś: &quot; + recognised_text)
            return recognised_text.lower()
        except sr.UnknownValueError:
            print(&quot;Powturz!&quot;)
        except sr.RequestError as e:
            print(&quot;Error:&quot;, e)


text = recognise()
word_list = text.split(&quot; &quot;
if (&quot;otwórz&quot; in text and word_list[0] == &quot;otwórz&quot;) or (&quot;uruchom&quot; in text and word_list[0] == &quot;uruchom&quot;):

    if &quot;przeglądarkę&quot; in text:
        engine.say(&quot;Otwieram przeglądarkę&quot;)
        engine.runAndWait()
        chrome_path = &quot;C:/ProgramData/Microsoft/Windows/Start Menu/Programs/chrome.exe %s&quot;
        webbrowser.get(chrome_path).open_new_tab(&quot;http://www.google.com&quot;)&lt;/pre&gt;



&lt;p&gt;błąd:Traceback (most recent call last):
&lt;br&gt;
&amp;nbsp; File &quot;c:\Users\kryst\OneDrive\Pulpit\j.a.r.v.i.s\j.a.r.v.i.s.py&quot;, line 25, in &amp;lt;module&amp;gt;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; text = recognise()
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;^^^^^^^^^^^
&lt;br&gt;
&amp;nbsp; File &quot;c:\Users\kryst\OneDrive\Pulpit\j.a.r.v.i.s\j.a.r.v.i.s.py&quot;, line 16, in recognise
&lt;br&gt;
&amp;nbsp; &amp;nbsp; recognised_text = r.recognize_google(audio, lenguage=&quot;pl-PL&quot;)
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
&lt;br&gt;
TypeError: recognize_legacy() got an unexpected keyword argument 'lenguage' pomorze ktoś&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593942/siema-robie-asystenta-glosowego-poradnika-mam-bla-osoba-filmie-nie-kod-jest-taki-sam</guid>
<pubDate>Sun, 19 May 2024 18:39:15 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: nauka pythona</title>
<link>https://forum.pasja-informatyki.pl/593772/nauka-pythona?show=593776#a593776</link>
<description>

&lt;p&gt;A sprawdź sobie tutaj:&amp;nbsp;
&lt;br&gt;
&lt;a href=&quot;https://www.py4e.com/lessons&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.py4e.com/lessons&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;
Masz generalnie&lt;strong&gt; wiele tematów&lt;/strong&gt;, w każdym temacie masz filmy z opracowaniem/instruktarzem nawet po kilka częsci jako &quot;pod-tematy&quot;. ( do tego zestawy slajdów, referencje do dokumentacji, dyskusje oraz narzędzia użyteczne).
&lt;br&gt;
Choćby i nawet tematyka web-serwisów:&amp;nbsp;
&lt;br&gt;
&lt;a href=&quot;https://www.py4e.com/lessons/servces&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.py4e.com/lessons/servces&lt;/a&gt; przytym&amp;nbsp;&lt;a href=&quot;https://www.py4e.com/html3/13-web&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.py4e.com/html3/13-web&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;
Co istotne, filmy są dobrze po angielsku, bardzo &quot;wyraźne&quot; nie hindi :) co pozwala na dobre tlumaczenie filmow na jezyk polski jesli potrzebujesz, automatycznie.&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593772/nauka-pythona?show=593776#a593776</guid>
<pubDate>Wed, 15 May 2024 17:08:34 +0000</pubDate>
</item>
<item>
<title>MVC obiektowy projekt bota Python</title>
<link>https://forum.pasja-informatyki.pl/593750/mvc-obiektowy-projekt-bota-python</link>
<description>

&lt;p&gt;Witam serdecznie&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Staram się prawidłowo uporządkować program w modelu mvc bota który łączy się z api metatrader i będzie handlował na giełdzie... taki jest pomysł&amp;nbsp; w praktyce jest sporo komplikacji gdyż wiele zmiennych i danych robi bałagan w kodzie , muszę go uporządkować . Nigdy nie pisałem wzorca mvc więc pytanie do Was czy prawidłowo to interpretuje:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drzewo plików -&lt;/p&gt;



&lt;p&gt;model&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&amp;nbsp; Config.py&lt;/p&gt;



&lt;p&gt;view&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&amp;nbsp; index.py&lt;/p&gt;



&lt;p&gt;controller&lt;/p&gt;



&lt;p&gt;&amp;nbsp; Controller.py&lt;/p&gt;



&lt;p&gt;joker.py&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;odpalam plik joker.py&amp;nbsp; tworzy się klasa controller&amp;nbsp;&amp;nbsp; która pobiera dane z modelu w tym przypadku info do logowania z Config.py i przekazuje do widoku&amp;nbsp; index.py&amp;nbsp;&amp;nbsp;&amp;nbsp; oczywiście modeli , kontrolerów i widoków będzie dużo chwilowo chodzi o poprawny mechanizm żeby dobrze zacząć &lt;img alt=&quot;smiley&quot; src=&quot;https://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/regular_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;smiley&quot;&gt;&lt;/p&gt;



&lt;p&gt;kod Config.py&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
class Config:
  
  login = 8686786  
  password = &quot;bleble&quot;
  server = 'bleble'&lt;/pre&gt;



&lt;p&gt;index.py&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
import MetaTrader5 as mt5


def show_data(data):

    mt5.initialize()
    mt5.login(data[0], data[1], data[2])

    account_info = mt5.account_info()
    print(account_info.margin_free)


    mt5.shutdown()
&lt;/pre&gt;



&lt;p&gt;Controller.py&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
from model.Config import Config
from view.index import show_data

class Controller:
    
    @staticmethod
    def getData():

        configData = Config()
        data = [configData.login, configData.password, configData.server]
        
         # Przekazanie danych do funkcji show_data w pliku index.py
        show_data(data)
        &lt;/pre&gt;



&lt;p&gt;joker.py&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
from controller.Controller import Controller


controller = Controller()
run = controller.getData()
&lt;/pre&gt;



&lt;p&gt;ogólnie chciałem to pisać w php ale Python ma biblioteki maszynowego uczenia&amp;nbsp; które chce spróbować wykorzystać&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593750/mvc-obiektowy-projekt-bota-python</guid>
<pubDate>Wed, 15 May 2024 07:19:59 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Ramka z szarymi napisami w pythonie tkinter</title>
<link>https://forum.pasja-informatyki.pl/593430/ramka-z-szarymi-napisami-w-pythonie-tkinter?show=593484#a593484</link>
<description>

&lt;p&gt;Chodzi Tobie o tzw. &lt;strong&gt;placeholder &lt;/strong&gt;jak np. w &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/placeholder&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;html&lt;/strong&gt;&lt;/a&gt;-u.&lt;/p&gt;



&lt;p&gt;Przykład (w oparciu o kod z &lt;a href=&quot;https://www.pythontutorial.net/tkinter/ttk-style/&quot; rel=&quot;nofollow&quot;&gt;Ttk Styles&lt;/a&gt;)&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
import tkinter as tk
from tkinter import ttk


class PlaceholderEntry(ttk.Entry):
    def __init__(self, master=None, placeholder=&quot;&quot;, **kwargs):
        super().__init__(master, **kwargs)
        self.placeholder = placeholder
        self.bind(&quot;&amp;lt;FocusIn&amp;gt;&quot;, self.on_entry_click)
        self.bind(&quot;&amp;lt;FocusOut&amp;gt;&quot;, self.on_focus_out)
        self.after(100, self.show_placeholder)

    def on_entry_click(self, event):
        if self.get() == self.placeholder:
            self.delete(0, tk.END)
            self.config(foreground='black')

    def on_focus_out(self, event):
        if not self.get():
            self.show_placeholder()

    def show_placeholder(self):
        self.delete(0, tk.END)
        self.insert(0, self.placeholder)
        self.config(foreground='grey')


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry('200x150')
        self.resizable(0, 0)
        self.title('Logowanie')

        placeholder_username = &quot;Adres e-mail&quot;
        placeholder_password = &quot;Hasło&quot;

        # UI options
        paddings = {'padx': 15, 'pady': 5}
        entry_font = {'font': ('Helvetica', 11)}

        username = tk.StringVar()
        password = tk.StringVar()

        # heading
        heading = ttk.Label(self, text='Logowanie ...', style='Heading.TLabel')
        heading.grid(column=0, row=0, pady=5, sticky=tk.N)

        # username
        username_entry = PlaceholderEntry(self, placeholder=placeholder_username, textvariable=username, **entry_font)
        username_entry.grid(column=0, row=1, sticky=tk.E, **paddings)

        # password
        password_entry = PlaceholderEntry(self, placeholder=placeholder_password, textvariable=password, **entry_font)
        password_entry.grid(column=0, row=2, sticky=tk.E, **paddings)

        # login button
        login_button = ttk.Button(self, text=&quot;Zaloguj się&quot;, style='LoginButton.TButton')
        login_button.grid(column=0, row=3, sticky=tk.EW, **paddings)

        
        # configure style
        self.style = ttk.Style(self)
        self.style.configure('TLabel', font=('Helvetica', 11))
        self.style.configure('TButton', font=('Helvetica', 11))
        self.style.configure('TEntry', foreground='grey')

        # heading style
        self.style.configure('Heading.TLabel', font=('Helvetica', 12))
        # login button style 
        self.style.configure('LoginButton.TButton', foreground='#6BB8E6', background='#6BB8E6', font=('Helvetica', 10))


if __name__ == &quot;__main__&quot;:
    app = App()
    app.mainloop()
&lt;/pre&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=6200315713024898135&quot; style=&quot;height:224px; width:253px&quot;&gt;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593430/ramka-z-szarymi-napisami-w-pythonie-tkinter?show=593484#a593484</guid>
<pubDate>Thu, 02 May 2024 22:57:00 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Wyszukiwarka Listbox</title>
<link>https://forum.pasja-informatyki.pl/593433/wyszukiwarka-listbox?show=593458#a593458</link>
<description>Tak.</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593433/wyszukiwarka-listbox?show=593458#a593458</guid>
<pubDate>Wed, 01 May 2024 17:52:23 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: ai w pythonie</title>
<link>https://forum.pasja-informatyki.pl/593405/ai-w-pythonie?show=593408#a593408</link>
<description>

&lt;p&gt;&amp;nbsp;Albo tworzysz prostego bota, któremu w ciągu podajesz odpowiedzi:&lt;/p&gt;



&lt;blockquote&gt;


&lt;p&gt;- Hej
&lt;br&gt;
- Nie rozumiem, podaj co mam na to odpowiedzieć
&lt;br&gt;
- Cześć, jestem botem
&lt;br&gt;
- Już rozumiem
&lt;br&gt;
- Hej
&lt;br&gt;
- Cześć, jestem botem&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;(No ale wtedy masz jedną odpowiedź do wiadomości specyficznej, coś jak bot discordowy)
&lt;br&gt;
Albo wykorzystujesz API Chat'a GPT, ale budujesz LLM, tak jak Wiciorny opisał&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593405/ai-w-pythonie?show=593408#a593408</guid>
<pubDate>Mon, 29 Apr 2024 19:18:48 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Jak zrobić rozciągany widget tkinter?</title>
<link>https://forum.pasja-informatyki.pl/593380/jak-zrobic-rozciagany-widget-tkinter?show=593393#a593393</link>
<description>&lt;a href=&quot;https://letmegooglethat.com/?q=resizable+tkinter+python&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://letmegooglethat.com/?q=resizable+tkinter+python&lt;/a&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593380/jak-zrobic-rozciagany-widget-tkinter?show=593393#a593393</guid>
<pubDate>Mon, 29 Apr 2024 06:23:25 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: próbuje uruchomić PyCharm ale wyskakuje cos takiego</title>
<link>https://forum.pasja-informatyki.pl/593373/probuje-uruchomic-pycharm-ale-wyskakuje-cos-takiego?show=593375#a593375</link>
<description>

&lt;blockquote&gt;


&lt;p&gt;projekt okaolnizer&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;upewnij się, że ścieżka nie ma spacji, bo to dziwnie wygląda?&lt;/p&gt;



&lt;p&gt;Też to może być związane z uprawnieniami wykonywania skryptów w SSL&amp;nbsp;
&lt;br&gt;
Spróbuj zrestartować PyCharm.&amp;nbsp;
&lt;br&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=zlxkfpMM0XU&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watch?v=zlxkfpMM0XU&lt;/a&gt;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593373/probuje-uruchomic-pycharm-ale-wyskakuje-cos-takiego?show=593375#a593375</guid>
<pubDate>Sun, 28 Apr 2024 09:35:29 +0000</pubDate>
</item>
<item>
<title>Najdłuższe/najkrótsze działanie algorytmu</title>
<link>https://forum.pasja-informatyki.pl/593337/najdluzsze-najkrotsze-dzialanie-algorytmu</link>
<description>

&lt;p&gt;Witam, mam podać przykładowe dane dla których algorytm zapisany w pythonie będzie działał najdłużej i najkrócej. Na początku myślałem że jeśli wszystkie dane będą równe R to kod będzie działał najdłużej(np: R=10,n=5,r=[10,10,10,10,10]) a dla danych mniejszych od R najkrócej (np R=10, n=5,r=[5,4,3,2,1]) ale zauważyłem że w drugim przypadku pętla nie potrzebnie wykonuje operacje ponieważ wszystkie dane w r zostały już sprawdzone i już zgłupiałem i nie wiem czy nie powinno być na odwrót.&lt;/p&gt;



&lt;p&gt;Dodatkowo nie mogę zmodyfikować algorytmu gdyż mam właśnie na jego podstawie wykonać prezentację.&lt;/p&gt;



&lt;p&gt;Opis algorytmu:&lt;/p&gt;



&lt;p&gt;Załóżmy, że mamy dowolnie dużą liczbę pudełek, każde o rozmiarze&amp;nbsp;&lt;em&gt;R&lt;/em&gt;, oraz&amp;nbsp;&lt;em&gt;n&lt;/em&gt;&amp;nbsp;przedmiotów o rozmiarach&amp;nbsp;r[1],r[2],…r[n][1],[2],…[]. Zakładamy, że&amp;nbsp;R≥r[1]≥r[2]…≥r[n]≥[1]≥[2]…≥[].&lt;/p&gt;



&lt;p&gt;Mamy włożyć przedmioty do pudełek, co najwyżej dwa do jednego pudełka.&lt;/p&gt;



&lt;p&gt;Algorytm:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
wynik := n;
for i := 1 to n do 
  if (i  &amp;lt;  wynik and r[i]+r[wynik] &amp;lt;= R) 
    wynik := wynik-1;&lt;/pre&gt;



&lt;p&gt;Kod:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
R=10
n=5
r=[5,4,4,3,2]


wynik=n
for i in range(n):
    if(i&amp;lt;wynik-1 and r[i]+r[wynik-1] &amp;lt;= R):
        wynik=wynik-1
print(wynik)
&lt;/pre&gt;



&lt;p&gt;Nie wiem czy czasami nie ma &quot;najszybszych/najdłuższych&quot; danych ponieważ długość działania pętli jest uzależniona przez n więc dla jakich kolwiek r[n] algorytm będzie się wykonywał n razy&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593337/najdluzsze-najkrotsze-dzialanie-algorytmu</guid>
<pubDate>Thu, 25 Apr 2024 13:36:43 +0000</pubDate>
</item>
<item>
<title>Triangulacja Delaunay’a algorytmem Bowyera-Watsona</title>
<link>https://forum.pasja-informatyki.pl/593290/triangulacja-delaunaya-algorytmem-bowyera-watsona</link>
<description>

&lt;p&gt;Napisałam funkcję wykonującą algorytm triangulacji Delaunay'a metodą Bowyera-Watsona. Funkcja tworzenie_trojkata tworzy mi super trojkat i dziala poprawnie (zwraca super trojkat i jego boki), a funkcja plik wczytuje mi z pliku punkty i zwraca je. Funkcja if_inside zwraca True gdy gdy dany punkt znajduje się w okregu opisanym na danym trojkacie i Flase w przeciwnym wypadku, a funkcja wizualizacja_trojkata wizualizuje mi trojkat za pomoca matplotlib. No i korzystam z klasy trojkat zawierajacej trzy elementy, czyli punkty A, B i C. Co jest nie tak z moją funkcją poniżej, że nie wykonuje tego algorytmu poprawnie tylko tworzy mi za duzo przecinajacych sie linii?&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
def create():
    triangle, bok1, bok2, bok3 = tworzenie_trojkata()
    punkty = plik()
    triangles = []
    t1 = trojkat(punkty[0], triangle.A, triangle.B)
    t2 = trojkat(punkty[0], triangle.A, triangle.C)
    t3 = trojkat(punkty[0], triangle.B, triangle.C)
    punkty.pop(0)
    print(punkty)
    triangles.append(t1)
    triangles.append(t2)
    triangles.append(t3)
    for i in range(len(punkty)-1):
        triangles_to_remove = []
        triangles_to_add = []
        for tr in triangles:
            if(if_inside(tr, punkty[i]) == True):
                triangles_to_add.append(trojkat(punkty[i], tr.A, tr.B))
                triangles_to_add.append(trojkat(punkty[i], tr.A, tr.C))
                triangles_to_add.append(trojkat(punkty[i], tr.B, tr.C))
                triangles_to_remove.append(tr)

        for t in triangles_to_remove:
            triangles.remove(t)
        for t in triangles_to_add:
            triangles.append(t)
    for t in triangles:
        if(t.A == triangle.A or t.A == triangle.B or t.A == triangle.C
                or t.B == triangle.A or t.B == triangle.B or t.B == triangle.C
                or t.C == triangle.A or t.C == triangle.B or t.C == triangle.C):
            triangles.remove(t)

    for t in triangles:
        wizualizacja_trojkata(t)
    plt.show()&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593290/triangulacja-delaunaya-algorytmem-bowyera-watsona</guid>
<pubDate>Tue, 23 Apr 2024 17:31:44 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Złożoność obliczeniowa algorytmy</title>
<link>https://forum.pasja-informatyki.pl/593041/zlozonosc-obliczeniowa-algorytmy?show=593043#a593043</link>
<description>

&lt;p&gt;Załóżmy, że to Python ze względu na to, że pytanie umieszczono w takim dziale.&lt;/p&gt;



&lt;p&gt;Zazwyczaj to będzie O(n), ponieważ trzonem tego kodu jest iterowanie po n-elementowej tablicy. Innymi słowy złożność jest linowa. W linii 5. odwołujemy się do kontenera po indeksie. I to może być klasyczna pythonowa lista lub słownik. W przypadku obu zazwyczaj wyszukiwanie ma złożność O(1), czyli nie zależy od rozmiaru kontenera, a więc ostatecznie O(n * 1) da nam O(n). Jeśli jednak r jest słownikiem to jest on zaimplementowany jako tablica mieszająca. Wyszukiwanie w niej elementów, gdy znamy indeks, ma zwykle złożność O(1), ale w pesymistycznym przypadku może mieć O(m), gdzie m jest rozmiarem słownika.&lt;/p&gt;



&lt;p&gt;Zatem podsumowując, w zależności czym jest r złożność obliczeniowa wynosi:&lt;/p&gt;



&lt;ul&gt;
	

&lt;li&gt;O(n*1) = O(n) - zwykle tak będzie gdy r = dict, zawsze tak będdzie gdy r = list&lt;/li&gt;
	

&lt;li&gt;O(n*m) - pesymistyczny wariant gdy r = dict&lt;/li&gt;
&lt;/ul&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/593041/zlozonosc-obliczeniowa-algorytmy?show=593043#a593043</guid>
<pubDate>Wed, 17 Apr 2024 05:53:15 +0000</pubDate>
</item>
<item>
<title>Odpowiedź: Kompilowanie paru plików do jednego pliku w pythonie</title>
<link>https://forum.pasja-informatyki.pl/592855/kompilowanie-paru-plikow-do-jednego-pliku-w-pythonie?show=592917#a592917</link>
<description>

&lt;p&gt;Nie wiem czy dobrze rozumiem, ale nie możesz tego zrobić z pomocą&amp;nbsp;&amp;nbsp;&lt;strong&gt;PyInstaller &lt;/strong&gt;?&amp;nbsp;&amp;nbsp;PyInstaller automatycznie dołącza wszystkie wymagane pliki do pliku wykonywalnego, tworząc samowystarczalną apke.
&lt;br&gt;

&lt;br&gt;
Np. mając wszystkie pliki w jednym folderze&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
pyinstaller --onefile twoj_program.py
&lt;/pre&gt;



&lt;p&gt;Powyższa komenda spowoduje utworzenie pliku wykonywalnego `program.exe` w folderze `którym wzkazałeś`, który zawierać będzie całą twoją aplikację (wraz z dodatkowymi plikami jeśli trzeba) w jednym pliku.
&lt;br&gt;

&lt;br&gt;
Z drugiej strony jeśli masz 2 exe i chcesz tylko 1 exe, użyj&amp;nbsp;&quot;wrappera&quot;, który będzie uruchamiał poszczególne pliki exe w odpowiedniej kolejności.&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
import subprocess

# Lista plików
pliki_exe = ['plik1.exe', 'plik2.exe', 'plik3.exe']


def uruchom_exe(plik):
    subprocess.Popen(plik, shell=True)

# wszsytkie pliki tu uruchomisz z jednego pliku
for plik in pliki_exe:
    uruchom_exe(plik)&lt;/pre&gt;



&lt;p&gt;Teraz możesz to połączyć z tym&amp;nbsp; co pisałem i skompilować ten plik Pythona wraz z plikami exe za pomocą PyInstallera, do jednego pliku plik exe.&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:bash;&quot;&gt;
pyinstaller --onefile twoj_wrapper_plik.py
&lt;/pre&gt;



&lt;p&gt;
&lt;br&gt;
Teraz mozesz to połączyć z ZDJĘCIAMI ETC, tworzysz 1 plik z folderu ... gdzie masz plik exe i zdjęcia, pliki tekstowe etc.&amp;nbsp;
&lt;br&gt;
Tworzysz z tego 1 plik, potem dołączasz go do wrapper- i łączysz z innymi plikami exe, a nastepnie łączysz w onefile i masz powiązane pliki wszystkie.&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/592855/kompilowanie-paru-plikow-do-jednego-pliku-w-pythonie?show=592917#a592917</guid>
<pubDate>Sun, 14 Apr 2024 09:00:24 +0000</pubDate>
</item>
<item>
<title>lista dysków w pythonie</title>
<link>https://forum.pasja-informatyki.pl/592833/lista-dyskow-w-pythonie</link>
<description>Mam Pytanie Jak Zrobić Listę Dysków W Pythonie D:/ C:/ Ale Bez Pendrivów I Wirualnych Dysków Jak Np. Google Drive?</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/592833/lista-dyskow-w-pythonie</guid>
<pubDate>Fri, 12 Apr 2024 19:09:30 +0000</pubDate>
</item>
<item>
<title>Wyłącznie Komputera Bez Cmd W Pythonie</title>
<link>https://forum.pasja-informatyki.pl/592774/wylacznie-komputera-bez-cmd-w-pythonie</link>
<description>

&lt;p&gt;Potrzebuje Kodu Który By Wyłączał Komputer Bez Pokazywania Okna Cmd Jak W Tym Przypadku:&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
import os
SEKUNDY = 15
Komenda = (f&quot;shutdown -s -t {SEKUNDY}&quot;)
os.system(Komenda)
&lt;/pre&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/592774/wylacznie-komputera-bez-cmd-w-pythonie</guid>
<pubDate>Wed, 10 Apr 2024 21:17:03 +0000</pubDate>
</item>
</channel>
</rss>