当前位置: 首页 > news >正文

《python语言程序设计》2018第6章第29题 财务应用程序:信用卡号的合法性 16位可以识别,不识别15位

1111在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我没有按这个题里所要求的顺序和名称,
不是说题里写的不对,我觉得应该是按自己的想法来进行

题里说的是每个奇数进行相互乘然后结果相加便成了37
然后所有的偶数直接相加38

可是《python语言程序设计》在第7章和第8章以后才开始涉及到我们的列表和元祖。
为此我很苦恼

1 .进行原始的整除和除于 但是16位数。我不能进行1000000000000000这么长度运算

2.如何把vis_txt做成序列 但是都不成功

3.我做了一种尝试,就是利用第五章循环的for in visa卡

# 我想利用这个方式遍历visa_text变量
visa_text = "4388576018402626"
for i in visa_text:print(i,i*2)

但是for循环不能进行整数间的这样的遍历,因此没有变成字符串是无法实现我的想法的。
最后只能将visa_text变成字符串

结果如下

在这里插入图片描述

那么我换成int呢,我增加了一个代码

# 我想利用这个方式遍历visa_text变量
visa_text = "4388576018402626"
for i in visa_text:print(i,int(i)*2)

在这里插入图片描述

想解决跳着进行识别。奇数偶数

我找到了之前做过的代码

调用了第一次做完的代码,def n_odd(number):a = number // 1000a_m = a * 2c = number % 1000 // 10 % 10c_m = c * 2if a_m >= 10 and c_m <= 9:odd_a_1 = a_m // 10odd_a_2 = a_m % 10odd_a_sum = odd_a_1 + odd_a_2return odd_a_sum + c_melif c_m >= 10 and a_m <= 9:odd_c_1 = c_m // 10odd_c_2 = c_m % 10odd_c_sum = odd_c_1 + odd_c_2return odd_c_sum + a_melif a_m >= 10 and c_m >= 10:odd_a_1 = a_m // 10odd_a_2 = a_m % 10odd_a_sum = odd_a_1 + odd_a_2odd_c_1 = c_m // 10odd_c_2 = c_m % 10odd_c_sum = odd_c_1 + odd_c_2return odd_c_sum + odd_a_sumelif a_m <= 9 and c_m <= 9:return a_m + c_mdef n_even(number):b = number % 1000 // 100d = number % 10return b + ddef isValid(n1, n2, n3, n4, a, b):c = a + bd = c % 10if d == 0:print(f"This {str(n1)} {str(n2)} {str(n3)} {str(n4)} credit card is valid")print(d)print(c)else:print(f"This {str(n1)} {str(n2)} {str(n3)} {str(n4)} credit card is invalid")print(d)print(c)def main():# number1 = eval(input("Input credit card number: "))# number2 = eval(input("Input credit card number: "))# number3 = eval(input("Input credit card number: "))# number4 = eval(input("Input credit card number: "))number1 = 4388number2 = 5760number3 = 1840number4 = 2626  # 2001是valida = n_odd(number1) + n_odd(number2) + n_odd(number3) + n_odd(number4)b = n_even(number1) + n_even(number2) + n_even(number3) + n_even(number4)isValid(number1, number2, number3, number4, a, b)main()

在这里我们看到了,我是将16位进行了分割。

我觉得还是应该进行4位数4位数的分别

我做出了新的改变

 current_a1 = vis_n // 10000

我得到了438857601840

接下来我又根据整出1000和除于1000来进行分割。

根本不合法,后来我发现少一位。而我设计的是16位的,

438857601840707

算了!

大家就按16位来用吧。16位是可以的

vis_txt = 4388576018402626 #不合法

vis_txt = 4383576018402626 #合法

这个代码大家可以看一下。输入的时候可以将16位分成4段4位来进行的。这是我当时能想到的最好办法。我希望能超越这个。通过上一个公式,似乎给了我一些新的灵感。既然我们没法进行大规模的整除,那我先用10000 将这个16位的数字拆分成4段。类似我们之前求小时、分、秒的方法


# vis_txt = 4388576018402626
# vis_txt = 4383576018402626
# vis_txt = 438857601840707# 为测试数字的顺序刻意用的
# vis_txt = 4388576018402876# 简单分割数据的函数,利用10000整除和除于来将16位代码分割
# 但是该函数还要改成可以分开奇、偶数
# 偶数
def splitTheDataEven(vis_n):current_a1 = vis_n // 10000a_t1 = vis_n % 10000# print("1th", a_t1)a_t2 = current_a1 % 10000# print("2th", a_t2)current_a3 = current_a1 // 10000a_t3 = current_a3 % 10000# print("3th", a_t3)a_t4 = current_a3 // 10000# print("4th", a_t4)even1 = a_t1 % 10even2 = a_t1 // 100 % 10even3 = a_t2 % 10even4 = a_t2 // 100 % 10even5 = a_t3 % 10even6 = a_t3 // 100 % 10even7 = a_t4 % 10even8 = a_t4 // 100 % 10return even1, even2, even3, even4, even5, even6, even7, even8# 奇数
def splitTheDataOdd(vis_n):current_a1 = vis_n // 10000a_t1 = vis_n % 10000# print("1th", a_t1)a_t2 = current_a1 % 10000# print("2th", a_t2)current_a3 = current_a1 // 10000a_t3 = current_a3 % 10000# print("3th", a_t3)a_t4 = current_a3 // 10000# print("4th", a_t4)odd1 = a_t1 // 10 % 10odd2 = a_t1 // 100 // 10#odd3 = a_t2 // 10 % 10odd4 = a_t2 // 100 // 10#odd5 = a_t3 // 10 % 10odd6 = a_t3 // 100 // 10#odd7 = a_t4 // 10 % 10odd8 = a_t4 // 100 // 10return odd1, odd2, odd3, odd4, odd5, odd6, odd7, odd8def mult_numOdd(int_num, m_num):a = int_num * m_numif a >= 10:div_a1 = a // 10div_a2 = a % 10return div_a1 + div_a2elif a == 0:return aelse:return adef oddAdd(visa_txt):a_text = splitTheDataOdd(visa_txt)temp_text = 0for i in a_text:temp_text += mult_numOdd(i, 2)return temp_textdef evenAdd(visa_txt):even_text = splitTheDataEven(visa_txt)temp_text = 0for i in even_text:temp_text += ireturn temp_text# print(oddAdd(vis_txt))
# print(evenAdd(vis_txt))def isValid(visa_text):a = oddAdd(visa_text) + evenAdd(visa_text)if a % 10 == 0:print(f"This visa code {visa_text} is valid!")else:print(f"This visa code {visa_text} is not valid!")print("Sorry! again input, or call worker!")print(a)isValid(vis_txt)

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenCV||超详细的几何变换
  • C#初级——方法/函数(ref 和 out关键字)(引用传参和输出传参)
  • Linux|最佳命令行下载加速器
  • 【C语言】分支与循环(循环篇)——结尾猜数字游戏实现
  • zlm-openRtpServer使用
  • 全面解锁:通过JSP和Ajax实现钉钉签到数据展示及部门筛选功能
  • TypeScript 迭代器和生成器详解
  • Python venv 虚拟环境
  • kafka从浅入深
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • 基于MFC对话框吸管实验
  • 嵌入式初学-C语言-练习三
  • 【51单片机仿真】基于51单片机设计的整数/小数计算器系统仿真源码文档——文末资料下载
  • Leetcode第136场双周赛题解(c++)
  • 云原生应用程序简介
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【Linux系统编程】快速查找errno错误码信息
  • 【前端学习】-粗谈选择器
  • leetcode讲解--894. All Possible Full Binary Trees
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Rancher如何对接Ceph-RBD块存储
  • Twitter赢在开放,三年创造奇迹
  • webgl (原生)基础入门指南【一】
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 回顾2016
  • 回流、重绘及其优化
  • 基于游标的分页接口实现
  • 每天10道Java面试题,跟我走,offer有!
  • 深入浏览器事件循环的本质
  • 使用 @font-face
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 由插件封装引出的一丢丢思考
  • 在weex里面使用chart图表
  • 找一份好的前端工作,起点很重要
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Java基础复习笔记 第16章:网络编程
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ###项目技术发展史
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (C++)八皇后问题
  • (JS基础)String 类型
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (不用互三)AI绘画工具应该如何选择
  • (动态规划)5. 最长回文子串 java解决
  • (蓝桥杯每日一题)love
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • ./configure,make,make install的作用
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .env.development、.env.production、.env.staging
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET C# 配置 Options
  • .NET Core 项目指定SDK版本
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值