Wątek przeniesiony 2020-03-08 22:18 z Newbie przez furious programming.

Gra MMORPG – kilka pytań

0
definitions = [
    'Mechanical advantage is a measure of the force amplification achieved by using a tool, mechanical device or machine system. The device preserves the input power and simply trades off forces against movement to obtain a desired amplification in the output force. The model for this is the law of the lever. Machine components designed to manage forces and movement in this way are called mechanisms.[1] An ideal mechanism transmits power without adding to or subtracting from it. This means the ideal mechanism does not include a power source, is frictionless, and is constructed from rigid bodies that do not deflect or wear. The performance of a real system relative to this ideal.',
    'Ein Kraftwandler ist eine mechanische Anordnung zur Veränderung einer Kraft in Bezug auf ihren Angriffspunkt, ihre Richtung oder ihren Betrag. Die einfachsten Kraftwandler sind Seile, Stangen, Rollen, schiefe Ebenen und Hebel. Dies sind gleichzeitig die grundlegenden einfachen Maschinen.',
    'La ventaja mecánica es una magnitud adimensional que indica cuánto se amplifica la fuerza aplicada usando un mecanismo (ya sea una máquina simple, una herramienta o un dispositivo mecánico más complejo) para contrarrestar una carga de resistencia.',
    'Cette notion s\'applique de manière évidente dans les systèmes de poulies et de leviers. Elle est centrale dans les systèmes de freinage : on applique une petite force sur un parcours important et l\'on obtient une force importante transmise au système de freinage pour une course de faible distance.'  
    ]
 
for definition in definitions:       # definition to pojedynczy element z listy definitions
 
    words = definition.split(' ')    # zmienna words to zbiór wszystkich definition z listy definitions podzielonych ze względu na spację
    short_text = ''                  # zmienna short_text ma pustą wartość
    counter = 0                      # wartość zmiennej counter wynosi 0
 
    for word in words:               # word to pojedyncza wartość/element z listy words czyli z listy której wartości są podzielone ze względu na spację
 
        short_text += word+' '       # short_text = short_text + word+spacja     <--- tutaj word to pojedyncze słowa z listy words 
        counter += 1                 # counter = counter + 1  <-----      wartość counter zwiększa się o 1 
 
        if counter>=8:               # jezeli counter jest większe lub równe 8 to:
            print(short_text)        # wyświetl wartość short_text
            break                    # przerywa działanie pętli if i przechodzi do wewnętrznej pętli for <---Dobrze rozumiem?

        
# wynik to:
# Mechanical advantage is a measure of the force           <----Skąd po wykonaniu tej lini program wie że ma zacząć następną linię od słowa Ein?
# Ein Kraftwandler ist eine mechanische Anordnung zur Veränderung      <----Skąd po wykonaniu tej lini program wie że ma zacząć następną linię od słowa La?
# La ventaja mecánica es una magnitud adimensional que          itd...
# Cette notion s'applique de manière évidente dans les           

Dobrze rozumiem? Wszystkie komentarze ja pisałem, są tam pytania, stwierdzenia i moje spostrzeżenia :)

Edit: W dolnych komenatarzach mam pytanie dotyczące przechodzenia do następnej linijki.

0

Niemal tak. Błędy są w szczegółach, ale jednak ze względów edukacyjnych myślę, że warto wytłumaczyć:

words = definition.split(' ')  # tutaj masz nie *zbiór*, ale *listę* tych słów — w Pythonie są też i {zbiory} oprócz [list], więc być może warto być dokładniejszym
short_text = ''  # nie ma „pustej wartości”, cokolwiek by to miało oznaczać (None?), ale jest pustym stringiem, więc pustą listą
break  # wychodzi do *zewnętrznej* pętli for, ale to chyba przejęzyczenie było…
0
Althorion napisał(a):

Niemal tak. Błędy są w szczegółach, ale jednak ze względów edukacyjnych myślę, że warto wytłumaczyć:

words = definition.split(' ')  # tutaj masz nie *zbiór*, ale *listę* tych słów — w Pythonie są też i {zbiory} oprócz [list], więc być może warto być dokładniejszym
short_text = ''  # nie ma „pustej wartości”, cokolwiek by to miało oznaczać (None?), ale jest pustym stringiem, więc pustą listą
break  # wychodzi do *zewnętrznej* pętli for, ale to chyba przejęzyczenie było…

