Last active
December 22, 2016 16:02
-
-
Save dz0/748bc18ad5dae7a34b2e67bb24f189dd to your computer and use it in GitHub Desktop.
kaip skaičiuot konkrečios prekės bendrą kiekį? (prikimą iškėlėm į atskirą funkciją)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Užduotis: | |
| # suprogramuot parduotuvės imitaciją | |
| # Duomenys: | |
| # prekė: pavadinimas, kaina | |
| # preke = { "pavadinimas": "duona", "kaina": 0.7 } | |
| # pelnas = 0 | |
| # kiek = 2 | |
| # pelnas += preke["kaina"] * kiek # parduodam kelis vienetus | |
| # print( pelnas ) | |
| import json # patogus formatas apsikeist duomenim (laabai panašus į Pythono duomenų aprašus) | |
| prekes = json.loads( open("prekes.json").read() ) # iš JSON failo užkraunam duomenis | |
| from pprint import pprint # "pretty print" -- gražiai atspausdina | |
| pprint(prekes) | |
| # Prisiminkim funkcijas | |
| def daryk_prekiu_indeksa(tiekejas): # gauna tiekėjo reikšmę | |
| indeksas = {} # tuščias žodynas | |
| for p in prekes: # jį užpildysim pagal turimą sąrašą | |
| if p['tiekejas'] == tiekejas or tiekejas=="": | |
| indeksas[ p["pavadinimas"] ] = p["kaina"] | |
| # indeksas[ pavadinimas ] = kaina | |
| print ("\nPrekių indeksas tiekėjui", tiekejas) | |
| pprint ( indeksas ) | |
| print() # tuščia eil. | |
| return indeksas # grąžina suformuotą rezultatą | |
| for t in ["A" ,"B", "C"]: | |
| daryk_prekiu_indeksa( t ) | |
| prekiu_indeksas = daryk_prekiu_indeksa( "" ) | |
| def pirkimas(): | |
| pelnas = 0 | |
| krepselis = {} # | |
| user = input("Kas tu?: ") | |
| # parduodam 3 kartus po kažką | |
| for k in range(3): | |
| kas = input("Ką pirksite: ") | |
| # užduotis 1: paklausti kiek vienetų perka ir pagal tai skaičiuot | |
| kiek = 1 # int(input("Kiek:")) | |
| # 2: patikrinti ar prekė yra, prieš paimant jos kainą | |
| # jei nėra -- parašyt pranešimą | |
| print( kiek, kas, "kainuos", kiek*prekiu_indeksas[kas] ) | |
| pelnas += prekiu_indeksas[kas]*kiek | |
| # 3: pasirinktas prekes sudėt į "krepšelį" | |
| # jeigu krepsely to dalyko dar ner | |
| if not kas in krepselis: | |
| krepselis[kas] = 0 | |
| krepselis[kas] += kiek # įdedam naują info | |
| # print("Pelnas " , pelnas) | |
| print("Pelnas %3.1f" % pelnas) # kad suapvalintų iki vieno po kablelio | |
| print( "Krepselis:", krepselis ) | |
| print( "pavertus į json", json.dumps( krepselis ) ) | |
| # įrašom į failą | |
| with open(user+"_pirkimai.json", 'a') as f: | |
| f.write( json.dumps( krepselis ) + "\n" ) | |
| # pirkimas() # galima iškviesti | |
| import os | |
| def apibendrink_bizni(preke): | |
| pelnas = 0 | |
| bendras_kiekis = 0 # užduotis -- suskaičiuoti bendrai parduotą kiekį pagal prekės pavadinimą (preke) | |
| for fname in os.listdir("."): | |
| if not fname.endswith("_pirkimai.json"): | |
| continue # reiškia šiam kartui praleisti tolimesnius veiksmus | |
| with open(fname, 'r') as f: # 'r' -- read -- skaitysim fialą | |
| ### vienam user'iui | |
| # užduotėlė: kaip pamatyt pelną iš kiekvieno user'io, ir bendrą pelną | |
| user_pelnas = 0 | |
| # po eilutę iš failo | |
| for row in f.readlines(): # nuskaitom visas eilutes į sąrašą ir imam po vieną | |
| d = json.loads( row ) # iš teksto pasiverčiam į struktūruotus duomenis (šiuo atveju, žodyną) | |
| print( fname, d ) # galim pasitikrint, ką turim | |
| # po elementą iš eilutės | |
| for pavadinimas, kiekis in d.items(): # iš žodyno imam pavadinimas:kiekis poromis | |
| pelnas += prekiu_indeksas[pavadinimas]*kiekis # didinam pelną | |
| user_pelnas += prekiu_indeksas[pavadinimas]*kiekis # didinam pelną | |
| if pavadinimas == preke: | |
| bendras_kiekis += kiekis | |
| print(fname, user_pelnas) | |
| ### | |
| print("Pelnas", pelnas) | |
| print("Bendras", preke, "kiekis:", bendras_kiekis) | |
| apibendrink_bizni("mesa") # iškviečiam, kad vykdytų | |
| class Pirkejas(): | |
| def __init__(self, vardas): # inicializavimo funkcija ("konstruktorius") | |
| self.vardas = vardas # self su tašku nurodo, kad duomenys priskirti būtent tam objektui/pirkėjui | |
| def apibendrink_pirkeja(self): | |
| self.kiekiai = {} # žodynas pirktų prekiu kiekiams | |
| with open(self.vardas+"_pirkimai.json", 'r') as f: # 'r' -- read -- skaitysim fialą | |
| ### vienam user'iui | |
| # po eilutę iš failo | |
| for row in f.readlines(): # nuskaitom visas eilutes į sąrašą ir imam po vieną | |
| d = json.loads( row ) # iš teksto pasiverčiam į struktūruotus duomenis (šiuo atveju, žodyną) | |
| # po elementą iš eilutės | |
| for preke, kiekis in d.items(): # iš žodyno imam pavadinimas:kiekis poromis | |
| if preke in self.kiekiai: # jeigu prekė yra pradėta skaičiuoti | |
| self.kiekiai[preke] += kiekis # jos kiekį papildom | |
| else: | |
| self.kiekiai[preke] = kiekis # arba priskiriam pradinį kiekį | |
| print() | |
| print("Pirkėjo", self.vardas, "kiekiai:", self.kiekiai) | |
| # UŽDUOTIS: čia iškviesti funkciją "megstamiausia" | |
| self.megstamiausia() | |
| # sukurti funkciją | |
| def megstamiausia( self ): | |
| # užduotis -- rast mėgstamiausią | |
| # naudojam List comprehension, žr https://docs.google.com/document/d/15bBFcodY6f6aZ6D2Dco94fwbo2OBeZKPS-8gq7CsPAs/edit | |
| # kiekai.items duoda poras, kur pavadinimas pirmiau, o mes pasidarom, kad kiekis būtų pirmiau poroje, nes rikiuojant žiūrės pirmiausia jį | |
| sarasas_paga_kieki = [[kiekis, preke] for preke, kiekis in self.kiekiai.items()] | |
| # surikiuojam sąrašą | |
| sarasas_paga_kieki.sort(reverse=True) | |
| # print( "Mėgstamiausia prekė:", sarasas_paga_kieki[0][1] ) | |
| self.megstamiausia_preke = sarasas_paga_kieki[0][1] | |
| print("Pirkėjo", self.vardas, "mėgstamiausia prekė:", self.megstamiausia_preke ) | |
| p1 = Pirkejas("jurgis") | |
| p2 = Pirkejas("jonas") | |
| p1.apibendrink_pirkeja() | |
| p1.megstamiausia() # prieš ją turi būt iškviestas "apibendrink_pirkeja", nes kitaip nebus sukurtas self.kiekiai žodynas | |
| p2.apibendrink_pirkeja() | |
| def bendras_pelnas_pagal_pirkejus_objektus( pirkejai ): | |
| pelnas = 0 | |
| for p in pirkejai: | |
| p.apibendrink_pirkeja() # kad paruoštų p.kiekiai | |
| for preke, kiekis in p.kiekiai.items(): | |
| pelnas += kiekis * prekiu_indeksas[preke] # kiekis * prekes kaina | |
| print("Bendras pelnas", pelnas) | |
| bendras_pelnas_pagal_pirkejus_objektus( [p1, p2, Pirkejas("as")] ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment