मान लीजिए हमारे पास एक क्रेडिट कार्ड नंबर है। हमें जांचना है कि कार्ड नंबर वैध है या नहीं। कार्ड नंबर्स में कुछ विशेषताएं होती हैं:
यह 4, 5 और 6 से शुरू होगा
यह 16 डिजिट्स लंबा होगा
नंबर्स में केवल डिजिट्स होने चाहिए
इसमें '-' से अलग किए गए चार ग्रुप्स में डिजिट्स हो सकते हैं
इसमें स्पेस या अंडरस्कोर जैसे कोई अन्य सेपरेटर नहीं होने चाहिए
इसमें 4 या अधिक लगातार समान डिजिट्स नहीं होने चाहिए
तो, यदि इनपुट s = "5423-2578-8632-6589" है, तो आउटपुट True होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- यदि s में '-' की संख्या 0 से अधिक है, तो
- a := "-" से अलग किए गए भागों की सूची
- p:= 1
- यदि a का आकार 4 के समान नहीं है, तो
- p:= null
- a:= खाली सूची
- a में प्रत्येक b के लिए, करें
- यदि b का आकार 4 के समान नहीं है, तो
- p:= null
- लूप से बाहर निकलें
- यदि b का आकार 4 के समान नहीं है, तो
- अन्यथा,
- p := एक सबस्ट्रिंग खोजें जो 4 या 5 या 6 से शुरू हो और शेष 15 डिजिट्स लंबी हो
- s := s से "-" हटाएं
- q := सबस्ट्रिंग खोजें जहां 4 या अधिक लगातार कैरेक्टर्स समान हों
- यदि p null नहीं है और q null है, तो
- True लौटाएं
- अन्यथा,
- False लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें
import re
def solve(s):
if s.count("-")>0:
a = s.split("-")
p=1
if len(a)!=4:
p=None
a=[]
for b in a:
if len(b)!=4:
p=None
break
else:
p = re.search("[456][0-9]{15}",s)
s = s.replace("-","")
q = re.search(".*([0-9])\\1{3}.*",s)
if p!=None and q==None:
return True
else:
return False
s = "5423-2578-8632-6589"
print(solve(s))
इनपुट
"5423-2578-8632-6589"
आउटपुट
False