Generowanie raportu
Część sekcji Logika i przepływ programu ścieżki Python w Coddy. Lekcja 71 z 78.
Wyzwanie
TrudnySystem zarządzania zapasami ma już zaimplementowane następujące komponenty:
- Globalny słownik
inventory, w którym:- Kluczami są nazwy produktów (ciągi znaków)
- Wartościami są słowniki zawierające:
"price": cenę produktu (liczba zmiennoprzecinkowa)"stock": aktualną ilość w magazynie (liczba całkowita)
- Funkcję
add_item(item, price, stock), która dodaje nowe produkty do zapasów - Funkcję
update_stock(item, quantity), która aktualizuje stan zapasów - Funkcję
check_availability(item), która zwraca aktualny stan zapasów
Twoim zadaniem jest zaimplementowanie funkcji sales_report(sales), która:
- Przyjmuje słownik
sales, w którym:- Kluczami są nazwy produktów
- Wartościami są sprzedane ilości
- Dla każdego produktu w słowniku sprzedaży:
- Sprawdza, czy produkt znajduje się w zapasach
- Sprawdza, czy stan zapasów jest wystarczający
- Aktualizuje zapasy, zmniejszając ich stan
- Oblicza przychód na podstawie ceny i sprzedanej ilości
- Zwraca sformatowany ciąg znaków z łącznym przychodem
Obsłuż następujące błędy:
- Jeśli produktu nie ma w zapasach, wyświetl:
"Error: Item '{item}' not found." - Jeśli stan zapasów jest niewystarczający, wyświetl:
"Error: Insufficient stock for '{item}'."
Wynik powinien być ciągiem znaków w formacie: “Total revenue: ${total:.2f}”
Dodaj (zastąp) poniższy blok kodu na końcu swojego kodu:
add_item("Apple", 0.5, 50)
add_item("Banana", 0.2, 60)
sales = {"Apple": 30, "Banana": 20, "Orange": 10} # Orange should print an error
print(sales_report(sales)) # Should output: Total revenue: $19.00
print(inventory)Spróbuj swoich sił
inventory = {}
def add_item(item, price, stock):
if item in inventory:
print(f"Error: Item '{item}' already exists.")
return
try:
inventory[item] = {"price": float(price), "stock": int(stock)}
print(f"Item '{item}' added successfully.")
except ValueError:
print("Error: Price and stock must be numeric.")
def update_stock(item, quantity):
if item not in inventory:
print(f"Error: Item '{item}' not found.")
return
try:
new_stock = inventory[item]["stock"] + int(quantity)
if new_stock < 0:
print(f"Error: Insufficient stock for '{item}'.")
else:
inventory[item]["stock"] = new_stock
print(f"Stock for '{item}' updated successfully.")
except ValueError:
print("Error: Quantity must be an integer.")
def check_availability(item):
if item not in inventory:
return "Item not found"
return inventory[item]["stock"]
add_item("Apple", 0.5, 100)
add_item("Banana", 0.2, 50)
update_stock("Apple", -20)
update_stock("Banana", 30)
print(check_availability("Apple")) # Should return 80
print(check_availability("Banana")) # Should return 80
print(check_availability("Orange")) # Should return "Item not found"Wszystkie lekcje w sekcji Logika i przepływ programu
1Odkrywanie zmiennych
StałeWielokrotne przypisania zmiennychZamiana zmiennychZmienne zastępczeZaokrąglanie liczbKonwersja na listę4Aplikacja książki kontaktów
Wyświetl menuDodaj kontakt7Zbiory — część 2
Działania matematyczne — część 1Działania matematyczne — część 2Powtórka — poszukiwanie skarbówPodzbiory i nadzbioryIterowanie po zbiorachPowtórka — śledzenie turnieju10Podstawowe składanie list
SkładniaTworzenie prostych listDodawanie warunkówUżywanie agregacji danychPowtórka – dom listPowtórka – elementy wolności13System zarządzania zapasami
Przegląd projektuDodawanie produktu2Słowniki — część 1
Czym jest słownik?Tworzenie słownikaDostęp do wartościModyfikowanie słownikówPowtórzenie — menedżer przepisów5Zaawansowane podejmowanie decyzji
Operator warunkowySprawdzanie przynależnościSprawdzanie tożsamościBłędy wcięćPowtórka — filtr wakacyjny8Menedżer rekordów uczniów
Przegląd projektuDodawanie ucznia11Zaawansowane funkcje
Zwracanie wielu wartościFunkcje lambda — część 1Funkcje lambda — część 2Wyzwanie podsumowujące — sortowanie z lambdaFunkcje rekurencyjne — część 1Funkcje rekurencyjne — część 2Podsumowanie — suma elementów zagnieżdżonej listy14Funkcje wyższego rzędu
Funkcja mapFunkcja filterPodsumowanie – walidator adresów e-mailPodsumowanie – procesor liczb3Słowniki, część 2
Metody słownikówZagnieżdżone słownikiSprawdzanie kluczyIterowanie po słownikachPowtórzenie — licznik częstotliwości9Zaawansowana agregacja danych
Używanie sumyZnajdowanie minimum i maksimumEfektywne sortowanie danychPowtórka – sortowanie słowników12Podstawowa obsługa błędów
Czym jest obsługa błędów?Blok try i exceptObsługa wielu wyjątkówPodsumowanie – błędy w koszyku zakupowymPoćwicz samodzielnie: Kompilator Python online