Untitled
unknown
python
2 years ago
2.6 kB
4
Indexable
from random import randint kasa_fiskalna = { 1: 0,2: 0, 5: 0, 10: 0, 20: 0, 50: 0, 100: 0, 200: 0, 500: 0, 1000:0, 2000: 0, 5000: 0, 10000: 0, 20000: 0, 50000: 0 } # Losowe wygenerowanie stanu kasy. Dodanie do słownika dla pewnych kluczy losowych wartości def generowanieStanuKasy(): for klucz in kasa_fiskalna: klucz_nominal = int(klucz) / 100 kasa_fiskalna[klucz] = int(input('Podaj ilość nominału %s [zł]:' % klucz_nominal)) #kasa_fiskalna[klucz] = randint(0,20) # Stworzenie listy z nominałami ze słownika który losowo wygenerował jakieś banknoty def generowanieTablicyZNominalamiZeStanuKasy(): tablicaNominalow = [] for klucz, wartosc in kasa_fiskalna.items(): tablicaNominalow.extend([klucz] * wartosc) return tablicaNominalow # Podanie kwoty do zapłaty. Aktualizacja tablicy z nominałami. Wyliczenie reszty potrzebnej do wydania def obliczSumeDoWydania(tablicaNominalow): kwotaDoZaplaty = int(float(input('Kwota do zapłaty w złotówkach (grosze podaj po przecinku): '))*100) # kwota do zapłaty zamieniona na grosze sumaZapłacona = 0 print("Kwota do zapłaty: %s [gr] \n\n" % kwotaDoZaplaty) print("Rozpoczynam pobieranie banknotów od klienta: \n\n") while sumaZapłacona <= kwotaDoZaplaty: nominal = int(float(input('Podaj nominal w zł (w przypadku monet groszowych podaj je po przecinku):'))*100) if nominal not in kasa_fiskalna.keys(): print("Nieprawidłowy nominał - podaj nominał ponownie") continue tablicaNominalow.append(nominal) sumaZapłacona += int(float(nominal)) return tablicaNominalow, sumaZapłacona - kwotaDoZaplaty # Dynamiczny algorytm wydawania monet def wydajMonety(kwota, monety): listaPrzedzialu = [float('inf')] * (kwota + 1) listaPrzedzialu[0] = 0 wybraneMonety = [[] for _ in range(kwota + 1)] for i in range(1, kwota + 1): for moneta in monety: if moneta <= i: if 1 + listaPrzedzialu[i - moneta] < listaPrzedzialu[i]: listaPrzedzialu[i] = 1 + listaPrzedzialu[i - moneta] wybraneMonety[i] = (wybraneMonety[i - moneta] + [moneta]) return wybraneMonety[kwota] generowanieStanuKasy() tablicaNominalow = generowanieTablicyZNominalamiZeStanuKasy() tablicaNominalow, reszta = obliczSumeDoWydania(tablicaNominalow) wydane_monety = wydajMonety(reszta, tablicaNominalow) print("Wydana reszta:", wydane_monety) print("Niewydana reszta:", reszta - sum(wydane_monety))
Editor is loading...