Mikseri on musiikkiyhteisö,
jossa voit kuunnella, ladata ja arvostella suomalaista musiikkia,
lisätä rajattomasti biisejä, luoda oman artistisivun, kerätä arvosteluja ja faneja

Ladataan

Vastaa Aloita uusi keskustelu

 

1 2 Seuraava >

Kirjoittaja Hello World! Code Academy 101


IT
IT Resurrected
13563 viestiä

#1 kirjoitettu 29.09.2020 15:44

Hello World! Code Academy 101


Aloitetaanpa tällainen ketju, jonka aiheena siis koodaus eli tietokone-ohjelmointi... Ketju on kaikille avoin aiheeseen liittyvään kommentointiin, vaikkei aiheesta virallisesti mitään tietäisikään...

Latasin siis Pythonin mun koneelle, joka on yksi ohjelmointikieli... Tarkemmin sanottuna asensin Anaconda distron, ja sen puitteissa on tarkoitus opetella Spyder nimisen IDEn eli ohjelmointiympäristön käyttöä...

¤¤¤
Joo, siis latasin tän saman paketin jo viime keväänä mun vanhalle läppärille, mutten päässyt alkua pidemmälle, joten otetaanpa uusi yritys jos tää homma lähtisi pelittämään...

Ihan aluksi on tarkoitus opetella ihan ohjelmoinnin perusteita, ja tätä varten on tarkoitus tilata pari kirjaa sekä katsella erinäisiä YouTube videoita, ehkäpä myös katsoa MIT:n ilmainen videoluentosarja aiheesta, kunhan nyt alkuun pääsee...

YouTubessa on hyvä kattaus alkeisvideoita aiheesta Python ohjelmointi, ja siellä myös selitetään asiat rautalangasta vääntämällä, jolloin tällainen vanhakin jotain niistä ymmärtää...

Ja jos pääsen alkua pidemmälle, niin yksi tavoite on ohjelmoida noita jalkapallovedonlyöntiin liittyviä matemaattisia laskureita, joiden avulla lyödä sitten vetoa... Nyt noissa laskuissa on aika työ, eikä niitä pitkässä juoksussa jaksa laskea koko ajan paperilla taskulaskimen kanssa... Olisi paljon helpompaa, jos voisi syöttää ohjelmaan otteluparin koti- ja vieraspeli tilastot ja vaikkapa vedonlyöntitoimiston kertoimet, ja katsoa sen pohjalta että mitä vaihtoehtoa kenties kannattaisi pelata...

Uskoisin, että tuollaisen laskurin ohjelmointi on itse asiassa ihan mahdollinen ohjelmoitava suht aloittelijankin ohjelmoitavaksi, mutta sitten jos haluaa mukaan esim. graafista käyttöliittymää, niin tehtävä vaikeutuu jo oleellisesti... Tällöin tarvitsisi kokemusta esim. Tkinter paketista, jolla Pythonissa voi ohjelmoida graafisia käyttöliittymiä...

Mut joo, tässä nyt olis selvä projekti ja päämäärä noin ensi alkuun... Katsotaan pääsenkö tällä kertaa alkua pidemmälle... Sen verran olen tässä kerinnyt tekemään, että asensin nuo paketit läppärille, ja Spyderissa on kirjoitettu eka "Hello World!" -ohjelma...

¤¤¤
Mutta joo... Tässä ketjussa on lupa keskustella kaikesta ohjelmointiin liittyvästä... Sana on niin sanotusti vapaa...

^ Vastaa Lainaa


geeli
3718 viestiä

#2 kirjoitettu 29.09.2020 16:14

En ole itsekkään mikään mestari Pythonin kanssa. Tutustuin siihen alunperin, kun otin yksi kesä valinnaisen kurssin "Ohjelmoinnin perusteet Pythonilla", jonka sisällytin omiin opiskeluihini. Olen sittemmin kokeillut Tkinteriä, josta siirryin PyGameen, koska tarkoitus oli terästää alunperin Javalla koodattua tekstiseikkailupeliä.

Tarkoitus oli aluksi päästä eroon tekstipohjaisesta käyttöliittymästä, jota kutsutaan parseriksi. Lopulta yritin luoda täysin graafisen seikkailupelin ja tuo hädin tuskin tuhat riviä koodia on ollut nyt työn alla jo useamman kuukauden eli taisi jäädä yritykseksi vielä.

Pythonilla voi myös tehdä web-sovelluksia tai -sivustoja. Tähän sopivat esim. Django ja Flask sovelluskehykset. Tuota Djangoa olen vähän testaillut. Ajatuksena oli luoda siis uudet portfolio-sivut itselleni. Tajusin kuitenkin, että jopa omissa HMTL-/CSS-taidoissani on parantamisen varaa eli olen päättänyt ensin hioa taitojani niiden parissa.

Hienoa, kun olet saanut Hello Worldin toimimaan. Tämä tarkoittaa sitä, että olet saanut koodia kääntymään ja voit kokeilla ihan oikeasti ohjelmoida ja ajaa koodia. Itse koin aikanaan harjoitusten tekemisen oivaksi tavaksi oppia koodaamista. Kirjoista varmasti niitä löytyykin.

Minä olen luottanut komentorivin työvälineiden lisäksi ilmaiseen IDE:en eli PyCharmiin. Se on kuitenkin ihan se ja sama millä IDE:llä koodaa, koska se itse koodi on samaa...

Sitten, kun taitoja tulee, niin kannattaa miettiä, mitä kaikella opitulla voitaisiin toteuttaa. Mulla on syntynyt paljon prototyyppejä, kun olen miettinyt sopivaa peliä tai nettisivua, jonka toteuttaa. Ne tärkeimmät projektit, jotka olisivat ehkä työllistäneet ovat kuitenkin osaltani olemattomissa. Toisaalta ei kannata nostaa rimaa heti liian korkealle. Internetistä löytyy ilmaiseksikin hyvää materiaalia, joka voi olla avuksi...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#3 kirjoitettu 29.09.2020 18:36

geeli kirjoitti:


Hienoa, kun olet saanut Hello Worldin toimimaan. Tämä tarkoittaa sitä, että olet saanut koodia kääntymään ja voit kokeilla ihan oikeasti ohjelmoida ja ajaa koodia. Itse koin aikanaan harjoitusten tekemisen oivaksi tavaksi oppia koodaamista. Kirjoista varmasti niitä löytyykin.

Minä olen luottanut komentorivin työvälineiden lisäksi ilmaiseen IDE:en eli PyCharmiin. Se on kuitenkin ihan se ja sama millä IDE:llä koodaa, koska se itse koodi on samaa...

Sitten, kun taitoja tulee, niin kannattaa miettiä, mitä kaikella opitulla voitaisiin toteuttaa. Mulla on syntynyt paljon prototyyppejä, kun olen miettinyt sopivaa peliä tai nettisivua, jonka toteuttaa. Ne tärkeimmät projektit, jotka olisivat ehkä työllistäneet ovat kuitenkin osaltani olemattomissa. Toisaalta ei kannata nostaa rimaa heti liian korkealle. Internetistä löytyy ilmaiseksikin hyvää materiaalia, joka voi olla avuksi...


Jeps, kiitti vinkeistä... Mulla tosiaan käytössä tuo Spyder IDE, joka on kanssa ilmainen ja tulee tuon Anacondan mukana myös...

Ja tosiaan, nyt olen katsonut tuollaista reilun 4 tunnin mittaista intro videota aiheesta Python ohjelmointi YouTubesta, aina pienissä pätkissä... Kun saan videon katsottua loppuun, ajattelin lähteä uudestaan alusta liikkeelle, ja kokeilla niitä esimerkkejä itse ja vähän leikkiä niiden kanssa...

Ja toki, ei kannata nostaa rimaa heti liian korkealle, ja perusoperaatioita ajattelin ekaksi treenata, että tulee se syntaksi hieman haltuun ekaksi...

Toinen tärkeä seikka motivaation kannalta on se, että löytää sopivan tasoisia harjoituksia sopivista aiheista, jotta se oppimiskäyrä on noususuuntainen...

Itsestä tuntuu kun joskus vajaa 10 vuotta sitten aloittelin Java ohjelmointia pääsemättä alkua pidemmälle, että homma lähti liian nopeasti liian vaikeisiin asioihin... Nyt ajattelin tehdä asiat sillä periaatteella, etten hosu noiden asioiden kanssa, vaan pyörittelen ihan perusasioita, kunnes niiden logiikka on hallussa...

Yksi homma mikä mulle tuntui silloin aiemmin vaikealta oli näiden muuttujien ja funktioiden yhdisteleminen...

