首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Python中使用生成器与常规函数来计算luhn数

在Python中,可以使用生成器和常规函数来计算Luhn数。

Luhn数是一种用于验证信用卡号、身份证号等号码是否有效的算法。它的计算过程如下:

  1. 从号码的最后一位开始,逐个取出每一位数字。
  2. 从最后一位开始,将奇数位的数字乘以2,如果乘以2后的结果大于9,则将其减去9。
  3. 将得到的所有数字相加。
  4. 如果相加的结果能够被10整除,则该号码有效,否则无效。

下面是使用生成器和常规函数来计算Luhn数的示例代码:

代码语言:txt
复制
# 生成器方式计算Luhn数
def luhn_generator(number):
    digits = [int(x) for x in str(number)]
    parity = len(digits) % 2
    for i, digit in enumerate(digits):
        if i % 2 == parity:
            digit *= 2
            if digit > 9:
                digit -= 9
        yield digit

# 常规函数方式计算Luhn数
def luhn_function(number):
    digits = [int(x) for x in str(number)]
    parity = len(digits) % 2
    luhn_sum = 0
    for i, digit in enumerate(digits):
        if i % 2 == parity:
            digit *= 2
            if digit > 9:
                digit -= 9
        luhn_sum += digit
    return luhn_sum % 10 == 0

# 使用生成器方式计算Luhn数
luhn_gen = luhn_generator(7992739871)
luhn_digits = list(luhn_gen)
luhn_sum = sum(luhn_digits)
is_valid = luhn_sum % 10 == 0
print("Luhn数:", luhn_digits)
print("和:", luhn_sum)
print("是否有效:", is_valid)

# 使用常规函数方式计算Luhn数
luhn_num = 7992739871
is_valid = luhn_function(luhn_num)
print("是否有效:", is_valid)

以上代码中,luhn_generator函数使用生成器的方式逐个生成Luhn数的每一位数字,而luhn_function函数则直接返回Luhn数的计算结果。通过调用这两个函数,可以得到Luhn数的每一位数字、和以及是否有效。

请注意,以上代码仅为示例,实际应用中可能需要根据具体需求进行适当的修改和优化。

关于Luhn数的应用场景,它主要用于验证信用卡号、身份证号等号码的有效性。在实际开发中,可以通过计算Luhn数来判断用户输入的号码是否正确,从而提高数据的准确性和安全性。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云主页:https://cloud.tencent.com/
  • 云计算产品:https://cloud.tencent.com/product
  • 云数据库 TencentDB:https://cloud.tencent.com/product/cdb
  • 云服务器 CVM:https://cloud.tencent.com/product/cvm
  • 人工智能平台 AI Lab:https://cloud.tencent.com/product/ai
  • 云存储 COS:https://cloud.tencent.com/product/cos
  • 区块链服务 BaaS:https://cloud.tencent.com/product/baas
  • 元宇宙服务:https://cloud.tencent.com/product/metaverse

以上是关于在Python中使用生成器与常规函数来计算Luhn数的完善且全面的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于 Python 的自动文本提取:抽象法和生成法的比较

Gensim的TextRank使用Okapi BM25函数来查看句子的相似程度。它是Barrios等人的一篇论文的改进。...sentenceLength计算为距此值的标准化距离。 sentencePosition:规范化的句子(句子列表的位置)。...更多关于如何计算得分的例子都在这里。 BLEU指标 BLEU指标是一种经过修改的精度形式,广泛用于机器翻译评估。 精度是黄金和模型转换/摘要中共同出现的单词数模型摘要单词数的比率。...通过首先找到单个/短语在任何单个引用中出现的最大次数来计算修改的N-gram精度。此计数成为该单词/短语的最大引用计数。...不幸的是,我们发现它生成的总结比Gensim的TextRank和Luhn模型的总结信息量少。 此外,LexRank并不总是ROUGE得分击败TextRank 。

1.9K20

信用卡验证-卢恩算法

