Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: Oma tietorakenne

koodaaja [13.04.2021 16:41:44]

#

Tässä esimerkissä luodaan Pythonilla tietorakenne. Tässä tietorakenteessa laitetaan tieto valmiiksi oikeaan paikkaan (sekä oikein että väärinpäin).
Tässä kuussa teen vielä keko -tai kantalukulajittelun.

import random

class Rakenne:

 def __init__(self):
  #Luodaan listat
  self.lista = [] #Suurenee
  self.lista2 = [] #Pienenee

 def lisaa(self,tieto):
  #Lisätään alkio oikeaan kohtaan
  #Ensimmäisen listan arvot suurenevat ja toisen pienenevät
  if (len(self.lista) != 0):
   i = 0
   while (tieto > self.lista[i]):
    i += 1
    if (i == len(self.lista)):
     break
   #Lisätäään
   self.lista.insert(i,tieto)

   i = 0
   while (tieto < self.lista2[i]):
    i += 1
    if (i == len(self.lista2)):
     break
   #Lisätään
   self.lista2.insert(i,tieto)
  else:
   #Lisätään alku
   self.lista.append(tieto)
   self.lista2.append(tieto)

 def tulosta(self):
 #Tulostetaan
  print(self.lista)
  print("")
  print(self.lista2)
  print("")

#Luodaan Rakenne()-olio ja käytetään sen operaatioita
r = Rakenne()
for x in range(30):
 luku = random.randrange(0,100)
 print(luku)
 r.lisaa(luku)
print("")
r.tulosta()

Lisäys 23.4. 17.47 Teen viimeistään 2.5. kantalukulajittelun

Jere Sumell [16.04.2021 06:20:26]

#

Oliomainen python.

Ohjelmoit yleisen "Rakenne" -tietotyypin pythonilla. Tuon voisi muokata vaikka lottoarvonnaksi, ja tehdä konearpoman Lottorivin tuon Rakenne -tietotyypin ilmentymällä. Se vaan, kun Veikkaus-robotilla ei voi pelata, kun taitopelejä tällä hetkellä, sekin valmistettu pythonilla, ja konearvottu lottorivi on saatavilla mahdollisuutena tarjottu Veikkauksen web-käyttoliittymässäkin.

Veikkaukselta tuli postia pari päivää sitten, että käyttoehdot muuttuneet,eikä Veikkaus enää uusien ehtojen mukaan salli bottipelaamista, mutta satunnainen eikä automatisoitu robottipelaaminen ei oman käsitykseni mukaan riko noita uusia sääntoja.

Mitä lajittelualgoritmiä ajattelit käyttää.

Mergesort taitaa olla nopein lajittelualgoritmi, kun se ratkeaa logaritmisessa ajassa, mitä tulee algoritmin aikakompleksisuuteen. Siinähän on se "Hajoita ja hallitse" -menetelmän implementointi jollekin ohjelmointikielellä, tässä tapauksessa pythonilla. Mielenkiinnolla odotan, minkälaisen lajittelualgoritmin toteutuksen olet valinnut, ja miten sen olet käytännossa toteuttanut.

Jere Sumell [21.04.2021 12:50:46]

#

Ohjelmoin ja pistin näytille jono ja pino -tietotyypit tänne Ohjelmointiputkaan inspiroituneena sinun koodistasi.

Suora linkki.


Suora linkki keskusteluun.

Jere Sumell [25.04.2021 13:29:22]

#

koodaaja kirjoitti:

Lisäys 23.4. 17.47 Teen viimeistään 2.5. kantalukulajittelun

Olenkin tässä jo odotellut uutta koodia sinulta julkaisuun. Seuraan edesottamuksiasi nyt etenkin tuon lupauksesi jälkeen noista lajittelualgoritmien julkaisusta.

Toteutatko lajittelun ja tietojen lisäämisen modulaarisena eritellen tapahtumat, vai pistätko samaan tietotyyppiin kaiken. Modulaarisuus on askel kohti uudelleenkäytettävyyttä, mikä on yksi ohjelmoinnin perusajatuksista, että hyvin suunniteltu koodi on modulaarista ja uudeleenkäytettävää.

Sain tuosta sinun ensin julkaisemasta koodistasi inspiraation tuohon jono ja pino -python koodiin, kun siinähän on sitten ensin tuo tietojen lisääminen jonkinlaiseen tietorakenteeseen, ja lajittelun ohjelmointi on seuraavana vuorossa, jos on tarvis ohjelmoida no Javalla ei ehkä niinkään, ja pythonkin käyttää tuota TimSort -lajittelumetodia, niin kolmanneksi sitten hakumetodi, kun lajitellusta listasta pitäisi loytää jokin tietty olio-muistipaikkaviittaus mahdollisimman nopeasti, niin se tulee lajittelun jälkeen hyodyllisenä vastaan suunniteltavana tai ohjelmoijan työpöydälle ongelmana.

On totta, että jos syötekoko on pieni, niin vaikka lista ei olisi lajiteltukaan, on mahdollista käydä kaikki alkioiden sisältö läpi ehkä, mutta sitten kun syötekoko kasvaa, alkioiden lukumäärä on suuri, hakuavaruus on laaja, niin alusta lähtien kannattaa kehittää se tietyn datan poimiminen lisäämisen, sen jälkeen järjestämisen ja lopulta tietyn datan poimimisesta, hakemisesta ulostuloksi. Jos syötekoko on suuri, niin ei ole kovin kustannustehokasta ajan määreen suhteen käydä läpi koko listan alkioiden sisältöä.

Reaalimaailman esimerkki, että eihän kouliintunut lukijakaan, ehkä sinäkin olet sellainen, niin ajattelet jotain korkeakoulun tenttikirjaa, joka pitäisi kirjaston laina-ajan kuukauden tai kahden viikon laina-ajan puitteissa saatua opiskeltua kirjan sisältö, niin helposti AMK:ssakin oli monella kurssilla päälle 1000 sivua vieraskielistä tekstiä tenttikirjassa, niin eihän sitä kokonaan ehdi millään sanasta sanaa tai mitään järkeä ole lukea. No, tosin korkeakouluissa on lukemiskurssi, miten niitä oman alan artikkeleita luetaan, niin jo ensimmäisiä kursseja, ja puhutaan opiskelutaitojen kehittämisestä. Mutta tuo on sama tietojenkäsittelyssä, että vaikka kaiken läpi käymällä, tai raa-alla laskentateholla selviää kaikki lopulta, mutta se on hitain metodi.

Jere Sumell [03.05.2021 21:37:15]

#

Tänään 3.5.2021 on vielä tätä mainitsemaani vuorokautta jäljellä vielä vajaat 2 ½ tuntia, melkein meni laki-alio-merkiksi, kun satuin sentään painamaan vaihto-näppäintä ensin pohjassa ennen ykkösen numeroylärivin vasemmanpuoleista näppäintä, josta saa molemmat.

Ohjelmoitko eilen tuon kantalukulajittelun, oletin, että julkaiset myös koodisi, kun lisäsit jälkeenpäin deadlinesi omaehtoisesti asetettamasi, että 2.5 vappusimojen jälkeen tulee tuotantoa.

Sama, mitä musiikkibisneksessä, olen palaavana asiakkaana täällä Ohjelmointiputkassa jonkinsortin "fani":si, tai ainakin ilmoitin innostuneena tuosta avauksestasi, että seuraajana täällä, niin mitä ravintoloitsankin leipäuukin aika pitkälle perustuu palaaviin asiakkaisiin, niin artistin leipäpuu on kiinni seuraajien volyymistä, osa niistä palaa keikoille tai ostaa levyn, mistä toimeentulo muodostuu, niin deadlinesta yleensä pidetään kiinni, etenkin jos se on itse asetettu, vaikka viihdeteollisuudessa käytetäänkin hyvin usein markkinointikikkana, joskin se on jo vanhentunutta markkinointistrategian implementointia, että tuote ei saavukkaan ajallaan markkinoille.

En haluaisi mitenkään olla sarkastinen, tai kylmäkiskoinen, vaan olen ihmisten ja eläpinen oikeuksista välittävä ja punavihreä tasa-arvon kannattaja ihmisten sosiaalisen elämän suhteen, mutta liiketalouden ja hallinnon tradenomin opinnoissa pureskelin opetettua siinä määrin paljon, että pitää pitää deadlineistä kiinni, ja palaavista asiakkaista hyvää huolta, mitä tulee asiakas-segmentointiin. En pidä kaikilta osin puhtaasti liiketalous-näkökulmasta ajattalusta, vaikka makrotaloussosiologiaan olen perehtynytkin, lähinnä minulla on punavihreä ihmisläheinen lähestymistapa makrotaloussosiologiaan, niin tämä ojhelmointiputka nyt minun yksilönä kannanottoni on lähinnä mikrotasoa, enkä tykkää harrastaa nettivihaa. Tuo "c++ -kryptaus" -säie, mikä päätyy hamaan arkistoon avaajansa pyynnöistä poistaa viesti jostain itselleni tuntemattomasta syystä, niin joku siellä vetosi sanavapauslain mukaan, että viesti pysyy tällä foorumilla. Oikein! Mitä itselläni on aikuiskasvatustiede sivuaineena tekniikan opinnoissa, niin onhan kyseisessä viestiketjussa myös kouluttava ja kasvatta näkökulma, mitä siellä joku toikin esiin, vaikka itsekin loin painetta kovemman sosiaalipornon löytämiseksi niille, jotka viestiketjua lukee jälkeenpäin.

En epäile lainkaan, että eilen olisit vapunvieton, jos sitä vietit, en tiedä miten, mutta vapunvieton jäljiltä saanutkin koodisi tuotettua, niin olisi hienoa, jos julkaisisit sen myös?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta