下面是我的代码,到目前为止,代码应该实现一个迭代器,在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并将它们打印到屏幕上。以下是您应该收到的输出:
目前没有回答
相关问题 更多 >
编程相关推荐