(int or float) - dlaczego nie działa?

0

Ten kod nie działa (zwraca 'failure' jak jest float):

def wartosc_bezwzgledna(arg):
    if type(arg) == (int or float):
        return abs(arg)
    else:
        return 'failure'

A ten już tak:

def wartosc_bezwzgledna(arg):
    if type(arg) == int or type(arg) == float:
        return abs(arg)
    else:
        return 'failure'

Dlaczego tak jest?

1
def absolute(value):
    return abs(value) if type(value) in (int, float) else 'failure'

print(absolute(-1))
print(absolute(-1.0))
print(absolute("Hi"))

http://ideone.com/Mp7L11

Co do pytania: http://ideone.com/JW1Rbe

print(int or float)

output: <class 'int'>

1

Operator or działa na dwóch wyrażeniach. W kodzie:
if type(arg) == int or type(arg) == float
Masz dwa wyrażenia:

type(arg) == int

oraz:

type(arg) == float

Najpierw sprawdzane jest pierwsze wyrażenie. Jeśli jest równie prawdzie, to zwracane jest True, przy czym prawda to nie tylko wartości boolowskie. Wszystko co nie jest Nonem, Falsem lub 0 jest prawdą. To przekłada się od razu na Twoje pytanie, gdyż kod:

(int or float)

Ma dwa wyrażenia:

int

oraz

float

Int zwraca wartość, która daje nam True, czyli zawsze w tym przypadku będzie występowała wartość int.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0