2013-05-05 8 views
6

Voglio usare le conoscenze di base per migliorare l'efficienza del codice. Lo so nel sistema binario. quando l'ultima cifra del numero è 1, questo è un numero dispari. e 0 è un numero pari. Come usare in questo modo per giudicare un numero int in python? Python fornisce qualche metodo di build-in per farlo?Come giudicare un numero intero pari o dispari? (il modo binario)

risposta

12

E con 1:

0000101001000101 
    0000000000000001 
& 
__________________ 
    0000000000000001 

Se si ottiene 1, il numero è dispari. Se ottieni 0, il numero è pari. Anche se questo funziona, vorrei utilizzare l'operatore modulo, invece:

>>> 8888 % 2 
0 
>>> 8881 % 2 
1 

Funziona allo stesso modo, è altrettanto veloce e sembra più bello:

In [65]: %timeit random.randint(1, 1000000) & 1 == 0 
1000000 loops, best of 3: 1.02 us per loop 

In [66]: %timeit random.randint(1, 1000000) % 2 == 0 
1000000 loops, best of 3: 1.03 us per loop 
3

È possibile & il numero e 1, se ottenere 0 quindi il numero è pari, 1 significa che il numero è dispari.

>>> 2 & 1 
0 
>>> 3 & 1 
1 
+0

Io uso questo metodo prima. Grazie – Vinceeema

1

È possibile utilizzare l'operatore & per verificare se è impostato il bit più basso;

a = 77 
is_odd = bool(a & 1) 
print is_odd    # Prints True 

a = 64 
is_odd = bool(a & 1) 
print is_odd    # Prints False 
2

** PITONE: bit meno significativo METODO **

>>> def is_odd(i): return bool(i & 1) 

>>> def is_even(i): return not is_odd(i) 

>>> [(j, is_odd(j)) for j in range(10)] 
[(0, False), (1, True), (2, False), (3, True), (4, False), (5, True), (6, False), (7,  
True), (8, False), (9, True)] 
>>> [(j, is_even(j)) for j in range(10)] 
[(0, True), (1, False), (2, True), (3, False), (4, True), (5, False), (6, True), (7, 
False), (8, True), (9, False)] 
>>> 

vedere se questo può ti aiuta o no.

Spiegazione:
Verificare se un numero intero è pari o dispari. C'è più di un modo per risolvere questo compito: usa i predicati pari e dispari, se la lingua li fornisce. Controlla la cifra meno significativa. Con gli interi binari, io bit a bit e 1 è uguale a 0 se i è pari, o uguale a 1 se è i dispari. Dividi i per 2. Il resto è uguale a 0 se è uniforme. Il resto equivale a +1 o -1 se è strano. Usa congruenze modulari: i ≡ 0 (mod 2) se è uniforme. io ≡ 1 (mod 2) se è strano.

+0

Verifica se un numero intero è pari o dispari. Esistono più modi per risolvere questa attività: Utilizzare i predicati pari e dispari, se la lingua li fornisce. Controllare la cifra meno significativa. Con gli interi binari, io bit a bit e 1 è uguale a 0 se i è pari, o uguale a 1 se è i dispari. Divide i per 2. Il resto è uguale a 0 se è uguale. Il resto equivale a +1 o -1 se è strano. Usa congruenze modulari: i ≡ 0 (mod 2) se è uniforme. i ≡ 1 (mod 2) iff i è dispari. –

0
# Modular Congruencies # 

>> def is_even(i): 
    return (i % 2) == 0 

>>> is_even(1) 
False 
>>> is_even(2) 
True 
>>> 
+0

@Vinceeema Un metodo più semplice! –

Problemi correlati