Hmmm...jeśli chodzi o break to według mnie przechodzi do wewnętrznej pętli for bo zewnętrzna pętla for to ta wyżej, a wewnętrzna pętla for to ta niżej "wcięta w prawo" względem tej pętli for wyżej. Mam rację?
Czyli po break nasz program przechodzi do pętli "for word in words:" a nie do zewnętrznej pętli "for definition in definitions:".

Czy jednak po poleceniu break program przechodzi do pętli "for definition in definitions:"????

1

Tak. break po prostu „wyskakuje” z pętli — jeden raz. Czyli jak masz „po prostu” pętlę, to wyjdzie z niej całkiem, jak jesteś w pętli w pętli, to przejdzie do tej najwyższej, a jak siedzisz w pętli w pętli w pętli, to do tej środkowej itd. Zawsze jedną „w górę”.

0

Niektore jezyki pozwalaja mowic na czym konkretnie chcemy break/continue

loop@ for (i in 1..100) { // loop 1
    for (j in 1..100) { // loop 2
        if (j == 10) continue@loop
    }
}

ale nie wiem czy w Pythonie sa labele

0

Nie ma.

0
definitions = [
    'Mechanical advantage is a measure of the force amplification achieved by using a tool, mechanical device or machine system. The device preserves the input power and simply trades off forces against movement to obtain a desired amplification in the output force. The model for this is the law of the lever. Machine components designed to manage forces and movement in this way are called mechanisms.[1] An ideal mechanism transmits power without adding to or subtracting from it. This means the ideal mechanism does not include a power source, is frictionless, and is constructed from rigid bodies that do not deflect or wear. The performance of a real system relative to this ideal.',
    'Ein Kraftwandler ist eine mechanische Anordnung zur Veränderung einer Kraft in Bezug auf ihren Angriffspunkt, ihre Richtung oder ihren Betrag. Die einfachsten Kraftwandler sind Seile, Stangen, Rollen, schiefe Ebenen und Hebel. Dies sind gleichzeitig die grundlegenden einfachen Maschinen.',
    'La ventaja mecánica es una magnitud adimensional que indica cuánto se amplifica la fuerza aplicada usando un mecanismo (ya sea una máquina simple, una herramienta o un dispositivo mecánico más complejo) para contrarrestar una carga de resistencia.',
    'Cette notion s\'applique de manière évidente dans les systèmes de poulies et de leviers. Elle est centrale dans les systèmes de freinage : on applique une petite force sur un parcours important et l\'on obtient une force importante transmise au système de freinage pour une course de faible distance.'  
    ]
 
for definition in definitions:       # definition to pojedynczy element z listy definitions
  
    words = definition.split(' ')    # zmienna words to zbiór wszystkich definition z listy definitions podzielonych ze względu na spację
    short_text = ''                  # zmienna short_text ma pustą wartość
    counter = 0                      # wartość zmiennej counter wynosi 0
 
    for word in words:               # word to pojedyncza wartość/element z listy words czyli z listy której wartości są podzielone ze względu na spację
 
        short_text += word+' '       # short_text = short_text + word+spacja     <--- tutaj word to pojedyncze słowa z listy words 
        counter += 1                 # counter = counter + 1  <-----      wartość counter zwiększa się o 1 
 
        if counter>=8:               # jezeli counter jest większe lub równe 8 to:
            print(short_text)        # wyświetl wartość short_text
            break                    # przerywa działanie pętli if i przechodzi do wewnętrznej pętli for <---Dobrze rozumiem?

# wynik to:
# Mechanical advantage is a measure of the force           <----Skąd po wykonaniu tej lini program wie że ma zacząć następną linię od słowa Ein?
# Ein Kraftwandler ist eine mechanische Anordnung zur Veränderung      <----Skąd po wykonaniu tej lini program wie że ma zacząć następną linię od słowa La?
# La ventaja mecánica es una magnitud adimensional que          itd...
# Cette notion s'applique de manière évidente dans les           

linia 8: correct. definition to jest ten długi napis gdzie słowa są oddzielone spacjami
linia 10: no nie za bardzo, words to tablica słów, która została utworzona z długiego napisu przez podzielenie go w miejscach gdzie jest spacja
linia 21: if to nie jest pętla i jej się nie przerywa, jedynie while albo for można przerwać

Działanie programu jest następujące:

  1. w zewnętrznej pętli for wybierane są poszczególne definicje z listy definicji
  2. w tej pętli wybrana definicja jest podzielona na słowa .split(' ') (to może nie zadziałać jak trafią się np. podwójne spacje)
  3. licznik jest zerowany i krótki pomocniczy napis ustawiony na pusty
  4. w wewnętrznej pętli pobiera się poszczególne słowa z tablicy i dokleja się je do krótkiego napisu oraz zwiększa licznik o 1
  5. jak licznik osiągnie wartość 8, to następuje wyświetlenie krótkiego napisu (8 słów) i przerwanie wewnętrznej pętli
  6. jak wewnętrzna pętla zostanie przerwana to pobierany jest kolejna definicja i wszystko zaczyna się powtórnie, czyli wróć do punktu 2
0

Dziękuję Wam za pomoc. Naszły mnie wątpliwości czy to ze mną jest coś nie tak czy jednak niektórzy tak mają. po prostu zdarza się tak że żeby zrozumieć o co chodzi w programie muszę go przeanalizować po 3-4 razy żeby go zrozumieć. Zdarza się że kasuje linijkę kodu i sprawdzam jak program działa bez niej i dlaczego ona tam jest potrzebna.

0

Mi się wydaje, że to dosyć normalne. Ile masz lat?

0

25 lat:) Podobno jeszcze nie jest za późno żeby nauczyć się jakiegoś języka programowania:)

0
dictionary={'A':'80%-10%','B':'60%-80%','C':'50-60%','D':'less then 50%'}  
for word in dictionary.keys():    # Dla każdego słowa w dictionary.keys<---no właśnie tego nie rozumiem zabardzo. keys to klucze a word to wartości tak ? Czyli keys to A,B,C,D a word to 80%-10%,              60%-80% itd...tak??? 
    print(word,'-',dictionary[word])    # Tutaj wyświetli słowo dla każdego klucza czyli klucze potem myślnik i wartości kluczy tak ?

Dobrze rozumiem ? Moje pytania są w komentarzach.

0

Masz słownik. Słownik posiada Klucz i Wartość.

Za pomocą klucza mówisz do jakiej wartości chcesz się dostać.

.keys() mówi, że chcesz lista kluczy.

Robisz pętle na nich czyli zmienna word przyjmuje po kolei każdy Klucz z listy

Potem wyświetlasz word (czyli klucz bo do word przypisałeś klucz).
A żeby wyświetlić wartość to możesz m.in odwołać się do niej za pomocą klucza.

Czyli za pomocą klucza (przypisanego do word) mówisz, pokaż mi tą zawartość

Zrozumiale to napisałem :D?

0

for word in dictionary.keys() -> keys to zbiór kluczy z mapy dictionary a word to konkretny klucz z tej mapy

czyli keys to A, B, C... a word to A, potem B, potem C itd..

0

.keys() zwraca listę tylko kluczy w słowniku. Zmienna word w każdej iteracji będzie zawierała kolejny klucz, wtedy można się nim posłużyć do wydobycia wartości ze słownika z którą ten klucz jest powiązany

0

Dziękuję, teraz wydaje mi się to bardziej zrozumiałe.
Nie mogłem zrozumieć czemu ta linijka :

print(word,'-',dictionary[word])

zwraca z dictionary[word] wartość klucza a nie sam klucz skoro do zmiennej word przypisany jest klucz to myślałem że jak w nawiasie kwadratowym umieścimy zmienną word to zwróci nam klucz a nie jego wartość. Zrobiłem testy na innej liście, przeanalizowałem to i teraz już bardziej to rozumiem. Przepraszam że zadaję tyle pytań ale cóż...zależy mi na tym żeby nauczyć się porządnie Pythona a nie po łebkach :)

Dziękuję Wam bardzo za wyjaśnienia!:)

0

Witam, miałem kilka dni przerwy ponieważ nie miałem czasu na naukę. Za tydzień kończę poziom podstawowy kursu Pythona na udemy. Ale nie wszystko jeszcze rozumiem, tak więc zastanawiam się nad kolejnym kursem dla początkujących, lub czytania książki i postępowania według niej. Chodzi o książkę "Automatyzacja nudnych zadań z Pythonem", bardzo dużo osób ją poleca na start.

Co Wy zrobilibyście na moim miejscu ? Nie przejdę do kolejnego kursu dla średnio-zaawansowanych skoro jeszcze nie opanowałem podstaw.

0

Zrozumiałem że programowanie to ta dziedzina której nie można zrobić po łebkach. Dlatego postanowiłem dać sobie czas i kurs dla początkujących przerobić od początku, raz jeszcze utrwalić i przećwiczyć informacje. Może długo mi to idzie i dość opornie ale nie spieszy mi się, traktuję to jako studia czteroletnie więc mam czas :)

1

