Živjo!
Spisati moram kodo, ki vrne identično matriko v Pythonu, pri tem pa definiramo matrike kot seznam seznamov.
Spisala sem kodo, za katero menim, da je ustrezna. Vem pa tudi, da je nekje napaka, ker mi vrne same 1. Prosim za pomoč! Aja, sama nisem nek strašen programer in se zavedam, da je to dokaj osnova.
Koda:
def identiteta(n):
i=0
j=0
if i==j:
return [[1 for i in range(n)]for j in range(n)]
else: return[[0 for i in range(n)]for j in range(n)]
Hvala!
Mislim, da ti glede teme ni potrebno skrbeti, ker se jih ne zaklepa, razen ob opravičenih razlogih, kar pa se v tvojem primeru mislim, da ne more zgoditi. Zdaj pa dosti, da ti ne smetim tu.
No, pojavil se je problem, kako transponirati matriko (matrike so še vedno seznami seznamov). S pomočjo kolegice sem prišla do tega, da mi transponira kvadratno matriko, problem pa je pri nxm matrikah...
koda:
def transponiraj(mat):
#if len(mat)-1!=len(mat[0]):
#mat1=[]
for i in range(len(mat)-1):
for j in range(len(mat)):
## if (len(mat)-1)!=(len(mat)):
## for k in range(len(mat)-1):
## mat1.append([])
Pozdravljena,
Seveda imaš že pakete, ki to delajo samodejno, ampak za vajo je fajn, da jo spišeš sama...
Jaz sem ti naredil na "človeški" način in ne po Pythonsko v stilu [blabla for i in range(n) if pogoj1 else pogoj2]. Seveda lahko to čudo še gnezniš, tako da načeloma lahko narediš funkcijo v eni vrstici, ampak je zelo nepregledno.
def transponiraj(mat):
"Matrika dimenzije n × m je podana kot seznam seznamov"
trans = []
n = len(mat)
m = len(mat[0])
for j in range(m):
vrstica = []
for i in range(n):
vrstica += [mat[i][j]]
trans += [vrstica]
return trans
aja, glede prvega vprašanja pa...
Morda ti bo kdaj prav prišla takšna "pythonska" koda, zato sem ti prvo nalogo rešil, kljub temu, da si jo pogruntala že sama...
Živjo, lepo prosim za pomoč pri naslednji nalogi:
Sestavi funkcijo pravokotnika(a1x, a1y, b1x, b1y, a2x, a2y, b2x, b2y),
ki bo izračunala obseg in površino unije dveh pravokotnikov. Stranice
pravokotnikov so vzporedne koordinatnima osema. Vsak pravokotnik je
podan s koordinatami (katerihkoli) dveh nasprotnih si oglišč.
Napiše mi 'bool' object is not iterable. Se bi dal komu mal kodo prečekirat pa pogledat, kaj je narobe.....funkcija presekIntervalov je iz prejšnje naloge pravilno definirana
Hvala lepa
sklepam, da ti crkne v primeru, da je presek intervalov prazen. Takrat najbrz vrnes False namesto spiska dveh stevil, in potem jasno min in max ne delata, pa odstevanje najbrz tudi ne bi bilo zadovoljno. Te posebne primere moras preverjat.
Problem se pojavi v teh vrsticah. Kot je že Aniviller dejal prej pride do napake, če funkcija presekIntervalov vrne False (se pravi je pogoj a2>b1 or b2<a1 v presekIntervalov izpolnjen). V tem primeru pride do situacije, da iščeš nato min/max spremenljivke tipa bool kar pa vrne bool is not iterable napako.
Problem lahko odpraviš na dva načina. Prvi je tak, da smiselno popraviš funkcijo presekIntervalov, da v obeh primerih vrača tuple. Ali pa popraviš zgornjo kodo tako, da bo preverjala kakšen podatkovni tip je vrnila funkcija presekIntervalov.
Najbolj pravilna je prva rešitev, ker načeloma vračanje različnih tipov iz ene funkcije ni smatrano kot dobra praksa.
def presekIntervalov(a1,b1,a2,b2):
if a2>b1 or b2<a1:
return (-1, -1)
else:
return(max(a1,a2), min(b1,b2))
Nato bi bilo potrebno popraviti še vse klice presekIntervalov, da bi se preverjalo, če je vrnjen rezultat (-1, -1) in v primeru, da je ustrezno urgiraš.
Bo šlo?
EDIT: Predpostavljam, da se celotna zadeva izvaja samo v I. kvadrantu koordinatnega sistema (?)