Zdjęcie w tle
Python

Społeczność

Python

335

Dla programistów Python

#kiciochpyta o #python i #json
początkujący level. - PROŚBA O POMOC w wyjaśnieniu dziwnego działania programu...
Tworzę dla treningu grę tekstową typu MUD, ćwiczę sobie tworzenie klas, funkcji i innych takich.
https://github.com/yourij/MUD_GAME
Etap rozgrzebanego kodu więc prosze o zrozumienie. Chwilowo repozytorium jest publiczne na potrzeby tego posta.
W dużym skrócie (wprowadzenie).
Jesteśmy na planszy 3x3 pola (współrzędne pól x=0, 1 lub 2 i y=0, 1 lub 2). Zaczynamy na środku.
Możemy po planszy chodzić, gadać z NPCami, w karczmie zjeść obiad, uratować księżniczkę itp...
Żeby to zrobić, trzeba pójść do wiedźmy, rozwiązać zadanie, otrzymać od niej klucz i z kluczem udać się na pole, gdzie jest księżniczka, otworzyć kluczem bramkę i koniec...
______PROBLEM______:
Początkowo teksty postaci trzymałem w pliku talking.py ale chciałem zaznajomić się z JSONem i stąd modyfikacja, gdzie wiedźma swoje teksty (częściowo) bierze z pliku talking.json
Od czasu tej modyfikacji pseudo-gra zawiesza się po otrzymaniu poleceń od gracza. Tzn żeby przejść dalej trzeba wcisnąć ekstra enter.
Dla przykładowego karczmarza czy też księżniczki (gdzie teksty są jeszcze po staremu) problem nie występuje.
plik talking.py
przykładowy fragment kodu, który dziwnie działa:
if (u_inp=='T' or u_inp=='t'): # T = gadaj z wiedzmą
for phrase in my_json["phrases"]:
u_inp=input(phrase["witch_gives_apple"]) # przyjmij input drukując tekst mówiony przez wiedżmę
kod, który działa poprawnie:
elif (playerPos == innKeeperPos): # podobny fragment rozmowy z innym NPCem bez udziału JSONa
u_inp=input(inn_hello)
if (u_inp=='P' or u_inp=='p'):
print(inn_dish1)
(screen z gry... nie śmiać się, proszę)
788784f0-3123-4f50-ae71-e29186328878
vrkr

@yourij Trochę spekuluję, ale pewnie dzieje się tak dlatego, że używasz funkcji input() niezbyt zgodnie z przeznaczeniem: argumentem tej funkcji jest prompt czyli tekst, który jest wyświetlany zanim user wpisze z konsoli jakąś wartość. Dlatego potrzebujesz wciskać ENTER - bo zatwierdzasz pusty ciąg znaków.


https://docs.python.org/3/library/functions.html#input

yourij

@vrkr ok ma to sens... input jest bo odczytuję czasem T/N i inne odpowiedzi gracza. Sprawdzę kod, czy się wiesza w tekstach bez oczekiwanej odpowiedzi ale fajny trop, dzięki...

yourij

@vrkr dziękuję... działa.

Gdy zmieniałem kod po przeniesieniu dialogów wiedźmy do pliku json pierwszy fragment (gdzie jest input potrzebny) skopiowałem dalej i zapomniałem zamienić w niektórych miejscach u_inp=input(dialog) na print(dialog).

Zaloguj się aby komentować

Da się zaimplementować jakoś postinkrementacje w #python albo jest jakaś gotowa biblioteka z tym? Frustruje mnie pisanie x += 1 zamiast x++.
#naukaprogramowania
miej_nos_na_pol_mordy

@trojkat a co trudnego jest w uzyciu x++? Jest to i proste i czytelne i co najwazniejsze szybsze niz x += 1

Zaloguj się aby komentować

Muszę to z siebie wyrzucić bo wkurwia mnie ten język czasami.
Cały Internet huczy od tego, że do funkcji przekazuje się tylko wartości a nie referencję. A ja po raz kolejny nadziewam się na to, że kiedy przekazuję do swojej metody nazwę innego obiektu to nic nie działa jak powinno i okazuje się, że w sumie zadziałało to jak wskaźnik.
No i to 'del' które nie usunie obiektu dopóki przechowuję go w innych miejscach, no nie wytrzymam.
( ͡° ͜ʖ ͡°)
Jak macie do polecenia jakieś książki które mi to wyjaśnią to poproszę.
Trochę #gownowpis i trochę #zalesie
kazik117

Cały Internet huczy od tego, że do funkcji przekazuje się tylko wartości a nie referencję.


