Dowolna liczba wartości
Inżynierowie cały dzień sprawdzają średnie: trzy wyrywkowe odczyty wpisane ręcznie, cały przelot z bazy danych, czasem tylko dwie liczby. Funkcja, która chce listy, sprawia, że każde z tych wywołań jest trochę bardziej niezgrabne, niż musiałoby być.
Napisz średnią, która przyjmuje wartości tak, jak przychodzą, a potem daj jej opcję zaokrąglania.
Ukończ etap 1, aby odblokować ten etap.
Napisz average(*values), która przyjmuje dowolną liczbę liczb i zwraca ich średnią. Wywołaj ją z trzema luźnymi wartościami, a potem z rozpakowaną listą readings, i wypisz:
Trzy wyrywkowe pomiary: 401.0 Cały przelot: 419.5
W funkcji values to krotka, więc działają na niej sum() i len(). W drugim wywołaniu average(*readings) przekazuje pięć odczytów jako pięć osobnych argumentów.
Ukończ etap 1, aby odblokować ten etap.
Dodaj opcję zaokrąglania, decimals=1, po *values i zwracaj None, gdy nie ma żadnych wartości. Zaokrąglij cały przelot do dwóch miejsc i dodaj wywołanie bez niczego w środku:
Trzy wyrywkowe pomiary: 401.0 Cały przelot: 419.5 Brak wartości: None
Ponieważ stoi po *values, decimals można przekazać tylko po nazwie: average(*readings, decimals=2).
Podpowiedzi
Dowolna liczba argumentów *args
# *args - dowolna liczba argumentów
def sensor_report(*readings):
"""Przetwarza dowolną liczbę odczytów."""
print(f"Otrzymano {len(readings)} odczytów:")
for i, reading in enumerate(readings, 1):
print(f" Sensor {i}: {reading}")
if readings:
average = sum(readings) / len(readings)
print(f"Średnia: {average:.2f}")
print()
# Różna liczba argumentów
sensor_report(10, 15, 12)
sensor_report(20, 18, 22, 19, 21)
sensor_report(100)
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].