python使用正则筛选信用卡


Posted in Python onJanuary 27, 2019

本文实例为大家分享了python使用正则筛选信用卡的具体代码,供大家参考,具体内容如下

本文来源于两个简单的题目:

1.判断一对单词是否是" Anagrams "
2.判断信用卡是否合理

判断 Anagramsstrong>

anagrams 的百度翻译:由颠倒字母顺序而构成的字(短语)

而题目给出例子:

[ DOG , ODG ]
[ DOG , DOG ]
[ DOG , GOD ]
[ DOG , GDO ]

均为 anagrams 。

那思路就简单了,直接拆分字母,排序,比较就 ok 。

判断信用卡

题目给出的要求如下:

The criteria are:
• It must start with a 4,5 or 6
• It must be exactly 16 digits
• It must be numbers only
• It can have a digits in groups of 4, separated by one hyphen “-“
• It should not contain any other characters.
• It must NOT have any 4 repeated digits.

样例输出如下:

378282246310005 Invalid
30569309025904 Invalid
6011111111111117 Invalid
5123-2332-3232-3213 valid

py文件

两个题目合并在一个 py 文件中。 
而入参数分别是两个文件的名字,一个是 anagram.txt ,另一个是 credit_cards.txt ,他们分别长这样:

python使用正则筛选信用卡

python使用正则筛选信用卡

最后的程序长这样:

#! /usr/bin/python3
import re
###############################
##You need to implet the following methods:
##
##Question 1
##anagram_validator() 
##
##Question 2
##credit_card_validator() 

################################

###################################################
# Question 1: Check for anagrams:#
###################################################

def get_list(src_str):
 sub_list=[]
 word_tmp=''
 for word in src_str:
 if word != ',':
 word_tmp = word_tmp+word
 else: 
 sub_list.append(word_tmp)
 word_tmp = ''
 return sub_list

def read_anagram(file_name):
 '''
 Input: a file name
 Return: a nested list of two words list
 Example : [[word1,word2],[word3,word4]...etc]
 '''
 with open(file_name,encoding = 'utf-8') as f:
 return_list =[] 
 file_conment = f.read()

 file_conment_new = re.sub(r'\n',',',file_conment)
 file_conment_new = file_conment_new+','
 subs_list = get_list(file_conment_new)
 i=0
 while i < (len(subs_list)-1):
 return_list.append([subs_list[i],subs_list[i+1]])
 i=i+2 
 return return_list



def anagram_validator(anagram):
 '''
 Input is the output from "read_anagram()".
 Return: list of "anagrams" or "Not anagrams" values for each two words
 example input (dog,gdo),(try,elm) then output would be ["anagrams","Not anagrams"] with sequence of the input
 '''
 result_list=[]
 for i in range(len(anagram)):
 word_font = ''.join((lambda x:(x.sort(),x)[1])(list(anagram[i][0])))
 word_back = ''.join((lambda x:(x.sort(),x)[1])(list(anagram[i][1])))
 if word_font == word_back:
 result_list.append('Anagrams')
 else:
 result_list.append('Not anagrams')

 return result_list

############################################
# Question 2: Validate credit cards #
############################################
def read_credit_cards(file_name):
 '''
 Input: a file name
 Return tuple of numbers
 '''
 with open(file_name,encoding='utf-8') as f:
 card_conment = f.read()

 card_conment = re.sub(r'\[','',card_conment)
 card_conment = re.sub(r'\]','',card_conment)
 card_conment = card_conment+','
 card_list = get_list(card_conment)
 return tuple(card_list)


def credit_card_validator(numbers):
 '''
 Input: tuple of numbers
 Return:dictionary of credit card numbers where key is the number and value if valid or invalid
 '''
 validator_list=[]
 credit_dict={}
 for i in range(len(numbers)):
 validator_list.append(numbers[i])
 
 for i in range(len(numbers)):
 ch_num = 0
 repeat_flag = 0
 for ch in validator_list[i]:
 if ord("A")<=ord(ch)<=ord("Z"):
 ch_num+=1
 break

 tmp_list = []
 tmp_list = (re.sub(r"[^\d]", "", validator_list[i]))
 for index in range(len(tmp_list)-4):
 if(tmp_list[index] == tmp_list[index+1] and
 tmp_list[index] == tmp_list[index+2] and
 tmp_list[index] == tmp_list[index+3] ):
 repeat_flag = 1
 break;

 if(validator_list[i][0] != '4' and
 validator_list[i][0] != '5' and
 validator_list[i][0] != '6' ):
 credit_dict[validator_list[i]]='Invalid'
 elif( len(re.sub(r"\D", "", validator_list[i])) != 16 ):
 credit_dict[validator_list[i]]='Invalid'
 elif(ch_num > 0):
 credit_dict[validator_list[i]]='Invalid'
 elif( 
 (re.search(r"-",validator_list[i])) and 
  ( validator_list[i][4] != '-' or 
  validator_list[i][9] != '-'or
  validator_list[i][14] != '-'
  )
 ):
 credit_dict[validator_list[i]]='Invalid'
 elif(re.search(r"[^-\d]",validator_list[i])):
 credit_dict[validator_list[i]]='Invalid'
 elif(repeat_flag == 1 ):
 credit_dict[validator_list[i]]='Invalid'
 else :
 credit_dict[validator_list[i]]='Valid'
 space_str = '' 

 return credit_dict


