python测校验码

img

img


分别是要求和我写的代码,中间部分我觉得应该没问题,输出部分应该怎么修改,如果能讲讲原因就更好了

img


补张样例2
我个人感觉最大的问题在All passed的输出上

对齐有问题,加权求和放出来。然后验证前17位为数字的if判断的else语句去掉。同时t在for循环中要重新赋值为0

img

不过题注的逻辑还是没符合输出要求,输入和输出混合一起了,一个用一个数组收集错误的身份证,最后再一起输出

n=int(input())
t=0
lst=[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
M=["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
num=['0','1','2','3','4','5','6','7','8','9']
allPass=True##是否存在错误身份证

errIds=[]
for i in range(0,n):
    s=list(input())
    t=0
    pre17AllNumber=True
    for j in range(0,17):
        if (s[j] not in num)==True:
            errIds.append(''.join(s))############
            allPass=False
            pre17AllNumber=False
            break
    if not pre17AllNumber:#前17位不全为数字,不执行下面加权验证
        continue
    for j in range(0,17):
        t=t+(lst[j]*int(s[j]))
    z=t%11
    m=M[z]
    if m!=s[17]:
        allPass=False
        errIds.append(''.join(s))############
if allPass:
    print('All passed')
else:
    print('\n'.join(errIds))

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
  • 这篇博客: (三)python的基础语法及输入输出中的 4.pass语句 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • pass语句的作用是占位,什么都不做,只是为了保证语法的正确性,一般需要pass语句的情况也就三种

    不知道后面的代码怎么写的时候

    不需要写代码细节的时候

    当语法必须,又没有实际内容可写的时候

  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,需要优化Python检验码代码的输出部分。每个测试用例输出都应该被"All Passed"的提示包围。具体的解决方案如下:

    1. 在每个测试用例前后加上"All Passed"的提示语句,并且每个提示语句都需要独立一行。可以使用字符'\n'实现换行。

    2. 可以将生成和输出测试用例的代码封装成一个函数,分别调用该函数即可输出测试用例和提示语句。

    以下是修改后的代码示例:

    import random
    
    # 生成一个随机码
    def generate_code():
        code = ""
        for i in range(6):
            # 生成ASCII编码在65到90之间的数字
            code += chr(random.randint(65, 90))
        return code
    
    # 生成n个随机码
    def generate_codes(n):
        codes = []
        for i in range(n):
            codes.append(generate_code())
        return codes
    
    # 输出随机码
    def print_codes(codes):
        for code in codes:
            print(code)
    
    # 输出测试用例
    def print_test_cases(n):
        print("Test Cases:")
        for i in range(1, n+1):
            codes = generate_codes(i)
            print("Case %d:" % i)
            print_codes(codes)
            print("")
    
    # 输出提示语句
    def print_passed():
        print("All Passed")
    
    # 输出n个测试用例及提示语句
    def generate_test_cases_and_passed(n):
        print_test_cases(n)
        print_passed()
    

    测试使用以上代码的输出结果:

    generate_test_cases_and_passed(3)
    
    Test Cases:
    Case 1:
    XPRQPF
    
    Case 2:
    LWVTXP
    SFNATU
    
    Case 3:
    RASFLM
    GKVNEG
    XFPYKV
    
    All Passed
    

    同时,以上代码还可以很容易地修改为接收用户输入的参数,从而实现更灵活的测试用例数量控制。例如:

    n = int(input("Please input the number of test cases you want to generate: "))
    generate_test_cases_and_passed(n)
    

    原因:以上代码封装了生成随机码、输出随机码、输出测试用例、输出提示语句等多个功能,使得每个功能都能够独立使用。在输出测试用例时,对于每个测试用例,都会先输出该测试用例的编号,再输出各个随机码。在输出提示语句时,添加了独立的一行进行分隔,使得提示语句和上一条输出不会混淆在一起。