NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze: Diagonaly

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
Cheethell
Člen
Avatar
Cheethell:8.11.2018 22:03

Ahoj, napsal jsem kod, ktery by podle mych predstav mel scitat hodnoty, ktere lezi na diagonalach a maji stejnou hodnotu jako moje prvne zvolena souradnice v tabulce. Jenze program to pocita spatne a ja nevim proc.

Zkusil jsem:

def diagonala(row, column, data):
    value = data[row][column]
    same = 0

    while(row >= 0 and column >= 0):
        if data[row][column]== value:
            same += 1
            column = column-1
            row = row-1
            continue
        else:
            break

    while(row >= 0 and column <= len(data[column])):
        if data[row][column]== value:
            same += 1
            column = column+1
            row = row-1
            continue
        else:
            break

    while(row <= len(data[row]) and column <= len(data[column])):
        if data[row][column]== value:
            same += 1
            column = column+1
            row = row+1
            continue
        else:
            break

    while(r <= len(data[row]) and column >= 0):
        if data[row][column]== value:
            same += 1
            column = column-1
            row = row+1
            continue
        else:
            break




    return(same)

if __name__ == "__main__":
    row = 2
    column = 2
    data = [ \
        [0, 1, 1, 1, 1, 0, 0, 0], \
        [1, 1, 0, 1, 0, 1, 1, 1], \
        [0, 1, 1, 0, 0, 1, 0, 1], \
        [1, 1, 1, 0, 1, 1, 0, 1], \
        [0, 1, 0, 0, 0, 0, 1, 1], \
        [1, 0, 1, 1, 0, 0, 0, 0], \
        [0, 1, 1, 1, 0, 1, 1, 1], \
        [1, 1, 0, 1, 0, 1, 1, 1]]
    print(diagonala(row, column, data))

Chci docílit: secteni hodnot v 2D poli ktere se nachazi na diagonalach a maji stejnou hodnotu jako jsem si napocatku zvolil lib.policko v poli. Scitani na diagonalach probiha do doby nez na diagonale se najde cislo ktere je odlisne od hodnoty, kterou melo napocatku zvolene policko v poli.
same - scita stejne hodnoty jako je hodnota na prvne zvolenem policku v poli.

 
Odpovědět
8.11.2018 22:03
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.11.2018 15:31

Diagonala je
x-1, y-1
x-1, y+1
x+1, y-1
x+1, y+1
To tam tak nejak mas.

Pokud plati kod

if data[row][column]== value: // dvourozmerne pole data [row, col]

Pak tento kod nedava smysl

column <= len(data[column]) // data pole [col]

A mozna ta mas i jine chyby. Doporucuji zacit znovu a pouzivat nazvy promennych, ktere ti budou davat smysl. treba x, y misto col, row.

Pokud bys vyzadoval rychlost, vyhni se funkcim v podminkach pro cyklus

while(r <= len(data[row]) and column >= 0): // pomala funkce, spousti se v kazdem cyklu, znovu a znovu kontroluje delku pole (ta se mohla zmenit!)
while(r <= 8 and column >= 0): // cislo je rychlejsi
while(r <= u and column >= 0): // promenna je skoro stejne rychla jako cislo
 
Nahoru Odpovědět
9.11.2018 15:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.