สมมติว่าเรามีหมายเลขบัตรเครดิต เราต้องตรวจสอบว่าหมายเลขบัตรถูกต้องหรือไม่ หมายเลขบัตรมีคุณสมบัติบางอย่าง -
-
จะขึ้นต้นด้วย 4, 5 และ 6
-
จะมีความยาว 16 หลัก
-
ตัวเลขต้องมีเฉพาะตัวเลขเท่านั้น
-
อาจมีตัวเลขในสี่กลุ่มคั่นด้วย '-'
-
ต้องไม่ใช้ตัวคั่นอื่นใด เช่น ช่องว่างหรือขีดล่าง
-
ต้องไม่มีตัวเลขที่เหมือนกันติดต่อกันตั้งแต่ 4 หลักขึ้นไป
ดังนั้น หากอินพุตเป็น s ="5423-2578-8632-6589" ผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้าจำนวน '-' ใน s มากกว่า 0 ดังนั้น
- a :=รายการส่วนคั่นด้วย "-"
- p:=1
- ถ้าขนาด a ไม่เท่ากับ 4 แล้ว
- p:=null
- a:=รายการว่าง
- สำหรับแต่ละ b ใน a ทำ
- ถ้าขนาด b ไม่เท่ากับ 4 แล้ว
- p:=null
- ออกมาจากลูป
- ถ้าขนาด b ไม่เท่ากับ 4 แล้ว
- มิฉะนั้น
- p :=ค้นหาสตริงย่อยที่ขึ้นต้นด้วย 4 หรือ 5 หรือ 6 และเหลือเป็นตัวเลขยาว 15 หลัก
- s :=ลบ "-" ออกจาก s
- q :=ค้นหาสตริงย่อยที่มีอักขระต่อเนื่องกันตั้งแต่ 4 ตัวขึ้นไป
- ถ้า p ไม่เป็นค่าว่าง และ q เป็นค่าว่าง ดังนั้น
- คืนค่า True
- มิฉะนั้น
- คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
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