@pansiano A kto tak srogo Cię oszukał?

pansiano

@kazik117 Kiedyś na szybko goglowałem jak przekazać adres zamiast wartości i zapamiętałem wrażenie 'niedasie'. Cóż, człowiek się uczy na swoich błędach

Zaloguj się aby komentować

Siema. Proszę podpowiedzcie mi co tutaj jest źle? już nie wiem sam
9862475d-eb8e-42cb-b873-99700ad05f9d
saqala-bilaabayso

@Jokohama W takim razie oprócz wywalenia 10 linii trzeba jeszcze podawanie najmniejszej liczby dać poza pętlę (tak jak masz w rozwiązaniu ćwiczenia nr 1). W zdjęciu rozwiązanie oparte na Twoim. Powodzenia w nauce

4cb2ead2-613e-4516-8383-11545d86a8f9
Jokohama

@saqala-bilaabayso Dzięki! Właśnie potem mnie olśniło, że podanie min i max liczby musi być na końcu. Ale uważam, że robienie błędów to forma nauki. Miłej soboty!

dsol17

@korpowyrobnik No fakt, powinniśmy wszyscy najpierw zapytać co on z tym kodem chce zrobić.

Zaloguj się aby komentować

Hej. Polećcie mi jakieś ćwiczenia do #python. Uczę się teraz z takiej jednej, ale ćwiczeń na rozdział kilka. A chciałbym sobie utrwalić wszystko tak jak trzeba. Najlepiej z podziałem na rozdziały
VS code jak oceniacie, dobra na początek? (wady/zalety, może polecacie coś innego dla początkującego kuca)
Skąd najczęściej czerpaliście wiedze jako samouki (doświadczonych #programista15k po studbazie też proszę o wypowiedź może ktoś posiada fajne materialy/linki/tytuły książek)?
#python
maly_ludek_lego

@q4py ja uzywam/uzywalem vima/emacsa, bo nie lubie przelaczac sie miedzy mysza i klawiatura, ale co kto woli.

pyroxar

@q4py książka od zera do maszyn lernign python. raz po polsku, raz po angielsku. zależy jaki dzień miał koleś co ją ciągle piszę. jakiś Polak.

https://python.astrotech.io/

pyroxar

@q4py książka od zera do maszyn lernign python. raz po polsku, raz po angielsku. zależy jaki dzień miał koleś co ją ciągle piszę. jakiś Polak.

https://python.astrotech.io/

Zaloguj się aby komentować

Pytanie bardzo na poważnie. Jakiego języka programowania zacząć się uczyć, jeśli nie miałem zbyt wiele do czynienia z programowaniem? python czy java? A może co innego?
#python #java #programowanie #hejjterszukapracy
ar4s_pl

@Jokohama duże środowisko na początku nauki fajnie wygląda ale nie napisze za Ciebie kodu. Weź sobie ogarnij coś lekkiego typu VS Code czy Sublime Text do Pythona czy webdev wystarczy. Skup się na pisaniu, staraj się zrozumieć jak wszystko uruchomić z linii poleceń niż wszystko klikać w edytorze (bo to z łatwością będziesz mógł zautomatyzować w przyszłości) - niech system będzie twoim IDE

Jokohama

@ar4s_pl wybrałem pythona do nauki. Wydaje mi się bardzo intuicyjny i łatwy. Zobaczymy co z tego będzie;)

GetBetterSoon

@BananowyKoko

to zacznij się uczyć pisać w jakimś języku


wlasnie on o to pyta, odpowiedzia jest Python

Zaloguj się aby komentować

