Jako parametry podajemy ilość jednostek oraz ilość wymiarów (długość, powierzchnia, objętość). Ilość jednostke musi być nieujemna a liczba wymiarów to (1,2,3). Jeżeli warunki nie są spełnione funkcja podaje jedynie informację o problemie i kończy działanie
def m2feet(m,unit=2):
if m < 0:
print("Wartość nie może być ujemna")
return
if unit not in (1,2,3):
print("Nie znana wielkość")
return
feet=1/0.3001
return m*feet**unit
m2feet(3.1413)
Napisać funkcję obliczającą pole trapezu. Do obliczenia przekazać słownik a nie pojedyncze wartości. Funkcja musi sprawdzać czy przekazano wartości nieujemne.
def poleTrapezu(a,b,h):
return (a+b)/2*h
trapez={"a":10,"b":12,"h":7}
poleTrapezu(**trapez)
Obliczyć pole pierścienia jako różnicę pomiędzy polem koła zewnętrznego a wewnętrznego. Koło wewnętrzne może mieć zerowy promień (domyślnie). Co zrobić w sytuacji jeżeli użytkownik funkcji pomyli kolejność promieni?
def polePierscienia(outer,inner=0):
if outer == inner :
return 0
pi=3.141
return pi * abs(outer**2 - inner**2)
polePierscienia(10,20)
Funkcja sprawdza argumenty z listy, która jest przekazywana albo jako lista albo ciąg wartości i jeżeli wartość jest typu numerycznego używa do wyliczenia średniej inaczej pomija. Funkcja musi być odporna na sytuacje, gdy liczba elementów do obliczenia średniej wynosi 0 (dzielenie przez 0)
def srednia(*values):
suma = 0
num = 0
for i in values:
if type(i) in (int,float):
suma += i
num += 1
if num>0:
return suma/num
else:
return 0
lst =[20,11,10.5,"3",True,"1210a","lupa",5.4,3.1]
srednia(*lst)
Do funkcji przekazywana jest linia jako lista krotek, gdzie każda krotka to wspórzędne punktu. Linia tym się różni od pierścienia, że jest otwarta, tj ostatni element różni się od pierwszego. W pierścieniu pierwszy i ostatni element mają tę samą wartość. Do wykoania funkcji wykorzystać możliwość przekazywania obiektów złożonych przez referencję.
punkty = [(1,3),
(2,4),
(5,5),
(6,2),
(4,6)]
punkty = [(1,3),
(2,4),
(5,5),
(6,2),
(4,6)]
def closeLine(line):
line.append(line[0])
closeLine(punkty)
punkty
Funkcja pobiera listę stanów morza i zwraca listę wartości logicznych (True), gdzie występowały sztormy oraz False jezeli nie wystąpił oraz podaje ich liczbę w formie komunikatu końcowego. Zastanowić się w jaki sposób zastosować operator trójkowy.
morze = [501,509,531,555,529,511,535,538,505,517]
morze = [501,509,531,555,529,511,535,538,505,517]
def sztormy(morze,sztorm=530):
sztormy=[]
for m in morze:
sztormy.append(False if m < sztorm else True)
print("liczba sztormów to " + str(sum(sztormy)))
return sztormy
sztormy(morze)
Napisać funkcję przeliczającą parę wspórzędnych w stopniach dziesiętnych na system geograficzny, gdzie minus oznacza półkulę zachodnią i południową. Ponieważ proces przeliczania stopni dziesietnych na geograficzne wykonywany jest dwa razy rozważyć rozbicie funkcji na dwie: funkcji głównej i funkcji przeliczającej stopnie dziesiętne na geograficzne. Jak rozpoznać półkulę i co zrobić ze znakiem minus.
def d2g(x):
dec = int(x)
m = (x*60)%60
mnt = int(m)
s = (m*60)%60
sec = int(s)
return str(dec) + "d" + str(mnt) + "m" + str(sec) +"s"
def decimal2geographic(x,y):
lnh = "W" if x < 0 else "E"
x=abs(x)
lon = d2g(x)
lon = lnh + lon
lth = "S" if y < 0 else "N"
y=abs(y)
lat = d2g(y)
lat = lth + lat
return lon + " " + lat
decimal2geographic(153.981,-33.211)
Funkcja musi sprawdzić czy argumentami funkcji są punkty tj krotki dwóch wartości a następnie zaostosować wzór na odległość euklidesową. W funkcji warto zastosować zmienne pomocnicze, które obliczą długości x i y
def distance(p1,p2):
if len(p1) != 2 or len(p2) != 2:
return "Wrong point format"
x=p1[0]-p2[0]
y=p1[1]-p2[1]
return (x**2+y**2)**(1/2)
distance((21.13,14.55),(66.33,10.01))
mamy linię zapisaną jako listę punktów (krotek) aby obliczyć jej długość, należy dodawać do siebie odległości pomiędzy kolejnymi punktami, zaczynając od odległości pomiędzy punktem poprzednim a następnym. Aby to wykonać, każdy punkt, który był następny musi zmienić się w kolejnym kroku iteracji w poprzedni.
punkty = [(1,3),
(2,4),
(5,5),
(6,2),
(4,6)]
punkty = [(1,3),
(2,4),
(5,5),
(6,2),
(4,6)]
def lineLength(points):
prev = points[0]
dist=0
for point in points:
dist += distance(prev,point)
prev = point
return dist
lineLength(punkty)