Pythonissa on suht yksinkertainen syntaksi, mutta ajatellaan tilannetta jossa sulla on jokin muuttuja, ja lisäät siihen pisteen avulla funktion jossa on omat parametrinsa, niin siinä menee äkkiä sekaisin, että mitä siinä ohjelmassa nyt yritetään tehdä oikeastaan?

Just tällaista peruslogiikkaa varten tarttisi oikeastaan ohjelmoinnissa alkuun pääsemiseksi omat tutoriaalinsa: elikkä sellainen intro aiheeseen, jossa perus syntaksin opettelu yhdistetään sen ohjelman "control flown" logiikan ymmärtämiseen...

Tämä ainakin itsellä silloin aiemmin siis tuotti eniten vaikeuksia siinä alkuun pääsemisessä, varsinkin kun yrittää näitä juttuja hiffailla itsekseen kotona ilman ulkopuolista apua...

^ Vastaa Lainaa


Funereal
2858 viestiä

#4 kirjoitettu 29.09.2020 22:12

IT kirjoitti:
Pythonissa on suht yksinkertainen syntaksi...


Tää on muuten hauska. Sinänsä joo yksinkertainen syntaksi, mutta jokseenkin outo, enkä ole siihen vielä kymmenessäkään vuodessa mieltynyt. Esimerkkejä tulee oudon sisennysten mätsäilyn lisäksi mieleen esim. tyyppivihjeet, joilla ei ole mitään todellista vaikutusta koodiin suoritukseen; lambda-funktiot, jotka jostain syystä saavat olla vain yhden rivin funktioita (riviä ei saa siis jakaa toiselle riville); luokkien jäsenfunktioiden implisiittinen self-parametri, joka kuitenkin pitää funktiomäärittelyssä muistaa; range-funktion epäintuitiivinen paluuarvo; ternäärisen operaattorin syntaksi (useissa kielissä x ? y : z, pythonissa y if x else z) yms.

Monesti tuntuu, että kieltä ei ole kummemmin suunniteltu, vaan siihen on vain lisätty vapaamuotoisesti ominaisuuksia ajan myötä. Tätä tunnetta vahvistaa myös se, kuinka paljon taaksepäinyhteensopivuuden rikkovia muutoksia python 3:ssa oli verrattuna 2:een.

Toki kaikissa kielissä on omituisuuksia, mutta mielestäni Python on erityisen epäkonsistentti oman syntaksinsa suhteen.

Onnea silti valitsemallesi tielle

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#5 kirjoitettu 30.09.2020 01:42

Funereal kirjoitti:


Tää on muuten hauska. Sinänsä joo yksinkertainen syntaksi, mutta jokseenkin outo, enkä ole siihen vielä kymmenessäkään vuodessa mieltynyt.

Monesti tuntuu, että kieltä ei ole kummemmin suunniteltu, vaan siihen on vain lisätty vapaamuotoisesti ominaisuuksia ajan myötä.

Toki kaikissa kielissä on omituisuuksia, mutta mielestäni Python on erityisen epäkonsistentti oman syntaksinsa suhteen.


Joo... Kiitoksia kommentoinnista... Tähän en osaa sanoa yhtään mitään, kun en pysty vertaamaan eri ohjelmointikieliä, ja niiden eroja ja yhtäläisyyksiä... Itse sen verran aloittelija, ettei nuo ohjelmoinnin hienoudet oikeastaan kosketa meikäläistä siinä suhteessa...

Mutta joo, valitsin Pythonin juuri siksi, että sen syntaksi on suht helppo oppia, siksi että Pythonia käytetään laajasti Yhdysvalloissa lähes kaikissa huippuyliopistoissa ohjelmoinnin peruskursseilla, ja tämän takia siitä on saatavilla runsaasti oppimateriaalia...

Esimerkiksi MIT:n yliopiston ilmaisilta kurssisivuilta löytyy Python ohjelmoinnin peruskurssi videoluentoineen:

MIT OCW - Introduction to Computer Science and Programming in Python


Vaihtoehto olisi ollut alkaa opiskelemaan esim. C, C++ taikka Java ohjelmointia, mutta valinta osui nyt Pythoniin...

Ja itsellenihän tämä on siis ihan vain harrastuspohjalla tämä kiinnostus ohjelmointia kohtaan, jotenka ne eri ohjelmointikielien hienoudet ei siinä mielessä kosketa mua loppupeleissä...

^ Vastaa Lainaa


geeli
3718 viestiä

#6 kirjoitettu 30.09.2020 04:27

Sisennysten kanssa olen joutunut sähläämään minäkin. Helposti se näppäimistön TABin painallus neljän SPACEn sijaan jää koodiin ja tästä seuraa virheilmoitus.

Tässä yksi hyvä linkki:

Python Tutorial - Tutorialspoint

Tutorialspoint oli tärkeä lähde sekä tuki, kun opiskeluaikoina tein erilaisia koodausharjotteita ja sieltä löytyy aika monesta aiheesta ohjeita ja oppaita. Itse harjoituksia ei kuitenkaan löydy.

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#7 kirjoitettu 30.09.2020 08:03

geeli kirjoitti:

Sisennysten kanssa olen joutunut sähläämään minäkin. Helposti se näppäimistön TABin painallus neljän SPACEn sijaan jää koodiin ja tästä seuraa virheilmoitus.

Tässä yksi hyvä linkki:

Python Tutorial - Tutorialspoint

Tutorialspoint oli tärkeä lähde sekä tuki, kun opiskeluaikoina tein erilaisia koodausharjotteita ja sieltä löytyy aika monesta aiheesta ohjeita ja oppaita. Itse harjoituksia ei kuitenkaan löydy.


Joo, kiitoksia linkistä, mutta tuo sivusto tarjoaa vanhentunutta tietoa... Siellä lukee, että:

All the examples given in subsequent chapters are executed with Python 2.4.3 version...

Mulla itselläni on asennettuna Python versio 3.8.3 ja tuo tuossa sun linkkaamassa tutoriaalissa käytetty versio 2.4 esiteltiin vuonna 2004 elikkä on siis pikkasen vanhentunut kun ei sitä ole tuettu enää yli 10 vuoteen...

Wikipedia myös tietää, ettei Pythonin 3 versiot ole taaksepäin yhteensopivia 2 versioiden kanssa, koska kolmosversiossa Python kieli osin suunniteltiin uudelleen, ja sen vikoja pyrittiin korjaamaan...

History of Python


Sinällään sääli, että tuo sun linkkaama tutoriaali on vanhentunut, koskapa se olisi tarjonnut hyvän selkeän väylän noiden Pythonin keskeisten toimintojen opiskeluun....

^ Vastaa Lainaa


geeli
3718 viestiä

#8 kirjoitettu 30.09.2020 08:45

Niin no. Ei niitä koodiesimerkkejä kyllä saa toimimaan. Ehkä jotain hyötyä tuosta on kuitenkin. Ainakin huomaa, mitä eroja vanhentuneen ja uuden välillä on.

Koitanpa löytää jonkin paremman ja ajantasalla olevan linkin.

Noh...

Tässä Pythonin viralliset web-sivut

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#9 kirjoitettu 30.09.2020 12:50

geeli kirjoitti:


Tässä Pythonin viralliset web-sivut


Joo, tuo on mulla suosikeissa, ja sieltä löytyy myös ihan yleinen sivu, jossa dokumentaatiota:
Python Documentation

Ja tuolta löytyy sekä ilmaisia että maksullisia kursseja Pythoniin liittyen:
Udemy - Python

Ja tuolta löytyy erinomainen sivusto, jossa tietoa ja tutoriaaleja Pythoniin liittyen:
Python Course EU

Ja tämä viimeinen sivusto on ihan mielenkiintoinen, ja sieltä löytyy Pythonin perusteiden lisäksi asiaa myös useilta eri sovellusalueilta....

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#10 kirjoitettu 30.09.2020 15:59

No nyt löytyi paljonkin sivustoja liittyen Pythoniin, joidenka avulla voisi tehdä laskelmia jalkapalloon liittyen...

Tuossa on linkki NumPy sivustolle, ja tämä paketti on tarkoitettu tieteelliseen laskentaan Pythonissa...

PyMC3 on tarkoitettu todennäköisyyslaskentaan Pythonissa...

How To Create A Football Betting Model puolestaan on artikkeli, jossa esitellään malli jonka avulla voi ennakoida ottelutuloksia jalkapallossa...

Tuossa puolestaan on paketti GitHub sivustolla, jonka avulla on mahdollista hyödyntää Sportradar tilastoja: GitHub - Sportradar APIs

Sportradar siis kansainvälinen firma, joka kerää ja analysoi urheiluun liittyvää dataa, ja tarjoaa esim. vedonlyöntikertoimia vedonvälitystoimistoille datan ja analyysien ohella...

Sportradarin omat sivut tähän liittyen löytyy tuolta: Sportradar for developers

