IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: "Špatné" odsazení

Aktivity
Avatar
Neaktivní uživatel:28.3.2015 18:17

Ahoj,
mám problém s odsazením. Když tento Pythonovský skript (jeho část) spustím v command-line pythonu, vždy mi vyhodí 'IndentationError: unindent does not match any outer indentation level'. Ale přitom je odsazení správné, takže nevím, čím to je.
Zde je kód:

def tokType(token):
        if type(token) is str:
                if ":" in token:
                        out = ""
                        for c in token:
                                if c == ":":
                                        break
                                out += c
                        return out
                else:
                        return None
    elif type(token) is list:
        for i, t in enumerate(token):
            if i != 0 and tokType(t) != tokType(token[i-1]):
                return "multi"
        return tokType(token[0])
        else:
                raise TypeError("Unsupported type {0}, expecting List or String!".format(type(token)))

Za každou radu jsem vděčný

Odpovědět
28.3.2015 18:17
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:28.3.2015 18:42
def tokType(token):
    if type(token) is str:
        if ":" in token:
            out = ""
            for c in token:
                if c == ":":
                    break
                out += c
            return out
        else:
            return None
    elif type(token) is list:
        for i, t in enumerate(token):
            if i != 0 and tokType(t) != tokType(token[i-1]):
                return "multi"
        return tokType(token[0])
    else:
        raise TypeError("Unsupported type {0}, expecting List or String!".format(type(token)))

Takto by to malo byť správne odsadené

Editováno 28.3.2015 18:43
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
28.3.2015 18:42
Neaktivní uživatelský účet
Avatar
hanpari
Člen
Avatar
Odpovídá na Neaktivní uživatel
hanpari:28.3.2015 22:39

Ahoj,
ze cvičných důvodů jsem zkusil pochopit, co ta funkce dělá a pak jsem ji trochu přepsal:

def tokType1(t):
    if isinstance(t, (str, list)):
        try:
            return t[:t.index(":")] if t.find(":")>-1 else None
        except AttributeError:
            return "multi" if len(set(map(tokType, t)))> 1 else tokType(t[0])
    raise TypeError("Unsupported type %s, expecting List or String!" %type(t))

Snažil jsem se ten kód trochu "vysušit", hlavně omezit počty podmínek a returnů.

Celý kód i s jednoduchou kontrolou proti tvojí funkce je tady:
http://pastebin.com/EC7vcfLG
Nenarazil jsem na žádný problém, ale nevím, k čemu to potřebuješ :)

Editováno 28.3.2015 22:40
 
Nahoru Odpovědět
28.3.2015 22:39
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:29.3.2015 9:03

Jo, už jsem si všiml, že se editor rozhodl změnit ze Soft Tabs zpátky na Hard Tabs. Už jsem to vyřešil.

Nahoru Odpovědět
29.3.2015 9:03
Neaktivní uživatelský účet
Avatar
Odpovídá na hanpari
Neaktivní uživatel:29.3.2015 9:06

Jo, dík, ale asi zůstanu u Python-like zápisu. Každopádně jsem trochu sloučil ty Ify.

Nahoru Odpovědět
29.3.2015 9:06
Neaktivní uživatelský účet
Avatar
hanpari
Člen
Avatar
Odpovídá na Neaktivní uživatel
hanpari:29.3.2015 10:08

V pohodě, jak jsem psal, já to psal kvůli sobě. Mimochodem, nechceš přispět:

http://www.itnetwork.cz/…517b24594cd8

Založil jsem vlákno, abych zjistil, co si každý představuje pod "python-like".

 
Nahoru Odpovědět
29.3.2015 10:08
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 6 zpráv z 6.