2015-10-22 4 views
5

में एक स्ट्रिंग में वास्तव में 8 1 और 0 है, यह बताएं कि स्ट्रिंग में केवल 1 और 0 के आधार पर मैं एक बूलियन मान True या False वापस करना चाहता हूं।पाइथन

स्ट्रिंग को 8 1 या 0 के से बना होना चाहिए और कुछ भी नहीं।

यदि इसमें केवल 1 या 0 है, तो यह True लौटाएगा और यदि नहीं तो यह False वापस आ जाएगा।

def isItBinary(aString): 
    if aString == 1 or 0: 
     return True 
    else: 
     return False 

यह वही है मैं अब तक है, लेकिन मैं सिर्फ यकीन है कि कैसे संख्या दोनों के लिए यह तुलना करने के लिए और साथ ही देखें कि क्या वह 8 1 है और 0 है लंबाई है नहीं कर रहा हूँ है।

+1

मैं करूंगा स्ट्रिंग के माध्यम से पुनरावृत्त करें और प्रत्येक चरित्र की जांच करें। – Jiminion

+0

वह नहीं करेगा। आपको char द्वारा char की जांच करनी होगी। – Ryan

+0

1/0 को छोड़कर सबकुछ हटाएं, फिर देखें कि क्या बचा है 8 वर्ण लंबा है। या लंबाई में 8 वर्णों की जांच करें, और इसमें 1/0 से कुछ शामिल है, उदा। '/^[01] {8} $ /' एक regex –

उत्तर

6

आप इस के लिए all का उपयोग और लंबाई की जांच यह वास्तव में है सुनिश्चित करने के लिए कर सकते हैं 8.

all(c in '10' for c in aString) and len(aString) == 8 

उदाहरण:

aString = '11110000' 
all(c in '10' for c in aString) and len(aString) == 8 
>>> True 

इस पर कर का मुख्य लाभ अन्य तरीकों से यह है कि अगर यह शून्य या एक के अलावा कुछ भी पाता है तो यह शॉर्ट-सर्किट होगा।

2

आप यहां set का उपयोग कर सकते हैं। उदाहरण -

def isItBinary(aString): 
    seta = set(aString) 
    if seta.issubset('10') and len(aString) == 8: 
     reutrn True 
    return False 
1

इस प्रयास करें:

def isItBinary(aString): 
    return all([char in '01' for c in aString]+[len(aString)==8]) 
2
len(aString) == 8 and set(aString) <= {"0", "1"} 

ऑपरेटर <= का अर्थ यहां "का एक सबसेट है।"

+0

डाउनवोट के लिए कोई कारण? – user87690

+0

@DSM: धन्यवाद। सोचा मैंने कोशिश की है। – user87690

+0

@DSM: मैंने केवल एक झूठा मामला आजमाया है। मैं एक वाक्यविन्यास त्रुटि के लिए परीक्षण कर रहा था। मेरी गलती। – user87690

1

मैं छोरों के लिए लैम्ब्डा से अधिक की तरह

>>> str = '10001010' 
>>> len(str) == 8 and len(filter(lambda bool: not bool, map(lambda bit: bit in '01', str))) == 0 
True 
+0

कुछ आईडीई और शायद लोग इसके बारे में शिकायत करेंगे क्योंकि 'फ़िल्टर' और' मैप 'लैम्बडास के बजाय अक्षम हैं। ('नक्शा (str, some_list) जैसे बिल्ट-इन्स के साथ वे ठीक हैं)। –

+0

'नक्शा (लैम्ब्डा x: f (x), मान)' मानों में x के लिए '[f (x) की तुलना में समेकित लगता है] '। – mkrieger1

+1

और 'लेन (फ़िल्टर (लैम्ब्डा x: x नहीं, मान)) == 0'' सभी (मानों) 'लिखने के लिए एक और अधिक ठोस तरीका है। – mkrieger1

1

अपने स्ट्रिंग एक 8 बिट द्विआधारी संख्या का प्रतिनिधित्व करने के लिए है, तो आप अपने परीक्षण में इस तरह के रूप में यह कन्वर्ट करने के लिए कोशिश कर सकते:

def isItBinary(s): 
    try: 
     return len(s)==8 and int(s,2) < 256 
    except ValueError: 
     return False 
+0

8-बिट मान 256 से छोटा नहीं हो सकता है? – mkrieger1

+0

यह नहीं हो सकता है, लेकिन 256 से कम सभी मान 8 बिट्स का उपयोग नहीं कर सकते हैं ... – xnx