En tiedä saako tuolta Sportradar sivustolta yksityiset ihmiset ostaa tuota dataa, vai onko tuo tarkoitettu vain vedonvälitystoimistoille tuo palvelu, mutta tuolla on työkaluja, joilla voi tuoda jalkapallodataa omaan ohjelmaan internetistä: PyPI - Footballdata

Tuolta löytyy puolestaan lyhyt pdf muotoinen artikkeli jalkapallon reittaus systeemeistä vedonlyöntiin liittyen:
Rating Systems For Fixed Odds Football Match Prediction


Ja viimeisimpänä muttei vähäisimpänä, niin tuolta löytyy sivusto, jonka avulla Python ohjelmointia on mahdollista oppia jalkapallon avulla:
FC Python - Learn Python & data science skills through football

Tätä viimeistä sivustoa tulee varmastikin käytettyä hyväksi jossakin määrin Python ohjelmoinnin opiskelussa...


Mutta joo, Pythonilla, jalkapallolla ja vedonlyönnillä näyttäisi olevan paljonkin yhteyksiä... Osa noista linkeistä sisältää sen verran edistyneitä työkaluja ja menetelmiä, ettei ole ihan realistista olettaa, että itse pystyisi niitä kovin äkkiä hyödyntämään, mutta sinänsä mielenkiintoista että aiheesta löytyy pikaisella googlettamisellakin näin paljon erilaisia resursseja...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#11 kirjoitettu 01.10.2020 08:09

No niin, uskokaa taikka älkää, mutta ensimmäinen kirjoittamani Python ohjelma on valmistunut... Ja juhlistaakseni tätä virstanpylvästä, laitan ohjelman esille tähän:


Jalkapallopelien tulosten todennäköisyyslaskuri
Versio 1.0.3
Kirjoittaja: IT


from math import sqrt

# Kysytään tiedot
hwins = float(input("Anna kotijoukkueen kotivoittojen lukumäärä: "))
hdraw = float(input("Anna kotijoukkueen kotitasapelien lukumäärä: "))
hloss = float(input("Anna kotijoukkueen kotitappioiden lukumäärä: "))
awins = float(input("Anna vierasjoukkueen vierasvoittojen lukumäärä: "))
adraw = float(input("Anna vierasjoukkueen vierastasapelien lukumäärä: "))
aloss = float(input("Anna vierasjoukkueen vierastappioiden lukumäärä: "))


# Kotipelien lukumäärä
total_playedh = hwins + hdraw + hloss

# Vieraspelien lukumäärä
total_playeda = aloss + adraw + awins


# Kotivoiton todennäköisyys
hwins_perc = (hwins/total_playedh) * 100
aloss_perc = (aloss/total_playeda) * 100

kahwins = (pow(hwins_perc,2) + pow(aloss_perc,2))/2
phwins = sqrt(kahwins)

# Tasapelin todennäköisyys
hdraw_perc = (hdraw/total_playedh) * 100
adraw_perc = (adraw/total_playeda) * 100

kahdraw = (pow(hdraw_perc,2) + pow(adraw_perc,2))/2
phdraws = sqrt(kahdraw)

# Vierasvoiton todennäköisyys
hloss_perc = (hloss/total_playedh) * 100
awins_perc = (awins/total_playeda) * 100

kahloss = (pow(hloss_perc,2) + pow(awins_perc,2))/2
phloss = sqrt(kahloss)

# Tulosten vakioiminen
pallsum = phwins + phdraws + phloss
phwinsf = (phwins/pallsum) * 100
phdrawsf = (phdraws/pallsum) * 100
phlossf = (phloss/pallsum) * 100

# Tulosten pyöristäminen
phwinsr = round(phwinsf,1)
phdrawsr = round(phdrawsf,1)
phlossr = round(phlossf,1)

# Printataan tulokset
print()
print("Kotivoiton todennäköisyys on: " + str(phwinsr) + "%")
print("Tasapelin todennäköisyys on: " + str(phdrawsr) + "%")
print("Vierasvoiton todennäköisyys on " + str(phlossr) + "%")


Ohjelma siis laskee ottelun lopputulosten todennäköisyydet: kotivoitto, tasuri, vierasvoitto

Ohjelmaan täytyy syöttää 6 lukua, jotka löytyy kaikista jalkapallotilastoista: eli kotijoukkueen kotitilastot (voitot, tasurit, tappiot) sekä vierasjoukkueen vierastilastot (voitot, tasurit, tappiot)...

Ohjelman algoritmissa on käytetty hyväksi neliöllisen keskiarvon menetelmää, jonka takia tulokset täytyy vielä vakioida, jotta todennäköisyysprosenttien summa on 100%....

Lopputulos poikkeaa aavistuksen verran siitä jos tulos olisi laskettu käyttäen hyväksi tavallista keskiarvoa, mutta erot eivät ole suuret...

Ja lopuksi, ohjelmaa saa käyttää vapaasti ottelutulosten ennakoimiseen, mutta en anna mitään takeita siitä, että tämän avulla pystyy voittamaan vedonlyönnissä rahaa pitkässä juoksussa...

Ohjelmaa voi toki käyttää sen arvioimiseen, että mitkä ovat ottelutuloksen eri vaihtoehtojen todennäköisyydet, kun ottaa huomioon koti- ja vierasjoukkueen ottelutilastot, mutta näiden perusteella ei pysty välttämättä ennakoimaan tulevaa...

Joten jokainen käyttää ohjelmaa omalla vastuulla...

^ Vastaa Lainaa


geeli
3718 viestiä

#12 kirjoitettu 01.10.2020 10:00

Jees. Siistiä nähdä tuota sun tuottamaa koodia. Meinasin just laittaa tähän kommentin, että haluaisin nähdä sitä...

Sit voi lisäillä vähän if-else-rakenteita (esimerkiksi) ja/tai luoda jotain funktioita, jotka ottavat parametreiksi noita muuttujia sekä palauttavat arvoja...Menemättä vielä olio-ohjelmointiin...

Hyvä alku...Olet päässyt laittamaan niinsanotusti kädet saveen...Siitä se lähtee etenemään...

^ Vastaa Lainaa


geeli
3718 viestiä

#13 kirjoitettu 01.10.2020 10:02

By the way: jos tulee jotain ongelmia koodin kanssa, niin voi kysyä tässäkin jotain tai jos haluat että avaan jotain aihetta niin varmasti onnistuu. Ja tuntuu olevan niin, että täältä Mikseristä löytyy muitakin, jotka osaa koodata (kuten Funereal ja veezay)...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#14 kirjoitettu 01.10.2020 10:58

geeli kirjoitti:

Jees. Siistiä nähdä tuota sun tuottamaa koodia. Meinasin just laittaa tähän kommentin, että haluaisin nähdä sitä...

Sit voi lisäillä vähän if-else-rakenteita (esimerkiksi) ja/tai luoda jotain funktioita, jotka ottavat parametreiksi noita muuttujia sekä palauttavat arvoja...Menemättä vielä olio-ohjelmointiin...

Hyvä alku...Olet päässyt laittamaan niinsanotusti kädet saveen...Siitä se lähtee etenemään...


Jepulis... Ja kiitos! Olin pikkasen itsekin yllättynyt, että sain tuon laskurin pullautettua ulos näinkin vähällä perehdytyksellä... Olen vasta kerennyt katselemaan YouTube videoita ynnä muita lähteitä muutaman päivän ajan...

Mutta eipä tuossa oikeastaan tarvinnut mitään isompia hienouksia osata, ja hieman jouduin googlettelemaan ja katselemaan Pythonin dokumentteja tuota kirjoittaessani...

Noi if-else rakenteet ja funktiot saa nyt vielä hieman odottaa, mutta niitä kohden kuljetaan tietty kovaa vauhtia... Kyllä nekin vielä tulevat kuulumaan ohjelmaan, kunhan pääsen tässä alkuun...

Mutta joo, oli ihan mielenkiintoinen koodaus sessio, josta jäi käteen hyvä mieli, ja toimiva ohjelma...

Nyt on paljon helpompi laskea itse noita otteluiden todennäköisyyksiä, ja verrata näitä vedonlyöntitoimistojen antamiin kertoimiin... Laskuria voisi kehittää monellakin tapaa, ja jatkoa varmastikin tulee piisaamaan, kunhan nyt alkuun pääsen...

Mutta sitä ennen ajattelin ottaa nämä perusteet haltuun ihan askel kerrallaan... Ja ajattelin myös tilata kirjan, joka käsittelee algoritmeja ja datarakenteita yleisellä tasolla... Koskapa kaikki lähtee liikkeelle siitä, että tunnistat a) ongelman sekä b) askel askeleelta kulkevan menetelmän sen ongelman ratkaisuksi, ja vasta sitten c) ohjelmoit sen menetelmän jollakin ohjelmointikielellä...

