2013-05-05 10 views
6

Ich möchte Grundkenntnisse verwenden, um die Effizienz von Code zu verbessern. Ich weiß das im Binärsystem. Wenn die letzte Ziffer der Zahl 1 ist, ist dies eine ungerade Zahl. Und 0 ist eine gerade Zahl. Wie kann man auf diese Weise eine int-Zahl in Python beurteilen? Gibt das Python irgendeine eingebaute Methode, um es zu tun?Wie beurteilt man eine int-Zahl ungerade oder gerade? (der binäre Weg)

Antwort

12

und mit 1:

0000101001000101 
    0000000000000001 
& 
__________________ 
    0000000000000001 

Wenn Sie 1 zu bekommen, ist die Zahl ungerade. Wenn Sie 0 erhalten, ist die Anzahl gerade. Während dies funktioniert, würde ich den Modulo-Operator statt:

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

Es funktioniert auf die gleiche Art und Weise, wie schnell und sieht besser aus:

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

Sie die Nummer & und 1, wenn Sie bekommen 0 dann ist die Zahl gerade, 1 bedeutet die Nummer ist ungerade.

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

Ich benutze diese Methode vor. Danke – Vinceeema

1

Sie können nur den & Operator verwenden, wenn das niedrigste Bit gesetzt ist, zu überprüfen;

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

** PYTHON: Least Significant Bit METHODE **

>>> 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)] 
>>> 

sehen, ob dies können Sie hilft oder nicht.

Erläuterung:
Prüfen, ob eine ganze Zahl gerade oder ungerade ist. Es gibt mehr als eine Möglichkeit, diese Aufgabe zu lösen: Verwenden Sie die geraden und ungeraden Prädikate, wenn die Sprache diese liefert. Überprüfen Sie die niedrigstwertige Ziffer. Mit binären ganzen Zahlen bin ich bitweise - und 1 ist gleich 0, wenn i gerade ist, oder gleich 1, wenn i ungerade ist. Teilen Sie i durch 2. Der Rest ist gleich 0, wenn i gerade ist. Der Rest ist +1 oder -1, wenn i ungerade ist. Verwenden Sie modulare Kongruenzen: i ≡ 0 (mod 2) wenn i gerade ist. i ≡ 1 (mod 2) wenn i ungerade ist.

+0

Testen Sie, ob eine ganze Zahl gerade oder ungerade ist. Es gibt mehr als eine Möglichkeit, diese Aufgabe zu lösen: Verwenden Sie die geraden und ungeraden Prädikate, wenn die Sprache dies vorsieht. Die niedrigstwertige Ziffer prüfen. Mit binären ganzen Zahlen bin ich bitweise - und 1 ist gleich 0, wenn i gerade ist, oder gleich 1, wenn i ungerade ist. Teilen Sie i durch 2. Der Rest ist gleich 0, wenn i gerade ist. Der Rest ist +1 oder -1, wenn i ungerade ist. Verwenden Sie modulare Kongruenzen: i ≡ 0 (mod 2) wenn ich gerade ist. i ≡ 1 (mod 2) wenn i ungerade ist. –

0
# Modular Congruencies # 

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

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

@ Vinceeema Eine einfachere Methode! –

Verwandte Themen