如今,Luhn算法是电子支付系统的重要组成部分,所有主要信用卡均使用此算法。 Luhn算法的工作原理 Luhn公式算法是由德国计算机科学家汉斯·彼得·卢恩于1954年IBM担任研究员时开发的。...Luhn算法通过对给定的信用卡号应用一系列计算,将这些计算的结果相加,并检查结果数字是否预期结果匹配。如果相符,则信用编号被视为有效;如果不符,算法将拒绝该信用卡号码,提示用户输入错误。...对于消费者来说,我们日常生活中使用Luhn算法时,往往毫无察觉。在在线下单或使用商家的销售点 (POS) 终端时,计算机系统能够迅速判断我们输入的信息是否有误。...如今,Luhn算法已集成流行的编程语言和代码库,使得新的软件应用程序包含基于Luhn的识别号验证变得相对容易。...小结 无论是咖啡馆里使用信用卡,还是在网上购物,Luhn算法我们生活的每一次交易中都发挥着重要作用。了解并实现这个算法,不仅能够提升数据验证的能力,还能为每一个用户的体验增添一份安全感。

8510
  • 图解Python 函数

    函数是 “ 一系列命令的集合”,我们可以通过调用函数来自动执行某一系列命令。虽然经常性地出现于文章的print()是被录入Python的标准库的函数,但是,程序员亦可创建自己的函数。...Python,可以通过使用列表或者双精度浮点型变量来灵活指定参数。同时,也可以将函数运行的结果作为返回值返回。 函数可以多次调用。...1 将参数赋值到双精度浮点型变量的方法 伪参数前面添加*就可以使参数被赋值到双精度浮点型变量。 ? 顺便说一下,这个avg函数可以通过利用数学函数的sum()更简洁地书写。 ?...之相对,函数外部使 用的变量为全局变量,全局变量可以在任意函数调用。 ? 函数被用于嵌套时,只在其每一单次的函数调用内有效。 ?...如果想要使用生成器的话,需要以下几个步骤:1.需要定义生成器函数;2.需要调用生成器 并且初始化;3.将生成器对象作为参数调用next()函数。

    1.1K40

    图解 Python 函数

    ​​函数是 “ 一系列命令的集合”,我们可以通过调用函数来自动执行某一系列命令。虽然经常性地出现于文章的print()是被录入Python的标准库的函数,但是,程序员亦可创建自己的函数。...Python,可以通过使用列表或者双精度浮点型变量来灵活指定参数。同时,也可以将函数运行的结果作为返回值返回。 函数可以多次调用。...1 将参数赋值到双精度浮点型变量的方法 伪参数前面添加*就可以使参数被赋值到双精度浮点型变量。 顺便说一下,这个avg函数可以通过利用数学函数的sum()更简洁地书写。...之相对,函数外部使 用的变量为全局变量,全局变量可以在任意函数调用。 函数被用于嵌套时,只在其每一单次的函数调用内有效。...如果想要使用生成器的话,需要以下几个步骤:1.需要定义生成器函数;2.需要调用生成器 并且初始化;3.将生成器对象作为参数调用next()函数。

    63800

    python numpy生成等差数列、等比数列的实例

    例如,内置的 range 函数用于生成有穷整数等差数列(Arithmetic Progression,AP), itertools.count 用于生成无穷等差数列。...然而,如果一个类只是为了构建生成器而去实现 __iter__ 方法,那还不如使用生成器函数。毕竟,生成器函数是制造生成器的 工厂。...然而,itertools.count 函数从不停止,因此,如果调用 list(count()),Python 会创建一 个特别大的列表,超出可用内存,调用失败之前,电脑会疯狂地运转。...不过,itertools.takewhile 函数则不同,它会生成一个使用另一个生成器生成器指 定的条件计算结果为 False 时停止。...import itertools # 注意,下面示例的 aritprog_gen 不是生成器函数, # 因为定义体没有 yield 关键字。

    8.5K40

    一个Python自动提取内容摘要的实践

    文章标题文章内容的关系,句子是否包含标题词,根据句子包含标题词的多少来打分。...使用 TextRank 算法计算图中各点的得分时, 需要给图中的点指定任意的初值, 并递归计算直到收敛, 即图中任意一点的误差率小于给定的极限值时就可以达到收敛, 一般该极限值取 0.0001。...句子相似度计算:构建图 G 的边集 E,基于句子间的内容覆盖率,给定两个句子,采用如下公式进行计算: ?...经过训练,玻森训练集上的表现相对于未学习的摘要结果有了明显的提升——训练后的摘要系统 F1 提高了 30%。...值得一提的是,特征训练,为了改善摘要结果的可读性,玻森加指代关系特征,使得模型表现提高了 8%。

    1.8K00

    .NET Core 如何验证信用卡卡号

    Luhn / MOD 10 算法 根据维基百科的描述,Luhn 算法,也叫模10算法,由科学家 Hans Peter Luhn 1960年发明,广泛用于校验借记卡、信用卡卡号是否正确,其标准为 ISO...计算方法如下,比如对于卡号 : 6011000990139424 末尾的数字 4 叫做校验码,剩下的数字为 601100099013942。...,相隔一个数字的值 x2,即上面红色标出的奇数位翻倍,得到: 4 4 18 3 2 018 9 0 0 0 1 2 0 12 发现这里面有超过10的两位数,即蓝色标出的18、18、12,对于大于10的,...将其 -9,得到: 4 4 9 3 2 09 9 0 0 0 1 2 0 3 把所有的加起来,得到:46 将这个结果乘以9,46 x 9 = 414 发现 414个位上的数字 4 和我们第一步拿掉的...Invalid_LuhnFailure = 201 // 验证失败,不满足 Luhn } 使用方法可以参考单元测试的案例,如验证一个卡号 4012888888881881,传入两个已知BIN

    3.4K10

    Python神奇的迭代器和生成器

    本文目录 迭代器和可迭代对象 列表生成式列表生成器 函数生成器(generator) 迭代器和生成器的关系 利用生成器判断子序列详解 总结 迭代器和可迭代对象 Python 中一切皆对象,对象的抽象就是类...列表生成式列表生成器 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。...Python,这种一边循环一边计算的机制,称为生成器:generator。...不过一定要注意,实际工作尽量不要用这种技巧,因为你的领导和同事有可能并不知道生成器的用法,你即使写了详细的注释他们也难以理解,不如用常规方法解决比较好!...迭代器可以通过 next() 函数来得到下一个元素,从而支持遍历。 生成器是一种特殊的迭代器(迭代器却不见得是生成器)。

    53110

    .NET Core 如何生成信用卡卡号

    金融科技行业的实际工作,通常还需要生成信用卡卡号用来测试,今天我就来教大家如何生成信用卡卡号。...使用char计算,耗时 1ms 所以,不要小看这些“骚操作”,平时代码里看到同事这么写不要觉得只是在装逼。尽管有时候代码阅读体验没有那么直观,但如果你的业务面临苛刻的压力时,能够明显体验到性能区别。....然而装逼,是人类社会的刚需,光用char计算逼格还不够,还记得上回的 Luhn 算法吗?...测试计算结果准确,如下: ? 随机骚操作 可能大家觉得C#生成随机有什么难的,不就是一个 Random 类型吗?...设计类库给别人你用的话,一定要注意场景,我的实际工作,生成卡号往往是大批量操作,有性能要求,所以写代码要尽量拷问每一处细节。

    1.4K30

    Python 3 之 生成器详解

    生成器函数:编写为常规的def语句,但是使用yield语句一次返回一个结果,每个结果之间挂起和继续它们的状态。...状态挂起 和返回一个值并退出的常规函数不同,生成器函数自动在生成值的时刻挂起 并 继续函数的执行。因此,它们对于提前计算整个一系列值以及雷总手动保存和恢复状态都很有用。...迭代协议整合 要真正地理解生成器函数,我们需要知道,它们Python的迭代协议的概念密切相关。...当然,目前给出的示例的很多魔力在于,它们使用zip内置函数来配对来自多个序列的参数。...为了使其Python 3.x下正常工作,我们需要使用list内置函数来创建一个支持多次迭代的对象: >>> def myzip(*args): iters = list(map(iter, args

    1.2K20

    python内置函数

    x,c=c:x+c print(f(20),g(20)) map函数 map函数的输入值是一个映射关系和一个序列(列表或者元组或者生成器),利用map和lambda组合可以更加简洁的进行映射值的获取,...使得代码更加通俗易懂 str1=map(lambda x:x**2+1,[1,2,3,5]) for i in str1: print(i) filter函数 filter函数map函数输入参数相同...,区别是filter函数主要用于过滤,它添加了一个限定条件(定义映射关系),符合的会被输出,不符合的会被去掉。...1,2,3,5]) for i in str1: print(i) 返回3和5 reduce函数 图片 #计算4!...这是因为总有替代函数可以使用, 但就简洁而言, Python内置函数已经达到了目前可以做到的极致, 而且内置函数使用快速方便, 如果没有特殊要求, 可以考虑使用Python内置 除了这些内置函数以外

    60710

    生成器有什么好处?

    本文的组织如下:第1章,我们简单地介绍了Python的迭代器协议;本文第2章,将会详细介绍生成器的概念和语法;第3章,将会给出一个有用的例子,说明使用生成器的好处;本文最后,简单的讨论了使用生成器的注意事项...为什么Python,文件还可以使用for循环进行遍历呢?这是因为,Python,文件对象实现了迭代器协议,for循环并不知道它遍历的是一个文件对象,它只管使用迭代器协议访问对象即可。...Python有两种不同的方式提供生成器生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。...它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值 自动实现迭代器协议:对于生成器Python会自动实现迭代器协议,以便应用到迭代背景...实际工作,充分利用Python生成器,不但能够减少内存使用,还能够提高代码可读性。掌握生成器也是Python高手的标配。希望本文能够帮助大家理解Python生成器

    1.4K30

    Python迭代器和生成器的区别及生成器的原理

    迭代器和生成器的区别 生成器的原理 代码示例 总结 什么是迭代器? Python,迭代器是一种用于遍历可迭代对象的对象。可迭代对象是指那些可以返回一个迭代器的对象,例如列表、元组、字典等。...迭代器对象可以使用next()函数来逐个访问可迭代对象的元素,直到没有更多的元素可访问为止。 迭代器具有以下特点: 迭代器对象必须实现__iter__()和__next__()方法。...相反,它们只需要时逐个生成元素。 什么是生成器生成器是一种特殊类型的迭代器。常规的迭代器不同,生成器可以通过使用yield语句来定义。...我们使用这些迭代器和生成器来遍历一个列表,并打印出每个元素的值。 总结 本文详细介绍了Python迭代器和生成器的区别,并解释了生成器的原理。...迭代器和生成器都是处理序列化数据的重要工具,它们节省内存和处理大量数据时非常有用。迭代器适用于有限的序列,而生成器适用于无限序列或者需要延迟计算的情况。

    41230

    ACS Cent. Sci.|生成对抗网络预测晶体结构

    由于目前可用的实验晶体数据库比无机晶体可能的化学空间小几个数量级,所以许多HTVS研究中心采用已知晶体的元素替代策略来扩大搜索空间:使用组合元素替换现有的晶体结构基元,然后进行密度泛计算来生成新的大型计算晶体数据库...二、模型方法 2.1 数据表示 使用一个二维矩阵来对晶体结构进行编码,矩阵包括晶胞参数(长度、角度)和晶胞每个原子的坐标。如下图1所示。 ? 图1....Critic计算Wassertein距离来表示真实数据和训练数据之间的差距,通过减小这个距离,生成器将生成更真实的材料。分类器从输入的二维表示输出组分向量,用于确保生成的新材料满足给定的组分条件。...图3.GAN结构 三、实验结果 3.1 iMatGen的比较 将当前模型应用于Mg-Mn-O体系之前,我们首先比较了iMatGen工作中使用的V-O体系的结果。...这些生成的晶体结构会用于性能评估的密度泛理论计算。实验结果如下图4。 ? 图4.

    76520

    干货 | TF-IDF的大用处

    3.计算TF-IDF ? 可以看到,TF-IDF一个词文档的出现次数成正比,该词整个语言中的出现次数成反比。...有些时候,除了找到关键词,我们还希望找到原文章相似的其他文章。比如,"Google新闻"主新闻下方,还提供多条相似的新闻。 ?...使用这个公式,我们就可以得到,句子A句子B的夹角的余弦。 ? 余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。...由此,我们就得到了"找出相似文章"的一种算法: (1)使用TF-IDF算法,找出两篇文章的关键词; (2)每篇文章各取出若干个关键词(比如20个),合并成一个集合,计算每篇文章对于这个集合的词的词频(...Luhn博士认为,文章的信息都包含在句子,有些句子包含的信息多,有些句子包含的信息少。"自动摘要"就是要找出那些包含信息最多的句子。句子的信息量用"关键词"来衡量。

    1.4K60

    python笔记:一些常用的小trick(二)

    装饰器 装饰器的概念有点类似于数学的泛,是函数的函数。其输入参数为一个方法,输出为另一个方法。 熟练地使用装饰器,我们可以更好地对函数进行模块化操作,减少重复代码量。...生成器 生成器python的一种常用的优化性能的方法,其核心在于其计算是lazy的,每次只有当调用时才会进行相应的计算。...一种最为简单的生成器实现方法为: my_iter = (i for i in range(10)) type(my_iter) # generator 但是,实际使用,我们所需要的生成器内容往往会更为复杂...(i) 可以看到,生成器往往会与yield方法联合使用,yield方法表示执行到当前内容时直接返回后面的结果,并且在下一次调用这个函数时从下一行开始继续执行。...如果不使用for循环,我们也可以通过下面的方式手动触发生成器: tmp = my_iter(10) next(tmp) # 0 next(tmp) # 1 不过需要注意的是,使用next函数时,如果已经取完了生成器的所有元素

    22220

    【算法】TF-IDF算法及应用

    第三步,计算TF-IDF。 ? 可以看到,TF-IDF一个词文档的出现次数成正比,该词整个语言中的出现次数成反比。...有些时候,除了找到关键词,我们还希望找到原文章相似的其他文章。比如,"Google新闻"主新闻下方,还提供多条相似的新闻。 ?...使用这个公式,我们就可以得到,句子A句子B的夹角的余弦。 ? 余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。...由此,我们就得到了"找出相似文章"的一种算法:   (1)使用TF-IDF算法,找出两篇文章的关键词;   (2)每篇文章各取出若干个关键词(比如20个),合并成一个集合,计算每篇文章对于这个集合的词的词频...Luhn博士认为,文章的信息都包含在句子,有些句子包含的信息多,有些句子包含的信息少。"自动摘要"就是要找出那些包含信息最多的句子。 句子的信息量用"关键词"来衡量。

    1.1K30

    程序员必须掌握的600个英语单词

    )运算子调用操作符 (同 function call operator) candidate function 候选式 候选函数 (式多载决议程序中出现的候选式) chain 串链(例...(分布式电算) 分布式计算 分散式计算 (分散式电算) document 文件 文档 dot operator dot(句点)运算子 ....改写、覆写 重载、改写、重新定义 ( derived class 重新定义虚拟式 package 套件 包 pair 对组 palette 调色盘、组件盘、工具箱 pane 窗格 窗格...(有时为嵌板之意,例 Java Content Pane) parallel 平行 并行 parameter 叁式叁数列上的变数) 叁、形式叁、形叁 parameter list 叁数列...by reference 传址(式引的一种传递方式) 传地址, 按引用传递 pass by value 传值(式引的一种传递方式) 按值传递 pattern 范式、样式 模式 performance

    1.3K20

    独家 | 什么是Python的迭代器和生成器?(附代码)

    本文介绍了Python生成器和迭代器。处理大量数据时,计算机内存可能不足,我们可以通过生成器和迭代器来解决该问题。 迭代器:一次一个! Python 是一种美丽的编程语言。...如果你曾经处理大量数据时遇到麻烦(谁没有呢?!),并且计算机内存不足,那么你会喜欢Python的迭代器和生成器的概念。...Python创建一个迭代器 熟悉Python生成器 实现Python生成器表达式 为什么你应该使用迭代器? 什么是可迭代对象“可迭代对象是能够一次返回其一个成员的对象”。...熟悉Python生成器 生成器也是迭代器,但更加优雅。使用生成器,我们可以实现迭代器相同的功能,但不必编写iter()和next()函数。...普通函数使用return关键字返回值。但是生成器函数使用yield关键字返回值。这就是生成器函数常规函数不同的地方(除了这种区别,它们是完全相同的)。

    1.2K20
    领券