Eli ohjelmoinnin lisäksi olisi tarkoitus ihan opetella myös perus ongelmanratkaisua...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#15 kirjoitettu 01.10.2020 15:06

geeli kirjoitti:

By the way: jos tulee jotain ongelmia koodin kanssa, niin voi kysyä tässäkin jotain tai jos haluat että avaan jotain aihetta niin varmasti onnistuu. Ja tuntuu olevan niin, että täältä Mikseristä löytyy muitakin, jotka osaa koodata (kuten Funereal ja veezay)...


Joo, varmasti kyselen jatkossa jotakin, kunhan tässä nyt pääsee alkuun...

Ja eikös Mikseri ole aikoinaan ollut pullollaan koodareita? Käsitin, että suuri osa noista Mikserin ylläpidon tyypeistä oli sellaisia, että he myös kehittivät tätä sivustoa yhdessä?

Tilasin muuten kirjan Python koodauksesta tänään: Python for Everybody: Exploring Data in Python 3

Ja tuollainen pitää vielä tilata varmaankin jatkossa: Codeless Data Structures and Algorithms: Learn DSA Without Writing a Single Line of Code

Tää toinen kirja esittelee tuota algoritmista ajattelua noin niinkuin yleisellä tasolla...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#16 kirjoitettu 01.10.2020 20:46

Tosta tässä ketjussa kirjoittamastani viestistä #11, jossa siis tuo ohjelma jalkapallotulosten todennäköisyyksien laskemiseen, niin hieman testailin ohjelmaa, ja se nyt tuntuisi antavan ihan järkevän tuntuisia todennäköisyyksiä näin alustavasti...

Lisäilin ohjelmaan myös sellaisen ohjelmapätkän, joka muuttaa todennäköisyysprosentit kertoimiksi...

Esimerkin vuoksi: Superettan sarjassa Ruotsissa on parin päivän päästä matsi:
¤ Jonkopings - Halmstad
¤ Tuon kertoimet on bet365 sivustolla: 2,25 - 3,25 - 3,10

>>> Itse sain tuolla mun ohjelmalla laskettua kertoimet: 2,43 - 3,69 - 3,14

Eroja näiden välillä selittää se, että kertoimien taustalla olevat todennäköisyysprosentit eroaa toisistaan sen takia, että bet365:llä on se kuuluisa "talon etu":
¤ Mun prosentit: 41,1 + 27,1 + 31,8 = 100%
¤ bet365 prosentit: 44,4 + 30,7 + 32,3 = 107,4%

Tuo 7,4% on siis se minkä talo vetää välistä bet365:llä... Eli bet365:n kertoimet ovat niitä todellisia kertoimia pienemmät kautta linjan, jolloin vedonlyöjä ei saa niitä kertoimia vedoilleen, jotka pitäisi saada ottelutulosten todennäköisyyksien mukaan...

Mutta siitä voi olla tyytyväinen, että tuo ohjelma nyt laskee ainakin nuo todennäköisyydet ja kertoimet sillain järkevästi, että niitä voi verrata vedonlyöntitoimistojen kertoimiin...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#17 kirjoitettu 01.10.2020 21:03

geeli kirjoitti:


By the way: jos tulee jotain ongelmia koodin kanssa, niin voi kysyä tässäkin jotain tai jos haluat että avaan jotain aihetta niin varmasti onnistuu.


Joo, mulla tuli pieni probleema vastaan tässä tän illan aikana, kun lisäsin ohjelmaan osion, joka muuttaa nuo ottelutulosten todennäköisyysprosentit vedonlyöntikertoimiksi...

Ongelma on seuraava:
- Mä käytän ottelutulosten analysoimiseen tällaisia tilastopareja kuin:
>> kotivoitot + vierastappiot
>> kotitasurit + vierastasurit
>> kotitappiot + vierasvoitot

Ongelma tulee vastaan silloin, jos kumpikin noista kunkin parin muuttujista saa arvon nolla...

Silloin kun todennäköisyysprosentteja muuttaa kertoimiksi, niin kertoimien kohdalla näyttöön tulee virheilmoitus:

line 62
odd_hwins = 1/(phwinsr/100)
ZeroDivisionError: float division by zero

Ongelma on siis siinä, että phwinsr muuttuja on saanut arvon nolla, ja tämä tökkii ohjelmaa suoritettaessa...

Kysymys kuuluu: mikä olisi paras väylä tän ongelman ratkaisemiseksi?
- joku if muotoinen kohta koodissa
- vai jokin exception handling tyyppinen ratkaisu

Ja vaikka ratkaisu olisikin suht yksinkertainen, niin mulla saattaa kulua aikaa että saan tuon korjattua... In the meantime, jos tilastoja katsomalla selviää että tuo ratkaisu on tulossa, niin ainahan ohjelmaan voi syöttää arvon 1 näiden ottelutulosten kohdalle (siis esim. 0 voiton sijasta 1 voitto)...

Elikkä tuo ongelma pitäisi ratkaista siten, että kun tuo ohjelma suorittaa tuota koodia, niin jos tuo "phwinsr" saa arvon nolla, niin sille annetaan jokin nollaa suurempi lukuarvo...

^ Vastaa Lainaa


geeli
3718 viestiä

#18 kirjoitettu 02.10.2020 09:27

IT kirjoitti:

Ongelma on seuraava:
- Mä käytän ottelutulosten analysoimiseen tällaisia tilastopareja kuin:
>> kotivoitot + vierastappiot
>> kotitasurit + vierastasurit
>> kotitappiot + vierasvoitot

Ongelma tulee vastaan silloin, jos kumpikin noista kunkin parin muuttujista saa arvon nolla...

Silloin kun todennäköisyysprosentteja muuttaa kertoimiksi, niin kertoimien kohdalla näyttöön tulee virheilmoitus:

line 62
odd_hwins = 1/(phwinsr/100)
ZeroDivisionError: float division by zero

Ongelma on siis siinä, että phwinsr muuttuja on saanut arvon nolla, ja tämä tökkii ohjelmaa suoritettaessa...

Kysymys kuuluu: mikä olisi paras väylä tän ongelman ratkaisemiseksi?
- joku if muotoinen kohta koodissa
- vai jokin exception handling tyyppinen ratkaisu

Ja vaikka ratkaisu olisikin suht yksinkertainen, niin mulla saattaa kulua aikaa että saan tuon korjattua... In the meantime, jos tilastoja katsomalla selviää että tuo ratkaisu on tulossa, niin ainahan ohjelmaan voi syöttää arvon 1 näiden ottelutulosten kohdalle (siis esim. 0 voiton sijasta 1 voitto)...

Elikkä tuo ongelma pitäisi ratkaista siten, että kun tuo ohjelma suorittaa tuota koodia, niin jos tuo "phwinsr" saa arvon nolla, niin sille annetaan jokin nollaa suurempi lukuarvo...


Eli minä ratkaisisin ongelman siten, että heti kun tuo muuttuja saa arvon, niin avaisit if-lauseen, vain yksi if-ehto riittää, ja se tarkistais, onko tuon muuttujan arvo nolla. Tämä pitää siis tehdä ennenkuin itse jakaminen tapahtuu.

Tässä tällaisena "pseudokoodina" ratkaisu, koska ei ole niin tuoreessa muistissa Python juuri nyt (eli tämä koodipätkä heti, kun muuttuja on saanut arvon):

if (muuttuja = 0) {
// tähän toimenpiteet, jos muuttuja on nolla
print("Tämä muuttuja ei voi olla nolla. Anna uusi luku...");
}

En tiedä meneekö ihan suoraan näin, mutta periaate on kuitenkin tämä...Eli tsekataan, onko nolla, jos on nolla, ajetaan koodi if-lauseen sisällä. Ja nuo "//"-merkit tarkoittavat kommenttia eli samalla rivillä näiden merkkien jälkeen oleva teksti ei mene suoritukseen...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#19 kirjoitettu 02.10.2020 10:17

geeli kirjoitti:

Eli minä ratkaisisin ongelman siten, että heti kun tuo muuttuja saa arvon, niin avaisit if-lauseen, vain yksi if-ehto riittää, ja se tarkistais, onko tuon muuttujan arvo nolla. Tämä pitää siis tehdä ennenkuin itse jakaminen tapahtuu.

Tässä tällaisena "pseudokoodina" ratkaisu, koska ei ole niin tuoreessa muistissa Python juuri nyt (eli tämä koodipätkä heti, kun muuttuja on saanut arvon):

if (muuttuja = 0) {
// tähän toimenpiteet, jos muuttuja on nolla
print("Tämä muuttuja ei voi olla nolla. Anna uusi luku...");
}

En tiedä meneekö ihan suoraan näin, mutta periaate on kuitenkin tämä...Eli tsekataan, onko nolla, jos on nolla, ajetaan koodi if-lauseen sisällä. Ja nuo "//"-merkit tarkoittavat kommenttia eli samalla rivillä näiden merkkien jälkeen oleva teksti ei mene suoritukseen...


Jeps, kiitos... Tuollaista koodinpätkää itsekin pohdin tässä, mutta käytännössä tuo:

print("Anna uusi luku: ")

Niin tuo ei toimi, ja sitä ei voi käyttää, koska jos jonkun kotijoukkueen pelitilastot on vaikka 7-3-0 niin tuohan tarkoittaa sitä, että kotijoukkue ei ole hävinnyt kertaakaan kotona... Se nolla on siis pystyttävä syöttämään sisään...

Sitäpaitsi, tuo ongelma noiden muuttujien kanssa ei ilmene jos vain yksi luku tuossa on syötetty nollana sisään... Mutta jos vierasjoukkueen vierastilastot on 0-4-6 niin silloin noissa laskuissa tulee samaan yhtälöön kaksi nollaa, ja tämä aiheuttaa ongelmia...

Eli ohjelma pitää pystyä muuttamaan siten, ettei ohjelman käyttäjää vaivata uudestaan ja pyydetä antamaan uutta lukua...

Sen sijaan ohjelman on itse pystyttävä muuttamaan tiettyjä muuttujia myöhemmin siinä koodissa, jos niiden arvo on nolla... Ihan siitä syystä, että osassa ohjelmaa tuo nolla ei ole ongelma, ja myöhemmin se voi olla ongelma osassa koodia...

Olen siis kehittänyt ohjelmaa pidemmälle kuin mitä tuossa yllä olevassa viestissä #11 tänne linkkasin... Nyt ohjelma laskee mm. noista todennäköisyysprosenteista niihin liittyvät kertoimet, ja laskee lisäksi EV:n eli odotusarvon, kun ohjelmaan syöttää sisään vedonlyöntitoimiston kertoimet...

Ja itse asiassa kokeilin laittaa koodin sekaan tuollaista yksittäistä if lausetta ja muuttaa sen muuttujan arvoa, mutta ohjelma herjasi syntaksivirheestä...

Mutta tuo ongelma tulee esiin vain parissa poikkeustapauksessa, ja koskapa en ole julkistamassa ohjelmaa, niin sillä ei ole väliä... Pystyn elämään toistaiseksi tuon kanssa... Tarttee hiukan lisäperehtymistä, jotta saan tuon oikein sillä tavalla, että ratkaisun voi kirjoittaa sisälle ohjelmaan...

^ Vastaa Lainaa


geeli
3718 viestiä

#20 kirjoitettu 02.10.2020 10:31

No mut nollalla ei voi jakaa. Missään tai koskaan.

Kyl tuohon jokin ratkaisu löytyy. Ei vaan ehkä ole tässä kohtaa oleellista.

Pääasia on varmaan kuitenkin se, että kehityt ohjelmoijana ja opit. Olkoon se sitten yrityksen ja erehdyksen kautta...Mut mä en perehtynyt tarpeeksi tuohon koodiin...

^ Vastaa Lainaa


geeli
3718 viestiä

#21 kirjoitettu 02.10.2020 10:59

En puutukkaan itse ohjelman rakenteeseen tässä kohtaa, sittenkään, mutta yksi pieni juttu, jossa voit parantaa tässä kohtaa:

Muuttujat voi nimetä kuvaavammin. Ei välttämättä muistu mieleen, kun palaat kolmen viikon päästä aiemmin kirjoittamasi koodin pariin, muuttuja nimeltä "hwins", kun taas "gamesWinnedWhenPlayedAtHome" antaa jo kuvaa aika paljon, mikä muuttuja on kyseessä.

Käytän itse tätä eli tää on niinsanottu "camelCase"-tapa. Huomasit varmaan eli eka kirjain pienellä ja tämän jälkeen jokaisen sanan alkukirjain isolla.

Yleisenä ohjeena voidaan sanoa, että muuttuja kannattaa nimetä siten, että sen käyttötarkoitus on selvää ilman kommentteja (tai miettimistä). Tämän takia lyhenteitä on hyvä välttää varsinkin jos niiden avaamiseen tarvitaan kommentti tai muutama.

Kehotan kokeilemaan rohkeasti if-else -rakenteita vielä lisää...Haluan myös nähdä lisää koodia, sitten kun edistyt

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#22 kirjoitettu 02.10.2020 11:06

geeli kirjoitti:

No mut nollalla ei voi jakaa. Missään tai koskaan.

Kyl tuohon jokin ratkaisu löytyy. Ei vaan ehkä ole tässä kohtaa oleellista.

Pääasia on varmaan kuitenkin se, että kehityt ohjelmoijana ja opit. Olkoon se sitten yrityksen ja erehdyksen kautta...Mut mä en perehtynyt tarpeeksi tuohon koodiin...


Joo, just se ongelma tossa oli, mutta itse asiassa tässä pelleilin vartin verran, ja sainkin tuon ongelman ratkaistua suht yksinkertaisella tavalla...

Tein:
if
else

rakenteella testin ja loin uuden muuttujan... Tällöin se vanha muuttuja jos oli nolla, niin se saa jatkossakin olla nolla, koska se toimii osassa koodia, ja sitten siinä jäljempänä tulevassa koodissa käytetään uutta muuttujaa, joka saa arvon tuon if - else testin mukaan:

# Tarkistetaan ettei tietyt muuttujat saa arvoa nolla
if phwinsr == 0:
phwinsrc = 5
else:
phwinsrc = phwinsr

if phdrawsr == 0:
phdrawsrc = 5
else:
phdrawsrc = phdrawsr

if phlossr == 0:
phlossrc = 5
else:
phlossrc = phlossr

# Muutetaan tulokset kertoimiksi
odd_hwins = 1/(phwinsrc/100)
odd_hdraws = 1/(phdrawsrc/100)
odd_hloss = 1/(phlossrc/100)


(Tää Mikserin softa ei näköjään ota noita sisennyksiä huomioon, mutta kyllä ne siinä on...)

Nyt tässä uudessa koodissa esim. tuo phwinsr saa jäädä ennalleen, mutta tuo uusi muuttuja phwinsrc saa arvon sen mukaan, mikä on tuon phwinsr muuttujan arvo...

Ja jos phwinsr saa arvon 0 eli 0%, niin ohjelma muuttaa phwinsrc muuttujan arvoksi 5 eli 5%... Tuo muutos on sen verran pieni ja se tosiaan tulee esiin vain parissa poikkeustapauksessa...

Ja kiitos geeli, rupesin tuota pohtimaan tässä tuon sun esimerkin jälkeen ja keksinkin aika nopeasti ratkaisun tälle...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#23 kirjoitettu 02.10.2020 11:10

geeli kirjoitti:


Muuttujat voi nimetä kuvaavammin. Ei välttämättä muistu mieleen, kun palaat kolmen viikon päästä aiemmin kirjoittamasi koodin pariin, muuttuja nimeltä "hwins", kun taas "gamesWinnedWhenPlayedAtHome" antaa jo kuvaa aika paljon, mikä muuttuja on kyseessä.

Yleisenä ohjeena voidaan sanoa, että muuttuja kannattaa nimetä siten, että sen käyttötarkoitus on selvää ilman kommentteja (tai miettimistä). Tämän takia lyhenteitä on hyvä välttää varsinkin jos niiden avaamiseen tarvitaan kommentti tai muutama.


Tää oli hyvä pointti... Itse olen vielä pysynyt kärryillä siitä, mitä ohjelma tekee missäkin vaiheessa, mutta en tiedä pysyisinkö kärryillä enää 3 viikon päästä...

Pitänee jatkossa nimetä muuttujat pidemmän kaavan mukaan, ja tottua vain näpyttelemään pidempiä tekstinpätkiä sisään ohjelmaan...

Mutta kait tossakin joku optimi pituus on?

^ Vastaa Lainaa


geeli
3718 viestiä

#24 kirjoitettu 02.10.2020 11:19

Löysin tiedon, että hyvän perus koodauskäytännön mukaan ei ole rajoitetta muuttujan nimen pituuteen, mutta suositeltavaa on käyttää alle 79 merkkiä. Tuo mun nimi on aika pitkä tais olla 27 merkkiä. Tärkeintä tässä kohtaa on koodin luettavuus.

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#25 kirjoitettu 02.10.2020 11:36

geeli kirjoitti:

Löysin tiedon, että hyvän perus koodauskäytännön mukaan ei ole rajoitetta muuttujan nimen pituuteen, mutta suositeltavaa on käyttää alle 79 merkkiä. Tuo mun nimi on aika pitkä tais olla 27 merkkiä. Tärkeintä tässä kohtaa on koodin luettavuus.


Joo... Pitänee varmaan jossakin välissä ihan harjoituksena kirjoittaa tuo mun ohjelma uudelleen käyttäen pidempiä muuttujan nimiä...

Nyt tossa mun ohjelmassa on jo öbaut 150 riviä koodia, joten sen luettavuus taitaa huonontua sitä enemmän, mitä pidempi ohjelmasta tulee, jos nimet on noin lyhyitä...

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#26 kirjoitettu 02.10.2020 14:47

geeli kirjoitti:

Löysin tiedon, että hyvän perus koodauskäytännön mukaan ei ole rajoitetta muuttujan nimen pituuteen, mutta suositeltavaa on käyttää alle 79 merkkiä. Tuo mun nimi on aika pitkä tais olla 27 merkkiä. Tärkeintä tässä kohtaa on koodin luettavuus.


Palaanpa tähän kommenttiisi vielä... Oikeastaan oli hyvä, että otit tämän koodauskäytännön esille tässä vaiheessa, eikä vasta sitten kun on jo kerinnyt oppia ja tottua vääriin työskentelytapoihin...

Löysin netistä ihan hyvän artikkelinkin aiheesta Python koodaus:

Data Scientists: Your Variable Names Are Awful. Here’s How to Fix Them.

Tossa muutama pointti Pythoniin liittyen:

¤ muuttujat ja funktiot (variables and functions) nimetään näin: all_lower_case
¤ nimetyt vakiot (named constants): KAIKKI_ISOILLA_KIRJAIMILLA
¤ luokat (classes): CamelCase


Ja tossa on tyyliopas itse Pythonin omilta sivuilta: PEP 8 -- Style Guide for Python Code

Tosta 79 merkistä, niin tuolla Pythonin tyylioppaassa lukee, että maksimaalinen rivin pituus on 79 merkkiä...

Pitänee perehtyä tuohon tarkemmin, jos vaikka kirjoittaisin tuon mun ohjelman uudestaan selkeämmin ulos... Silloin vaan joutuu noita laskutoimituksia jakamaan useille eri riveille...

Eli tässäpä tuli nyt heti uutta opeteltavaa...

^ Vastaa Lainaa


geeli
3718 viestiä

#27 kirjoitettu 02.10.2020 15:38

Sääntöjä voidaan luoda, mutta ne ovat vain sääntöjä. Mä käytän camelCasea muuttujiin, luokkiin ja, totanoin, vakioita käyttäessä ehkä sitten tollain KAIKKIISOLLA. Käytännössä ratkaisee se, että miten vaan se juttu toimii parhaiten.

Ehkä se onkin niin, että jokainen luo omat tapansa ja kehittyy niissä...rikkomatta kuitenkaan sääntöjä tai teknisiä rajoituksia (koska niitäkin on).

Ja toki internet tietää enemmän kuin minä. Ja toki joku muu tietää varmasti paremmin kuin minä. Ei oikeastaan ole väliä minulle, mikä ohjelmointikieli on kyseessä, koska osaan perusteet aika monella. IT on tässä keskittynyt Pythoniin.

Yksi asia tuli myös mieleen, johon törmäsin taannoin, joka on siis muuttujan näkyvyys. Koska on olemassa globaaleja muuttujia sekä paikallisia muuttujia. Mitäs eroa näillä on? (Voin vastata jossain kohtaa...)

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#28 kirjoitettu 02.10.2020 17:30

geeli kirjoitti:


Yksi asia tuli myös mieleen, johon törmäsin taannoin, joka on siis muuttujan näkyvyys. Koska on olemassa globaaleja muuttujia sekä paikallisia muuttujia. Mitäs eroa näillä on? (Voin vastata jossain kohtaa...)


Joo, toki... Asioilla on monta puolta, ja ne voidaan tehdä monella eri tavalla... Itse tosiaan keskityn Pythoniin, juuri niinkuin totesit, ja yritän tässä opetella ne "hyvät tavat" siinä suhteessa...

Noista globaaleista ja paikallisista muuttujista saat kirjoittaa joskus hieman enemmän... Olen joskus kyllä kuullut tuon erottelun, mutten osaa sen tarkemmin sanoa mistä siinä olikaan kyse... vai liittyikö se nyt sitten tuohon objekti orientoituneeseen ohjelmointiin jotenkin?

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#29 kirjoitettu 03.10.2020 09:07

No niin... Nyt on tuon jalkapallon todennäköisyyslaskimen versiointi siinä vaiheessa, että sain luotua exe -muotoisen tiedoston tosta ohjelmasta, ja mulla on siitä pikakuvake työpöydällä... Kun sitä klikkaa, niin avautuu tekstikonsoli, jossa ohjelma toimii...

Ohjelmassa on myös tällainen hienous nyt mukana:

# Kysytään haluaako käyttäjä jatkaa ohjelman käyttämistä
restart=input("Haluatko aloittaa alusta? k/e")
if restart == "k":
main()
else:
exit()


Tota varten piti määritellä ohjelman alkuun def main(): ja lisätä main() ohjelman loppuun sekä importata ohjelman alussa mukaan tuo exit funktio...

Itse ohjelman py -muotoisen tiedoston muuttaminen exe muotoon kävi helposti pyinstaller ohjelman avulla, joka siis toimii tekstikonsolissa...

¤¤¤
Mutta joo... Nyt on siis tekstipohjainen ohjelma perusversiona valmis niin, että siitä on exe muotoinen pikalinkki työpöydällä, ja kun pitää laskea jalkapallon vedonlyöntikohteiden todennäköisyyksiä, kertoimia ja odotusarvoja, niin homma onnistuu yhdellä klikkauksella...

Jatkokehittelyn kannalta pitänee joskus lisätä ohjelmaan exception handling juttuja, eli sellaisia juttuja jotka pitää huolen siitä, että jos vaikkapa ohjelmaan syöttää tietoja väärässä muodossa (desimaalit pitää erotella pilkun sijaan pisteellä esimerkiksi) niin ohjelma ei tykkää kyttyrää...

Mut joo, nyt on alku Python ohjelmoinnin kiehtovaan maailmaan sujunut hienosti! Tästä on hyvä jatkaa...

^ Vastaa Lainaa


geeli
3718 viestiä

#30 kirjoitettu 03.10.2020 10:57

Eli avaan vähän tuota globaalin muuttujan käsitettä:

Jos funktion sisällä on luotu muuttuja ja annettu sille arvo, niin se ei näy funktion ulkopuolelle. Tämän takia muuttujat viedään funktioon useinmiten funktion parametreina. Voidaan myös huomata, että Pythonissa käytetään nimitystä funktio, kun taas Javassa puhutaan metodeista.

Globaali muuttuja näkyy kuitenkin kaikkialle siis myös funktion ulkopuolelle.

Tässä lisää asiasta: https://www.geeksforge...

Ja tällä kertaa on kyseessä tuoretta tietoa ja koodia, koska tämä sisältö on päivitetty viimeksi 5.8.2020.

Olio-ohjelmoinnissa, jos siihen joskus törmätään, määritellään aksessorit, eli metodit, joilla luokkien arvoja, eli käytännössä muuttujien arvoja, päästään asettamaan sekä lukemaan eli niinsanotut "getterit" ja "setterit".

Olio-ohjelmointiin liittyy paljon asioita, mutta ei vielä ainakaan mennä niihin.

^ Vastaa Lainaa


Funereal
2858 viestiä

#31 kirjoitettu 03.10.2020 14:14

Jos nyt mitään yleistä neuvoa voi antaa, niin suosittelen heti alusta opettelemaan ajattelemaan kirjoitetun koodin modulaarisuutta. Tarkoittaa siis sitä, että koodi muovautuu hyvin, jos haluaa alkaa käyttää sitä eri tavalla, ja palasien lainaaminen projektin sisällä ja myös projektista toiseen on helpompaa. Esim. jos joskus haluatkin tuolla ohjelmallasi käsitellä isompaa määrää pelituloksia kerralla, niin tätä työtä helpottaisi, jos lähtökohtaisesti jo erottaisi inputin antamisen, tulosten tulostamisen ja laskemisen toisistaan.

Nimeämisestä sen verran, että koodin luettavuus on tärkeintä, etenkin nykyään kun IDEt automaattisesti täydentävät pitkätkin muuttujanimet. Esim. phdrawsr -> prob_home_draw_normalized_rounded olisi huomattavasti helpompi lukea. Pythonissa on konventiona nimetä muuttujat ja funktiot alaviivalla erotettuna, vaikka makuasiahan se on, miten muuttujansa nimeää. Näyttää vaan hassulta, jos kaikissa ulkoisissa kirjastoissa on eri nimeämistyyli kuin omassa projektissa.

Tuo 79 merkkiä rivin pituusrajana on tosi vanhanaikainen. Kyllä nykynäytöillä rivinpituus voi olla yli sata merkkiä, vaikka pitäisi kahtakin koodi-ikkunaa vierekkäin.

geeli kirjoitti:
Voidaan myös huomata, että Pythonissa käytetään nimitystä funktio, kun taas Javassa puhutaan metodeista.

Tarkennuksena, että olio-ohjelmoinnissa on tapana puhua olioiden jäsenfunktioista metodeina. Ja koska Javassa ei ole muita kuin olioiden jäsenfunktioita, kaikki funktiot ovat metodeita Javassa. Myös Pythonissa olioiden jäsenfunktioita kutsutaan siis metodeiksi.

geeli kirjoitti:
Olio-ohjelmoinnissa, jos siihen joskus törmätään, määritellään aksessorit, eli metodit, joilla luokkien arvoja, eli käytännössä muuttujien arvoja, päästään asettamaan sekä lukemaan eli niinsanotut "getterit" ja "setterit".

Tämä on hyvin Java-lähtöinen toteamus. Esim. C#:ssa field-getter-setter-patternin korvaa propertyt. Oikeastaan useimmissa tapauksissa ei ole mitään syytä kirjoittaa gettereitä ja settereitä (eikä sitä esim. JavaScriptissä ole ollut tapana tehdä), mutta se on Javassa niin vahva konventio, että sitä ei kannata rikkoa (esim. reflektioihin perustuvat kirjastot käytännössä vaativat konvention noudattamista).

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#32 kirjoitettu 03.10.2020 14:40

Funereal kirjoitti:


Jos nyt mitään yleistä neuvoa voi antaa, niin suosittelen heti alusta opettelemaan ajattelemaan kirjoitetun koodin modulaarisuutta. Tarkoittaa siis sitä, että koodi muovautuu hyvin, jos haluaa alkaa käyttää sitä eri tavalla, ja palasien lainaaminen projektin sisällä ja myös projektista toiseen on helpompaa. Esim. jos joskus haluatkin tuolla ohjelmallasi käsitellä isompaa määrää pelituloksia kerralla, niin tätä työtä helpottaisi, jos lähtökohtaisesti jo erottaisi inputin antamisen, tulosten tulostamisen ja laskemisen toisistaan.

Nimeämisestä sen verran, että koodin luettavuus on tärkeintä, etenkin nykyään kun IDEt automaattisesti täydentävät pitkätkin muuttujanimet. Esim. phdrawsr -> prob_home_draw_normalized_rounded olisi huomattavasti helpompi lukea. Pythonissa on konventiona nimetä muuttujat ja funktiot alaviivalla erotettuna, vaikka makuasiahan se on, miten muuttujansa nimeää. Näyttää vaan hassulta, jos kaikissa ulkoisissa kirjastoissa on eri nimeämistyyli kuin omassa projektissa.

Tuo 79 merkkiä rivin pituusrajana on tosi vanhanaikainen. Kyllä nykynäytöillä rivinpituus voi olla yli sata merkkiä, vaikka pitäisi kahtakin koodi-ikkunaa vierekkäin.


Kiitoksia vinkeistä... Aion jossakin vaiheessa kun kerkiän, niin kirjoittaa tuon ohjelman uudestaan, ja käyttää muuttujien nimeämisessä tuota pidempää muotoa, niin pääsee treenaamaan sen käyttöä....

Tuo koodin modulaarisuus on kanssa varmaankin hyvin tärkeää...

Kirjoitit että: "jos lähtökohtaisesti jo erottaisi inputin antamisen, tulosten tulostamisen ja laskemisen toisistaan."

Onko sulla vinkkiä antaa, miten tuon toteuttaisi käytännössä? Olisko siis tarkoitus laittaa nuo eri tiedostoihin, vai jotenkin organisoida tuo erottelu sen yhden tiedoston sisällä? Varsinkin jos on tällaisesta alle 200 rivin ohjelmasta kyse?

^ Vastaa Lainaa


Funereal
2858 viestiä

#33 kirjoitettu 04.10.2020 00:15

IT kirjoitti:

Kirjoitit että: "jos lähtökohtaisesti jo erottaisi inputin antamisen, tulosten tulostamisen ja laskemisen toisistaan."

Onko sulla vinkkiä antaa, miten tuon toteuttaisi käytännössä? Olisko siis tarkoitus laittaa nuo eri tiedostoihin, vai jotenkin organisoida tuo erottelu sen yhden tiedoston sisällä? Varsinkin jos on tällaisesta alle 200 rivin ohjelmasta kyse?


Yksi esimerkki olisi vaikka vain laittaa laskennat omaan funktioonsa, joka palauttaa halutut tulosarvot. Tällöin saman laskentafunktion voisi liittää (import-komennolla) toiseen ohjelmaan, joka ottaa lähtötiedot tai tulostaa tulokset eri tavalla, ilman että uusia ominaisuuksia tarvitsee implementoida erikseen kumpaankin versioon.

En nyt välttämättä implikoi, että näin haluaisit koskaan tehdä. On vain hyvä alusta asti hahmottaa koodin uudelleenkäytettävyyttä ja ylläpidettävyyttä, mihin liittyy vahvasti tällainen modulaarinen ajattelutapa. Myös siinä vaiheessa, kun ohjelman monimutkaisuus ja koko kasvaa, on hyvä, että osaa jakaa koodia järkevän kokoisiin itsenäisiin osiin.

^ Vastaa Lainaa


veezay
bassofriikki
7641 viestiä
Luottokäyttäjä

#34 kirjoitettu 24.10.2020 01:56 Muok:24.10.2020 02:33

IT kirjoitti:
Mutta joo... Tässä ketjussa on lupa keskustella kaikesta ohjelmointiin liittyvästä... Sana on niin sanotusti vapaa...

long story short, oon ollut aina kiinnostunut sekä äänestä että ohjelmoinnista. lapsuudessa amigan ja erityisesti ekan win98-koneen ansiosta digitaalinen signaaliprosessointi on kiehtonut ihan hemmetisti. ja mikäpä ois hauskempaa kuin yhdistää kaks omaa harrastusta, musiikki ja ohjelmointi!

fast forward parikyt vuotta nykyisyyteen, ja oon viimeisen vuoden aikana vihdoin opetellut c++ ja kirjottanut sillä kahta efektiplugaria, joista toinen fysiikkamallintaa vinyylisoundia, ja toinen matkii FM-radiosoundia simuloimalla mitä signaalille tapahtuu siitä hetkestä kun se lähtee lähetysstudiosta siihen hetkeen kun se vastaanotetaan radioon.

en odota kummastakaan plugarista mitään menestyksiä, jos joskus saan niitä myyntiin. tykkään kuitenkin siitä, että oon saanut pelkästään matematiikan ja logiikan avulla tapahtumaan jotain, mikä kuulostaa ajatuksena melko monimutkaiselta. kaikki on mahdollista pelkästään ohjelmoimalla, kunhan vaan keksii mitä ja miten tekee (ja on tarpeeksi tehoa, köh).

geeli kirjoitti:
By the way: jos tulee jotain ongelmia koodin kanssa, niin voi kysyä tässäkin jotain tai jos haluat että avaan jotain aihetta niin varmasti onnistuu. Ja tuntuu olevan niin, että täältä Mikseristä löytyy muitakin, jotka osaa koodata (kuten Funereal ja veezay)...

joo, tosin mä en oo kirjottanut ollenkaan pythonia, mutta tietysti pseudokoodina tai loogisesti auki kirjotettuna voin ehdottaa ratkaisuita ongelmiin, jos sellasia tulee jollekulle vastaan. Funerealiin voi ainakin vahvasti luottaa koska sen osaaminen on monella osa-alueella mua parempi.

^ Vastaa Lainaa


AnttiJ
Jyrkimmät
Mahalaskut

6833 viestiä

#35 kirjoitettu 24.10.2020 07:51

Veezay: kysyn vaan ihan mielenkiinnosta, vaikka en asiasta mitään ymmärräkään, onko sinulla joku ihan uusi ohjelmointitekninen kuningasajatus tai lähestymistapa jolla pystyt erottautumaan markkinoilla olevista plugareista jos pistät tuotteen joskus myyntiin?

^ Vastaa Lainaa


IT
IT Resurrected
13563 viestiä

#36 kirjoitettu 24.10.2020 10:43

veezay kirjoitti:

long story short, oon ollut aina kiinnostunut sekä äänestä että ohjelmoinnista.