Dwanaście niezbędnych składników aplikacji webowych
Tym razem nie tylko dla pythonowców.
Utrzymanie i rozwój aplikacji potrafi przysporzyć wielu problemów, zwłaszcza jeśli nie zadbamy o odpowiednią architekturę kodu oraz higienę pracy z kodem. Mnogość przeróżnych podejść do tworzenia aplikacji w dzisiejszych czasach też potrafi doprowadzić do bólu głowy: DDD, TDD, BDD, DRY, WET, KISS i masa innych akronimów prowadzi starcie w naszych głowach, kiedy jeszcze nie wiemy dokładnie w jaką stronę będzie zmierzał projekt.
Poniższy artykuł, a właściwie cała strona, opisuje dwanaście składników aplikacji webowych, które pozwolą nam uniknąć najbardziej fundamentalnych problemów w czasie wdrażania oraz utrzymania oprogramowania. W skrócie są to:
  1. Codebase - jedno repozytorium w systemie kontroli wersji, wiele wdrożeń
  2. Dependencies - jasno definiuj i izoluj zależności
  3. Config - przechowuj konfigurację w środowisku zamiast w kodzie
  4. Backing services - traktuj usługi zewnętrzne (np. bazy danych, storage, integracje) jako zasoby
  5. Build, release, run - bezwzględnie rozdzielaj od siebie etapy budowania i uruchamiania aplikacji
  6. Processes - uruchamiaj aplikację jako jeden lub więcej bezstanowych procesów
  7. Port binding - udostępniaj usługi poprzez dowiązanie portów
  8. Concurrency - skaluj aplikację w modelu procesowym
  9. Disposability - maksymalizuj niezawodność zapewniając szybki start i łagodne zamykanie procesów
  10. Dev/prod parity - środowiska lokalne, testowe oraz produkcyjne powinny być do siebie tak podobne, jak tylko możliwe
  11. Logs - traktuj logi jako strumienie zdarzeń
  12. Admin processes - uruchamiaj zadanie administracyjne jako jednorazowe procesy
Zdaję sobie sprawę, że te opisy są bardzo ogólne, ale jeśli chcecie, mogę przygotować serię, w której dokładniej omówię każdy z punktów. Tymczasem, po więcej szczegółów możecie sięgnąć na stronę The Twelve-Factor App .
Swiniotygrys

@sebkek poprosimy! na pewno ktoś skorzysta

Zaloguj się aby komentować

Jak skonfigurować logowanie zdarzeń w Pythonie?
Temat traktowany po macoszemu przez wielu programistów. Logowanie zdarzeń może jednak dostarczyć nieocenionej pomocy, kiedy zachodzi konieczność prześledzenia zdarzeń na środowiskach produkcyjnych, gdzie nie mamy możliwości debugowania aplikacji.
Autor omawia, wraz z przykładami, najważniejsze zagadnienia związane z modułem logging w Pythonie:
  • dobre praktyki
  • poziomy logowania
  • konfigurację formaterów, handlerów i loggerów
a w międzyczasie opisuje jak to wszystko działa i jak się ze sobą łączy.
Lekturę polecam każdemu, niezależnie od tego, przy jak dużym projekcie pracujecie - logowanie zdarzeń jest przydatne w każdej skali, zwłaszcza jeśli je dobrze skonfigurujemy i używamy go z głową: Logging in Python like a PRO

Zaloguj się aby komentować

Jak generować piękne, czytelne tracebacki w Pythonie?
Poniższy artykuł pokazuje, jak samemu można zmienić sposób wyświetlania tracebacków w Pythonie, a także pokazuje kilka przykładowych paczek, które zrobią to za nas.
W dużym skrócie, wystarczy stworzyć funkcję z odpowiednimi parametrami i przypisać ją do sys.excepthook.
Creating Beautiful Tracebacks with Python's Exception Hooks

Zaloguj się aby komentować

Czy twój kod jest zbyt skomplikowany?
Poniższy artykuł omawia dwie metryki złożoności kodu, które mają bezpośredni wpływ na naszą zdolność zrozumienia, co dany kod właściwie robi:
  • Złożoność cyklomatyczna - określana jest liczbą rozgałęzień i punktów decyzyjnych w funkcji
  • Złożoność poznawcza - określana jest liczbą punktów decyzyjnych oraz ilością stopni zagnieżdżenia w funkcji
Pisząc kod, powinno nam zależeć na tym, aby obie te metryki były jak najniższe, dzieki czemu utrzymanie takiego kodu w przyszłości, a także zrozumienie go, będzie dużo prostsze.
Jeśli chcecie poznać te metryki lepiej, polecam krótką lekturę: Is your code too complicated?
lgbt

Polecam również ten plugin zapiąć sobie do testowania złożoności https://pypi.org/project/pytest-mccabe/

najlepiej przed tym jak jeszcze jednostkowe i integracyjne testy są odpalane na CI - np jako element testowania statycznego kodu

Zaloguj się aby komentować

Jak używać PyYAML, żeby uniknąć jego pułapek?
Informacje na ten temat znajdziemy w artykule Tips that may save you from the hell of PyYAML .
Artykuł jest krótki, na kilka minut czytania, ale w skrócie:
  • Zawsze używaj safe_load/safe_dump
  • Utrzymuj oryginalny porządek w kluczach (load/dump)
  • Zapewnij prawidłowe wcięcia (dump)
  • Używaj czytelnego UTF-8 na wyjściu (dump)
  • Nie potrzebujesz default_flow_style (dump)

Zaloguj się aby komentować

Poprzednia