繁体   English   中英

如何在python中将每个其他列表项乘以2

[英]How to multiply every other list item by 2 in python

我正在制作一个验证信用卡的程序,方法是将卡号中的每个其他数字乘以2; 在我将乘以2的数字与未乘2的数字相加之后,所有的两位数数字均加上其数字的总和,因此14变为1 + 4。 我下面有一张解释这一切的照片。 我正在制作一个执行所有步骤的python程序。 我已经在下面完成了一些代码,但是我不知道下一步该怎么做? 请帮助,将不胜感激。 无论如何,我拥有的代码将返回错误。

在此处输入图片说明

class Validator():
    def __init__(self):
        count = 1
        self.card_li = []
        while count <= 16:
            try:
                self.card = int(input("Enter number "+str(count)+" of your card number: "))
                self.card_li.append(self.card)
                #print(self.card_li)
                if len(str(self.card)) > 1:
                    print("Only enter one number!")
                    count -= 1
            except ValueError:
               count -= 1   
        count += 1
        self.validate()

    def validate(self):
        self.card_li.reverse()
        #print(self.card_li)
        count = 16
        while count >= 16:
            self.card_li[count] = self.card_li[count] * 2
            count += 2






Validator()

要执行该总和:

>>> s = '4417123456789113'
>>> sum(int(c) for c in ''.join(str(int(x)*(2-i%2)) for i, x in enumerate(s)))
70

这个怎么运作

该代码由两部分组成。 第一部分创建一个字符串,每隔一个数字加倍:

>>> ''.join(str(int(x)*(2-i%2)) for i, x in enumerate(s))
'8427226410614818123'

对于字符串s每个字符x ,这会将字符转换为整数int(x)并根据索引i是偶数还是奇数将其乘以1或2: (2-i%2) 所得乘积将转换回字符串: str(int(x)*(2-i%2)) 然后将所有琴弦连接在一起。

第二部分对字符串中的每个数字求和:

>>> sum(int(c) for c in '8427226410614818123')
70

您需要在while()循环中增加count 同样, card_li if..检查之后,将用户输入追加到card_li列表中。 您的init方法应类似于:

def __init__(self):
    count = 1
    self.card_li = []
    while count <= 16:
        try:
            self.card = int(input("Enter number "+str(count)+" of your card number: "))
            if len(str(self.card)) > 1:
                print("Only enter one number!")
            self.card_li.append(self.card)
            count += 1
        except ValueError:
           pass  
    self.validate()

至于您的validate方法,即使按照您编写的逻辑来看,它似乎也不完整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM