Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: Tk_tools ja olio-ohjelmointi Floydin kolmion sarake

koodaaja [20.09.2021 06:42:21]

#

Tässä ohjelmassa käytetään tk_tools kirjastoa ja olio-ohjelmoinnin tekniikoita. Tämä laskee Floydin kolmion sarakkeen luvut (käyttäjä määrittää sarakkeen ja lukujen määrän). Lisäksi luvut tallennetaan sanakirjaan, jossa on avaimena merkkijono ja arvona lukulista. Kun lasketaan floydin kolmio sarake, lasketaan ensin aloittava luku, sitten lasketaan kumulatiivinen lisäys ja lopuksi lasketaan ne yhteen.

from tkinter import *
import tk_tools
from itertools import accumulate
from operator import add

class Floyd:

 #Seuraavaan sanakirjaan lisätään tietty floydin sarake (määritellään määrä).
 floydSarake = {}


 def AsetaFloydSarake(self,avain,sarake,maara):
  luku = 0
  #Lasketaan aloitusluku.
  for i in range(1,sarake+1):
   luku += i

  #Lasketaan kumulatiivinen lisäys.
  #Koska riviä edetessä lukujen määrä kasvaan, niin lisäyksen määrä kasvaa
  lisays = list(accumulate([i for i in range(sarake,sarake+maara)],add))

  #Lasketaan sarakkeen luvut.

  sarakkeenLuvut = list(map(lambda x: luku+x,lisays))
  sarakkeenLuvut.insert(0,luku)
  self.floydSarake[avain] = sarakkeenLuvut



 def LueSarake(self,avain):
  #Laitetaan sarake poistettavaan nimilappuun.
  msf.add(self.floydSarake[avain])

def Aseta():
 #Otetaan lähtötiedot.
 floyd_1 = Floyd()
 avain = teksti.get()
 sarake = int(saadinSarake.get())
 maara = int(saadinMaara.get())

 floyd_1.AsetaFloydSarake(avain,sarake,maara)


def Lue():
 avain = teksti.get()
 floyd_1 = Floyd()
 floyd_1.LueSarake(avain)

#Luodaan graafinen käyttöliittymä
root = Tk()

syotteet = Frame(root)
syotteet.pack()

#Luodaan syöttö kontrollit.

teksti = Entry(syotteet,text="Avain")
teksti.pack()

saadinSarake = DoubleVar()
saadin = Scale(syotteet,variable=saadinSarake,from_=0, to=10)
saadin.pack()

saadinMaara = DoubleVar()
saadin = Scale(syotteet,variable=saadinMaara,from_=0, to=10)
saadin.pack()

#Luodaan toiminto kontrollit.

toiminnot = Frame(root)
toiminnot.pack()

nappainAseta = Button(toiminnot,text="Aseta",command=Aseta)
nappainAseta.pack()

nappainLue = Button(toiminnot,text="Lue",command=Lue)
nappainLue.pack()


#Luodaan tulostekontrolli.
tulosteet = Frame(root)
tulosteet.pack()

msf = tk_tools.MultiSlotFrame(tulosteet)
msf.pack()

root.mainloop()

Metabolix [20.09.2021 08:55:31]

#

Tämä ei ole olio-ohjelmointia. Ainoa jäsen floydSarake on koko luokan yhteinen (ei yksittäisen olion), ja lisäksi käytät luokasta globaalia msf-muuttujaa. Luot olion aina uudestaan, kun käytät sitä, eli mitään tilaa ei säilytetä oliossa. Ei näin voi tehdä, jos oikeasti toteuttaa olio-ohjelmointia.

Luokan lisääminen koodiin ei tee siitä olio-ohjelmointia. Ihan kuin kahvinporojen lisääminen juomaan ei tee siitä kahvia. Nyt olet lisännyt lusikallisen poroja oksennuspussiin ja tarjoilet sitä kahvina.

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta