Zadania

1. Wyliczyć średnią dla elementów z listy, tylko dla tych, które są wartościami numerycznymi (całkowite i zmiennoprzecinkowe).

Rozwiązanie wymaga zastosowania pętli po elementach listy. Instrukcja If sprawdza, czy element listy jest typu numerycznego. Długość listy do wyliczenia średniej będzie krótsza niż długość orginalnej listy. W pętli musimy zliczać zarówno sumę jak i liczbę elementów.

lista = [1.3, 4.8, "a2", 5.4, 2.222, 3, 4.1, "11", True, 3.6,  "False"]
In [1]:
lista = [1.3, 4.8, "a2", 5.4, 2.222, 3, 4.1, "11", True, 3.6,  "False"]
suma = 0
dlug = 0
for i in lista:
    if type(i) == float or type(i)==int:
        suma +=i
        dlug +=1

srednia = suma/dlug
srednia
Out[1]:
3.4888571428571433

2. W liście pomiarów opadu znaleść wartości ektremalne i zapisać je do nowej listy.

Wartość ekstremalna to ta, która różni się od średniej o min. dwa odchylenia standardowe. Rozwiązanie wymaga wyliczenia średniej i trzykrotności odchylenia standardowego, a następnie sprawdzenia każdej wartości czy przekracza wartość średnia + 3 * odchylenie standardowe

opady = [0, 2, 1, 6, 46, 10, 11, 17, 8, 4, 0, 2, 13, 11, 78, 61, 12, 8, 0, 0, 1, 2, 0, 0, 1, 0, 10]
In [2]:
opady = [0, 2, 1, 6, 17, 10, 11, 17, 8, 4, 0, 2, 13, 11, 78, 61, 12, 8, 0, 0, 1, 2, 0, 0, 1, 0, 10]

suma = 0
length = len(opady)

for i in opady:
    suma +=i
srednia = suma/length

std=0
for i in opady:
    std += (i - srednia)**2
    
std = (std**(0.5))/length

extrema=[]
for i in opady:
    if i > srednia+3*std:
        extrema.append(i)
extrema
Out[2]:
[78, 61]

3. Zaprojektować czujnik pojawiania się opadów

Dla listy opadów skrypt ma wykrywać czy w danej iteracji pojawił się opad, porównując aktualną wartość z wartością uprzednią. Jeżeli poprzednia wartość była 0 a nowa jest różna od zera emitujemy komunikat, że pojawił się opad wraz z jego wysokością

opady = [0, 2, 1, 6, 0, 10, 0, 0, 0, 4, 0, 2, 13, 0, 0, 4, 8, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10]
In [3]:
opady = [0, 2, 1, 6, 0, 10, 0, 0, 0, 4, 0, 2, 13, 0, 0, 4, 8, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10]

poprzedni = 0
for i in opady:
    if i and not poprzedni:
        print("pojawił się opad dla " + str(i))
    poprzedni = i
pojawił się opad dla 2
pojawił się opad dla 10
pojawił się opad dla 4
pojawił się opad dla 2
pojawił się opad dla 4
pojawił się opad dla 1
pojawił się opad dla 1
pojawił się opad dla 10

4. Wyświetlić odległości w liście w zależności od rozmiaru jako metry lub kilometry.

Orginalnie lista przechowuje wartości w metrach. Wynik należy podawać w metrach jeżeli mniej niż 1000 lub km jeżeli więcej niż 1000. Jeżeli więcej niż 1000 km podać w tyś km. Wynik powinien zawierać liczbę oraz jednostkę w jakiej jest liczba.

odleglosci = [132,2932,211,82302,232,323,212,3232,2320,31,323,12110,3303,12120,3221221,330,1120]
In [4]:
odleglosci = [132,2932,211,82302,232,323,212,3232,2320,31,323,12110,3303,12120,3221221,330,1120]

for o in odleglosci:
    if o >1000:
        if o > 1000000:
            print(str(o/1000000) + " tyś. km")
        else:
            print(str(o/1000) + " km")
    else:
        print(str(o) +  " m")
132 m
2.932 km
211 m
82.302 km
232 m
323 m
212 m
3.232 km
2.32 km
31 m
323 m
12.11 km
3.303 km
12.12 km
3.221221 tyś. km
330 m
1.12 km

5. Przeliczyć stopnie dziesiętne na format stopnie minuty sekundy

Nie wymaga stosowania pętli, wymaga znalezienia sposobu przeliczania stopni dziesiętnych na geograficzne

In [5]:
lon = 15.329175
lat = 45.927191

latst = int(lat)
lat = lat - latst
latmn = int(lat*60)
lat = lat*60 - latmn
latsc = int(lat*60)

latsf = "N" if lat>0 else "S"
print(latsf+str(latst) + "d" + str(latmn) + "m" + str(latsc) + "s")
N45d55m37s

6. W liście punktów znaleść najbliższy do referencyjnego

Rozwiązaniem zadania jest pętla, która wylicza odległość wg wzoru na przeciwprostokątną trójkąta (tzw odległość euklidesową) i jeżeli dla danego punktu odległość jest miejsza niż aktualnie zapisana, zapisuje nową odległość i nowy punkt, który ten warunek spełnia. Na końcu wypisujemy punkt i odległość.

punkty = [(12.1,13.9),
          (11.2,15.2),
          (10.4,16.1),
          (12.7,16.7),
          (14.5,17.8),
          (15.1,11.3),
          (13.3,16.1),
          (15.5,12.8),
          (16.2,14.6),
          (17.1,15.4)]
refer =(13.6,17.4)
In [6]:
punkty = [(12.1,13.9),
          (11.2,15.2),
          (10.4,16.1),
          (12.7,16.7),
          (14.5,17.8),
          (15.1,11.3),
          (13.3,16.1),
          (15.5,12.8),
          (16.2,14.6),
          (17.1,15.4)]
refer =(13.6,17.4)

dist = 100
for punkt in punkty:
    curDist = ((punkt[0]-refer[0])**2+(punkt[1]-refer[1])**2)**0.5
    if curDist < dist:
        szukanyPunkt=punkt
        dist=curDist

print(str(szukanyPunkt)+" "+str(dist))
(14.5, 17.8) 0.9848857801796116