Sådan får du tegn på heltal i Python


Bedste svar

from math import copysign

sign = lambda x : copysign(1, x)

returnerer -1 for negativt tegn og +1 for positivt tegn. du kan erstatte 1 med 1. for at få et flydende punkt output

sign = lambda x : (x >> 63) +1

sign(10) # 1

sign(-32) #0

sign(o) #1

sign(10**15) #1L

hvis du kun har tal, der kan repræsenteres som 32 inter, er det tilstrækkeligt at gøre x >> 31, men så får du tal større end et for tal med mere end 32 bits (465662 for tegn (10 ** 15)). Du kan også gøre x >> 128 for at være mere sikker

Svar

Her er en liners! sign = lambda a: (a>0) - (a<0) ELLER sign = lambda a: (a>>127)|(not not a) ELLER sign = lambda a: 1 if a>0 else -1 if a<0 else 0 [ved brug af hvis-ellers, OP bad ikke om dette men for læsere]

Alle løsninger fungerer i både Python2 og 3 testtilfælde

print sign(12)

print sign(0)

print sign(-13)

print sign(-0)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *