python中的迭代器,应该打印10个有效的id号

2024-04-23 10:41:30 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的代码,到目前为止,代码应该实现一个迭代器,在check\ id函数的条件下打印10个有效的id。你知道吗

https://www.codepile.net/pile/b1PVdbBq

输出应为: 123456782 123456790 123456808 123456816 123456824 123456832 123456840 123456857 123456865 123456873 但不知为什么我的输出是错误的…帮助。。。你知道吗

import string
letters = string.ascii_letters
digits = string.digits


class NumNotNineLong(Exception):

    def __init__(self):
        pass
    def __str__(self):
        return "The number you provided is not nine digits long."

class NotNumber(Exception):

    def __init__(self):
        pass

    def __str__(self):
        return "The input you provided is not an integer"

class IDIterator():

    increment = 1

    def __init__(self,_id):
        self._id = _id  

    def __iter__(self):
       return self 

    def __next__(self):

        while check_id_valid(str(self._id)[-9::]) == False:
            self._id *= 2
            self._id += IDIterator.increment
            IDIterator.increment += 1
        if check_id_valid(str(self._id)[-9::]):
            result = str(self._id)[-9::]
            self._id *= 2
            self._id += 1
            IDIterator.increment = 2
            return result



def check_id_valid(id_number): #A function that checks whether ID number are valid or not
    for letter in str(id_number):
        if letter not in string.digits:
            raise NotNumber
    numbers = [int(i) for i in str(id_number)]
    if len(numbers) != 9:
        raise NumNotNineLong
    set_numbers = []
    for i in range(len(numbers)):
        if i % 2 == 0:
            set_numbers.append(numbers[i])
        else:
            set_numbers.append(numbers[i] * 2)
    true_numbers = []
    for num in set_numbers:
        if num > 9:
            temp = [int(i) for i in str(num)]
            true_numbers.append(sum(temp))
        else:
            true_numbers.append(num)
    if sum(true_numbers) % 10 == 0:
        return True
    else:
        return False

def main():
    result = IDIterator(123456780)
    for _ in range(10):
        print(result.__next__())


if __name__ == "__main__":
    main()

练习如下:一个名为check\u id\u valid的布尔函数,定义为: def check\ id\有效(id\编号): 函数获取一个ID number(integer)参数并返回一个真布尔值(true),否则返回一个假值(false)。 当check\u id函数是独立的时,它工作得很好

然后应该实现一个类来表示名为IDIterator的迭代器。你知道吗

这个类有一个名为id\的属性,它表示0到999999999之间的id号(在创建迭代器实例时初始化这个属性)。你知道吗

返回迭代器实例的iter方法必须在上述类中使用。你知道吗

在上面的类中必须使用next方法,该方法返回在ID∗(包括ID)和99999999999之间的下一个有效ID号。你知道吗

要检查您编写的代码是否正常工作,请使用您创建的类中的迭代器编写主程序。你知道吗

具有下一个ID值的迭代器必须初始化123456780,生成10个新ID并将它们打印到屏幕上。以下是您应该收到的输出:


Tags: inselfidtruenumberforreturnif