Giả sử chúng ta có một số thẻ tín dụng. Chúng ta phải kiểm tra xem số thẻ có hợp lệ hay không. Số thẻ có một số thuộc tính nhất định -
-
Nó sẽ bắt đầu bằng 4, 5 và 6
-
Nó sẽ dài 16 chữ số
-
Số chỉ được chứa các chữ số
-
Nó có thể có các chữ số trong bốn nhóm được phân tách bằng '-'
-
Nó không được sử dụng bất kỳ dấu phân tách nào khác như dấu cách hoặc dấu gạch dưới
-
Nó không được có 4 chữ số giống nhau liên tiếp trở lên
Vì vậy, nếu đầu vào giống như s ="5423-2578-8632-6589", thì đầu ra sẽ là True
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- nếu số '-' trong s lớn hơn 0, thì
- a:=danh sách các phần được phân tách bằng "-"
- p:=1
- nếu kích thước của a không bằng 4, thì
- p:=null
- a:=danh sách trống
- đối với mỗi b trong a, thực hiện
- nếu kích thước của b không bằng 4, thì
- p:=null
- ra khỏi vòng lặp
- nếu kích thước của b không bằng 4, thì
- nếu không,
- p:=tìm kiếm một chuỗi con bắt đầu bằng 4 hoặc 5 hoặc 6 và còn lại là các số có 15 chữ số
- s:=remove "-" khỏi s
- q:=chuỗi con tìm kiếm trong đó 4 hoặc nhiều ký tự liên tiếp giống nhau
- nếu p không null và q là null, thì
- trả về True
- nếu không,
- trả về Sai
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn
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))
Đầu vào
"5423-2578-8632-6589"
Đầu ra
False