def print_credit_card_summary(dict_o):
 '''
 Input: dict
 Return:
 printing summary of validation result - space between credit card and status is 40 width
 example:
 378282246310005 Invalid
 30569309025904 Invalid
 ''' 
 space_str = '' 
 for key in dict_o:
 new_str = key + dict_o[key]
 if(dict_o[key] == "Valid"):
 new_str_tmp = new_str[:-5]
 space_lenth = 46-len(new_str)
 for x in range(space_lenth):
 space_str +=' '
 print(new_str_tmp + space_str + 'Valid')
 space_str=''
 else :
 new_str_tmp = new_str[:-7]
 space_lenth = 48-len(new_str)
 for x in range(space_lenth):
 space_str +=' '
 print(new_str_tmp + space_str + 'Invalid')
 space_str='' 



####### THE CODE BELOW IS FOR TESTING###################
############### DO NOT CHANGE #########################


import sys

if __name__ == '__main__':
 # Take care of the console inputs
 if len(sys.argv) <= 1:
 sys.argv = ['', "anagram.txt", "credit_cards.txt"]
 stars = '*' * 40
 print(stars)
 print("Testing Question 1 --- Anagrams?")
 print(stars)

 # testing reading_anagrams
 try:
 anagram = read_anagram(sys.argv[1])
 if not anagram:
 print("read_anagram() returns None.")
 else:
 print("anagram: ", anagram)
 print()
 except Exception as e:
 print("Error (readnumbers()): ", e)

 # testing anagram_validator
 Anagrams = 0
 NAnagrams = 0
 try:
 if not anagram: # Question 1 has not been implemented
 print("anagram_validator() skipped....")
 else:
 result = anagram_validator(anagram)
 if result == None:
 print("anagram_validator() returns None.")
 else:
 for i in result:
  if i == "Anagrams":
  Anagrams += 1
  elif i == "Not anagrams":
  NAnagrams += 1
 print("Number of valid Anagrams is {} and Not anagrams is {}.".format(Anagrams, NAnagrams))

 except Exception as e:
 print("Error (anagram_validator()):", e)

 # testing Question 2
 
 print("\n\n" + stars)
 print("Testing Question 2 --- Credit Card Validator")
 print(stars)

 # Testing reading_credit_cards
 try:
 tup = read_credit_cards(sys.argv[2])
 if not tup:
 print("read_credit_cards() returns None.")
 else:
 print("The tuple of credit_cards: {}".format(tup))
 except Exception as e:
 print("Error (read_credit_cards()):", e)

 # Testing credit_card_validator
 vcc = 0
 ivcc = 0
 try:
 if not tup: # Readin_Question 2 has not been implemented
 print("credit_card_validator() skipped...")
 else:
 cc_dict = credit_card_validator(tup)
 tmp_cc_dict = cc_dict
 if not cc_dict:
 print("credit_card_validator() returns None.")
 else:
 for items in cc_dict.keys():
  if cc_dict[items] == "Valid":
  vcc += 1
  elif cc_dict[items] == "Invalid":
  ivcc += 1
 print("Number of valid credit cards is {} and invalid {}.".format(vcc, ivcc))
 except Exception as e:
 print("Error (credit_card_validator()):", e)

 # testing Question 2
 print("\n\n" + stars)
 print("Testing Question 2b --- Print Credit Card Summary")
 print(stars)
 # Testing print_credit_card_summary
 try:
 if not tmp_cc_dict: # Dict credit card output has not been implemented
 print("print_credit_card_summary() skipped...")
 else:
 import io # do not delete this line
 from contextlib import redirect_stdout # do not delete this line

 f = io.StringIO()
 with redirect_stdout(f):
 print_credit_card_summary(tmp_cc_dict)
 out = f.getvalue()
 if not out:
 print("print_credit_card_summary() returns None.")
 else:
 count44 = 0
 count46 = 0
 for line in out.splitlines():
  if len(line) - len(line.split()) == 44:
  count44 += 1
  elif len(line) - len(line.split()) == 46:
  count46 += 1
 if count44 == vcc and count46 == ivcc:
  print("Your format looks good")
 else:
  print("You might have some issues in your summary format")


 except Exception as e:
 print("Error (print_credit_card_summary()):", e)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python基类函数的重载与调用实例分析
Jan 12 Python
详解 Python中LEGB和闭包及装饰器
Aug 03 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
Django如何自定义分页
Sep 25 Python
python+flask实现API的方法
Nov 21 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
Puppeteer使用示例详解
Jun 20 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
在django-xadmin中APScheduler的启动初始化实例
Nov 15 Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 Python
Python 程序员必须掌握的日志记录
Aug 17 Python
Python使用tkinter制作在线翻译软件
Feb 22 Python
pthon贪吃蛇游戏详细代码
Jan 27 #Python
只需7行Python代码玩转微信自动聊天
Jan 27 #Python
python实现贪吃蛇游戏
Mar 21 #Python
Python制作动态字符图的实例
Jan 27 #Python
python贪吃蛇游戏代码
Apr 18 #Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 #Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 #Python
You might like
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
医学生求职自荐信
2013/10/25 职场文书
应届生骨科医生求职信
2013/10/31 职场文书
大学三年的自我评价
2013/12/25 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
给校长的建议书
2014/03/12 职场文书
入职担保书范文
2014/05/21 职场文书
大学新闻系自荐书
2014/05/31 职场文书
和谐社区口号
2014/06/19 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
学习保证书怎么写
2015/02/26 职场文书
起诉状范本
2015/05/20 职场文书
病假证明模板
2015/06/19 职场文书
军事理论课感想
2015/08/11 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
nginx结合openssl实现https的方法
2021/07/25 Servers