fast forward parikyt vuotta nykyisyyteen, ja oon viimeisen vuoden aikana vihdoin opetellut c++ ja kirjottanut sillä kahta efektiplugaria, joista toinen fysiikkamallintaa vinyylisoundia, ja toinen matkii FM-radiosoundia simuloimalla mitä signaalille tapahtuu siitä hetkestä kun se lähtee lähetysstudiosta siihen hetkeen kun se vastaanotetaan radioon.

en odota kummastakaan plugarista mitään menestyksiä, jos joskus saan niitä myyntiin.

joo, tosin mä en oo kirjottanut ollenkaan pythonia, mutta tietysti pseudokoodina tai loogisesti auki kirjotettuna voin ehdottaa ratkaisuita ongelmiin, jos sellasia tulee jollekulle vastaan. Funerealiin voi ainakin vahvasti luottaa koska sen osaaminen on monella osa-alueella mua parempi.


Hieno harrastus sulla, ja olet kaikesta päätellen sillä tasolla tossa hommassa, että tuosta sun projektista saattaa tulla (tai tulee) jopa valmista...

Näen jo mielessäni pienen nettisivuston, jonka nimi on "veezay audio" ja kaikki tietty pienellä kirjoitettuna... Ja tosta myyntihommasta sen verran, että ehkä paras vaihtoehto uudelle firmalle saada plugarit myyntiin ja jakeluun, olisi se että ne olisi niputettu jonkun muun softan taikka raudan kylkiäisiksi... Mulla tuli esim. ton Focusriten Scarlett Solon mukana jos jonkinmoista ilmaista softaa mukana, ja siinä oli mukana esim. kompressori ja EQ plugarit myös...

Mitä tulee tohon omaan Python projektiin, niin hiljaa hyvä tulee... Mä olen aika lailla täysi aloittelija, vaikka noin 10 vuotta sitten jo silloin vähän näitä alkeita opettelin Javalla... Se kaikki on unohtunut lähes tyystin, mutta nyt tuli eilen itse asiassa mun tilaama Python kirja postin mukana... Tää vaan että tämän rakenne muistuttaa enemmän tuollaista "Dictionary" tyyppistä opusta kuin oppikirjaa...

Ja sitten tuon vedonlyönti-innostuksen nyt tasaannuttua innostuin taas musiikin pariin, ja latasin itse asiassa eilen Reaper 6 softan ilmaisen kokeiluversion omalle koneelle... Tarkoittaa siis sanoa sitä, että mun ajasta kilpailee nyt useampi mielenkiintoinen harrastus... Silti, yritän tota Python ohjelmointia myös opetella kaiken muun sivussa edelleen, ja varmasti kysyn neuvoja sultakin tässä ketjussa, jos niitä joskus tarvitsen...

^ Vastaa Lainaa


veezay
bassofriikki
7641 viestiä
Luottokäyttäjä

#37 kirjoitettu 24.10.2020 11:11

AnttiJ kirjoitti:
Veezay: kysyn vaan ihan mielenkiinnosta, vaikka en asiasta mitään ymmärräkään, onko sinulla joku ihan uusi ohjelmointitekninen kuningasajatus tai lähestymistapa jolla pystyt erottautumaan markkinoilla olevista plugareista jos pistät tuotteen joskus myyntiin?

on. kaikki mun testaamani vinyyliplugarit (ehkä wavesin abbey roads vinyliä lukuunottamatta jonka soundiin en ite ollu tyytyväinen) lisää vain samplatun vinyylirahinan mukaan, saattaa vaimentaa taajuusvasteesta jotain ja/tai lisää jonkun simppelin saturaation, mut mulla ei oo mitään sampleja, vaan kaikki tapahtuu mallintamalla neulaprosessi fyysisesti. sama radioplugarissa, signaaliin ei vaan lisätä kohinaa, vaan se prosessoidaan broadcast-prosessoijien tapaan ja moduloidaan ja demoduloidaan jolloin se on lähempänä soundia joka se oikeastikin on.

IT kirjoitti:
Näen jo mielessäni pienen nettisivuston, jonka nimi on "veezay audio" ja kaikki tietty pienellä kirjoitettuna... Ja tosta myyntihommasta sen verran, että ehkä paras vaihtoehto uudelle firmalle saada plugarit myyntiin ja jakeluun, olisi se että ne olisi niputettu jonkun muun softan taikka raudan kylkiäisiksi...

nää on nyt ainakin aluks rack extensioneita niin myynti tapahtuu reason studiossin omassa kaupassa, niitä harvemmin on lähetty niputtamaan minkään raudan kaveriks.

^ Vastaa Lainaa


AnttiJ
Jyrkimmät
Mahalaskut

6833 viestiä

#38 kirjoitettu 24.10.2020 13:38

veezay kirjoitti:
AnttiJ kirjoitti:
Veezay: kysyn vaan ihan mielenkiinnosta, vaikka en asiasta mitään ymmärräkään, onko sinulla joku ihan uusi ohjelmointitekninen kuningasajatus tai lähestymistapa jolla pystyt erottautumaan markkinoilla olevista plugareista jos pistät tuotteen joskus myyntiin?

on. kaikki mun testaamani vinyyliplugarit (ehkä wavesin abbey roads vinyliä lukuunottamatta jonka soundiin en ite ollu tyytyväinen) lisää vain samplatun vinyylirahinan mukaan, saattaa vaimentaa taajuusvasteesta jotain ja/tai lisää jonkun simppelin saturaation, mut mulla ei oo mitään sampleja, vaan kaikki tapahtuu mallintamalla neulaprosessi fyysisesti. sama radioplugarissa, signaaliin ei vaan lisätä kohinaa, vaan se prosessoidaan broadcast-prosessoijien tapaan ja moduloidaan ja demoduloidaan jolloin se on lähempänä soundia joka se oikeastikin on.


Kun olet selvästi miettinyt tuota prosessia, niin osaat ehkä kertoa syyn siihen miksi vinyylilevyejn soundi tuntuu jotenkin erilaiselle (tai niin kuin muutamat sanovat: lämpimämmälle) kuin CD-levyillä. Onko tuo tunne sittenkin pelkkää kuvitelmaa vai johtuuko se pelkästään erilaisesta toteutustavasta (fyysinen neula vs. CD:n lukusysteemi) vai onko siinä ehkä vielä jotain muutakin mukana.

^ Vastaa Lainaa


veezay
bassofriikki
7641 viestiä
Luottokäyttäjä

#39 kirjoitettu 24.10.2020 14:40 Muok:24.10.2020 14:43

AnttiJ kirjoitti:
Kun olet selvästi miettinyt tuota prosessia, niin osaat ehkä kertoa syyn siihen miksi vinyylilevyejn soundi tuntuu jotenkin erilaiselle (tai niin kuin muutamat sanovat: lämpimämmälle) kuin CD-levyillä. Onko tuo tunne sittenkin pelkkää kuvitelmaa vai johtuuko se pelkästään erilaisesta toteutustavasta (fyysinen neula vs. CD:n lukusysteemi) vai onko siinä ehkä vielä jotain muutakin mukana.

se kuulostaa erilaiselta koska se on erilainen - ei oo siis kuvitelmaa. kaikissa niissä mekaanisissa prosesseissa joita on levyn valmistuksesta aina sen kuunteluun asti on epätarkkuuksia, jotka aiheuttaa ääneen käytännössä säröä, joka korostuu erityisesti korkeissa äänissä. neulan on vaikeampi seurata suuria ja nopeita muutoksia (=voimakkaita ja korkeita ääniä) urassa, jolloin tuloksena on muun muassa pehmeämmät ja vähän "muussaantuneet" diskantit, riippuen toki levyn ja neulan iästä, puhtaudesta, ja ylipäänsä käyttösäädöistä kuten neulapaino. digitaalinen ääni cd:llä on prikulleen sellainen kuin se on studiosta lähtenyt, vinyyliä kuunnellessa se sama ääni säröytyy matkan varrella. se särö on saatu kaikkien vinyylitekniikan standardien ja suunnitteluprosessien kautta sellaiseksi kompromissiksi, että se aiheuttaisi mahollisimman vähän kuultavia virheitä äänessä ja että levylle mahtuisi kuitenkin järkevän mittaisesti musiikkia, ja se särö mikä on jäljellä, on tosi usein erittäin miellyttävä korvalle.

tl;dr: vinyyli kuulostaa paremmalta koska se on teknisesti digitaalisia paskempi formaatti.

^ Vastaa Lainaa


AnttiJ
Jyrkimmät
Mahalaskut

6833 viestiä

#40 kirjoitettu 24.10.2020 15:32

Kiitos V! Tuo selvensi asiaa eli vinyylin toisenlaiseen kuuloaistimukseen on kuin onkin todellinen ja relevantti syy.

^ Vastaa Lainaa

1 2 Seuraava >

Vastaa Aloita uusi keskustelu