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

(int or float) - dlaczego nie działa?
CR
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:9
0

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

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

A ten już tak:

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

Dlaczego tak jest?

edytowany 2x, ostatnio: olesio
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
1
Kopiuj
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

Kopiuj
print(int or float)

output: <class 'int'>

edytowany 3x, ostatnio: spartanPAGE
TH
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:35
1

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

Kopiuj
type(arg) == int

oraz:

Kopiuj
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:

Kopiuj
(int or float)

Ma dwa wyrażenia:

Kopiuj
int

oraz

Kopiuj
float

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

edytowany 1x, ostatnio: olesio
olesio
Wstaiaj kod w odpowiednie, konkretne tagi koloryzujące!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.