Szczerze mówiąc im bardziej się zagłębiam i poznaję programowanie i Pythona tymbardziej skłaniam się ku innym ścieżkom niż GameDev.

Bardzo ciekawa jest Analiza Danych i Machine Learning. Z tego co zdążyłem przeczytać to właśnie Python w dużej mierze jest wykorzystywany w tych dziedzinach. Jestem w połowie drugiego kursu Pythona na Udemy. Potem dla utrwalenia mam 200 zadań do rozwiązania.

A gdy to opanuje to zacznę naukę z książki "Automatyzacja nudnych zadań z Pythonem". Taką ścieżkę "kariery" sobie wybrałem na początek.

0

Nie polecam ścieżki nauki, która polega na przerabianiu kursów jeden po drugim, bo faktycznej wiedzy niewiele z nich wynika. (chyba, że uczysz się wkuwając każdą metodę na pamięć, ale to też raczej mija się z celem) W większości przedstawiają wykorzystanie danej funkcji w jakimś bardzo wąskim przypadku i potem gdy próbujesz napisać coś według własnego pomysłu, to okazuje się, że nie wiesz jak, bo twój problem różni się od problemu i jego rozwiązania przedstawionego na kursie, czy w książce. Tutaj potrzeba zrozumienia działania i praktyki jak w matematyce, tak samo nie nauczysz się matematyki, przepisując przykłady z podręcznika. Jeżeli skończyłeś kurs obejmujący podstawy, to pomyśl co ciekawego chciałbyś zrobić i z wiedzą, którą posiadasz spróbuj to napisać. Nawet jeżeli ci się nie uda, to zostaw projekt, wróć do nauki i za jakiś czas wróć do projektu, jeżeli za kolejnym podejściem uda się go dokończyć, to dostaniesz potwierdzenie, że robisz jakiś progres.

0

Czytam fora, grupy o Pythonie i wychodzi na to że zanim przechodzi się na Machine Learning to trzeba zrozumieć Analizę danych żeby "sztuczna inteligencja" miała z czego wyciągać wnioski i uczyć się, dobrze rozumiem ? Najpierw gromadzimy dane a potem Machine Learning je przetwarza tak ? :)

Mam pomysł na projekt w którym wyciągam ze stron WWW statystyki drużyn, zawodników, ilośc wygranych/przegranych meczy itp itd. Potem pakuje to do ładnej bazy danych i przetwarzam to za pomocą jakichś algorytmów które podają mi jakąś % szansę na jakieś zdarzenie np. w jakimś meczu szansę na gola itp...myślicie że jest to do zrealizowania ? Idąc dalej tym tropem, czy za "Webscrapping" i przetwarzanie tych danych dla własnych korzyści mogę mieć jakieś nieprzyjemności ?

szafran98, dziękuję za rady, teraz jestem w połowie drugiego kursu, potem praktyka czyli te 200 zadań i książka.

0
wojtek1492 napisał(a):

Czytam fora, grupy o Pythonie i wychodzi na to że zanim przechodzi się na Machine Learning to trzeba zrozumieć Analizę danych żeby "sztuczna inteligencja" miała z czego wyciągać wnioski i uczyć się, dobrze rozumiem ? Najpierw gromadzimy dane a potem Machine Learning je przetwarza tak ? :)

To nie "sztuczna inteligencja ma wyciągać wnioski" a wręcz odwrotnie - analityk musi wyciągać wnioski z modeli.

Mam pomysł na projekt w którym wyciągam ze stron WWW statystyki drużyn, zawodników, ilośc wygranych/przegranych meczy itp itd. Potem pakuje to do ładnej bazy danych i przetwarzam to za pomocą jakichś algorytmów które podają mi jakąś % szansę na jakieś zdarzenie np. w jakimś meczu szansę na gola itp...myślicie że jest to do zrealizowania ? Idąc dalej tym tropem, czy za "Webscrapping" i przetwarzanie tych danych dla własnych korzyści mogę mieć jakieś nieprzyjemności ?

Wszystkie zakłady bukmacherskie implementują taką funkcjonalność. Nie wiem czego dokładnie tam używają, ale widzę problemów w tym żeby to zrobić przy pomocy ML.

1

Właśnie skończyłem drugi kurs Pythona w którym był wstęp do OOP. Od jutra zabieram się za 200 zadań żeby nabrać więcej praktyki. Zobaczymy jak mi to pójdzie i ile zdołam sam wykonać a ile będzie dla mnie za trudnych. Dzięki temu zweryfikuje czy dwa kursy które skończyłem przyniosły mi korzyści i wiedzę :)

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