2013-05-05 3 views
6

मैं कोड की दक्षता में सुधार के लिए बुनियादी ज्ञान का उपयोग करना चाहता हूं। मुझे पता है कि बाइनरी सिस्टम में। जब संख्या का अंतिम अंक 1 है, तो यह एक विषम संख्या है। और 0 भी संख्या है। पायथन में एक इंट संख्या का न्याय करने के लिए इस तरीके का उपयोग कैसे करें? क्या वह अजगर ऐसा करने के लिए कोई अंतर्निहित तरीका है?एक इंट संख्या अजीब या यहां तक ​​कि कैसे न्याय करें? (द्विआधारी तरीका)

उत्तर

12

और यह 1 के साथ:

0000101001000101 
    0000000000000001 
& 
__________________ 
    0000000000000001 

आप 1 मिलता है, संख्या विषम है। यदि आपको 0 मिलता है, तो संख्या भी है। हालांकि यह काम करता है, मैं सापेक्ष ऑपरेटर के बजाय प्रयोग करेंगे:

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

यह उसी तरह काम करता है, बस के रूप में तेज है और लग रहा है अच्छा:

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

आप, संख्या और 1 & सकते हैं यदि आप 0 प्राप्त करें तो संख्या भी है, 1 का अर्थ है कि संख्या विषम है।

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

मैंने पहले इस विधि का उपयोग। धन्यवाद – Vinceeema

1

आप निम्नतम बिट सेट होने पर जांचने के लिए & ऑपरेटर का उपयोग कर सकते हैं;

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

** अजगर: कम से कम महत्वपूर्ण बिट विधि **

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

देखें इस कर सकते हैं या में मदद करता है नहीं है।

स्पष्टीकरण:
परीक्षण करें कि एक पूर्णांक भी अजीब है या नहीं। इस कार्य को हल करने के एक से अधिक तरीके हैं: यदि भाषा उन्हें प्रदान करती है तो भी और विषम भविष्यवाणियों का उपयोग करें। कम से कम महत्वपूर्ण अंक की जांच करें। द्विआधारी पूर्णांक के साथ, मैं bitwise- और 1 बराबर 0 iff मैं भी है, या 1 iff के बराबर है मैं विषम है। मैं 2 से विभाजित करता हूं। शेष 0 iff के बराबर है। शेष +1 या -1 iff के बराबर है मैं अजीब है। मॉड्यूलर congruences का उपयोग करें: मैं ≡ 0 (मोड 2) iff मैं भी है। मैं ≡ 1 (मोड 2) iff मैं विषम है।

+0

परीक्षण करें कि एक पूर्णांक भी अजीब है या नहीं। इस कार्य को हल करने के लिए एक से अधिक तरीका नहीं है: भी और अजीब विधेय का प्रयोग करें, यदि भाषा उन्हें प्रदान करता है। कम से कम महत्वपूर्ण अंक की जांच करें। द्विआधारी पूर्णांक के साथ, मैं bitwise- और 1 बराबर 0 iff मैं भी है, या 1 iff के बराबर है मैं विषम है। मुझे 2 से विभाजित करें। शेष 0 iff के बराबर है। शेष +1 या -1 iff के बराबर है मैं अजीब है। उपयोग मॉड्यूलर congruences: मैं ≡ 0 (आधुनिक 2) iff मैं भी है। i ≡ 1 (मोड 2) iff मैं विषम है। –

0
# Modular Congruencies # 

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

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

@ विन्सिमा एक और आसान तरीका! –

संबंधित मुद्दे