Skip to content

Instantly share code, notes, and snippets.

@dz0
Last active December 22, 2016 16:02
Show Gist options
  • Select an option

  • Save dz0/748bc18ad5dae7a34b2e67bb24f189dd to your computer and use it in GitHub Desktop.

Select an option

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ą)
# 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