• Python真题练习:1027-打印沙漏、1029-旧键盘、1031-查验身份证、1033-旧键盘打字


    1027——打印沙漏

    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

    *****
     ***
      *
     ***
    *****

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:

    输入在一行给出1个正整数N (<=1000) 和一个符号,中间以空格分隔。

    输出格式:

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例:

    19 *

    输出样例:

    *****
     ***
      *
     ***
    *****
    2

    代码实现:

    import math
    def hourglass(s):
        # 2*n**2-1+b=s[0]#打印出的*总数与行数n的规律
        if int(s[0])>0:
            #获取应打印的行数n,考虑有没用完的*的情况,n向下取整
            n=math.floor(math.sqrt((int(s[0])+1)/2))
            #打印沙漏上半部
            for i in range(n):
                print(' '*i,end='')
                print(s[1]*(2*(n-i)-1))
            #打印沙漏下半部
            for i in range(2,n+1):
                print(' '*(n-i),end='')
                print(s[1]*(2*i-1))
        #没用完的符号数*
        b=int(s[0])-2*n**2+1
        print(b)
    s=input().split()
    hourglass(s)

    运行结果:

    1029——旧键盘

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

    输入格式:

    输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。

    输出格式:

    按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。

    输入样例:

    7_This_is_a_test
    _hs_s_a_es

    输出样例:

    7TI

    代码实现:

    def BrokenKey(l):
        bk=[]
        #找出坏键
        for i in l[0]:
            if i not in l[1]:
                bk.append(i)
        #将所有字母转为大写
        bk_up=' '.join(bk).upper()
        #列表去重,不改变排列顺序
        bk_up1=list(set(bk_up.split()))
        bk_up1.sort(key=bk_up.index)
        print(''.join(bk_up1))
    
    l=[]
    for i in range(2):
        n=list(input())
        l.append(n)
    BrokenKey(l)

    运行结果:

    1031——查验身份证

    一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

    首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

    Z:0 1 2 3 4 5 6 7 8 9 10
    M:1 0 X 9 8 7 6 5 4 3 2

    现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

    输入格式:

    输入第一行给出正整数N (<=100) 是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

    输出格式:

    按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

    输入样例1:

    4
    320124198808240056
    12010X198901011234
    110108196711301866
    37070419881216001X

    输出样例1:

    12010X198901011234
    110108196711301866
    37070419881216001X

    输入样例2:

    2
    320124198808240056
    110108196711301862

    输出样例2:

    All passed

    代码实现:

    def ID(l):
        global ll
        s=0
        #z值与校验码M一一对应的字典
        Z=[0,1,2,3,4,5,6,7,8,9,10]
        M=[1,0,'X',9,8,7,6,5,4,3,2]
        ZM=zip(Z,M)
        ZM_dict=dict((ZZ,MM) for ZZ,MM in ZM)
        w=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
        for i,j in enumerate(l[:-1]):
            if j.isdigit():
                s += w[i] * int(j)
            else:
                ll.append(l)
                #避免存在X而X不在最后一位的情况下,下面重复添加l
                return
        z=s%11
        last=ZM_dict.get(z)
        #检验最后1位校验码是否计算正确
        if str(last)!=l[-1]:    
            ll.append(l)
        # print(ll)
    n=input()
    #声明全局变量,用于存放不正确的号码
    global ll
    ll=[]
    for i in range(int(n)):
        l=input()
        ID(l)
    if ll==[]:
        print('All passed')
    else:
        for i in ll:
            print(i)

    运行结果:

     

     

    1033——旧键盘打字

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?

    输入格式:

    输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过1个字符的串。可用的字符包括字母[a-z,A-Z]、数字0-9、以及下划线_ (代表空格)、,、. 、-、+ (代表上档键)。题目保证第2行输入的文字串非空。
    注意:如果上档键坏掉了,那么大写的英文字母无法被打出。

    输出格式:

    在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。

    输入样例:

    7+IE.
    7_This_is_a_test.

    输出样例:

    _hs_s_a_tst

    代码实现:

    def KeyTyping(bad,word):
        bad1=bad.lower()
        b=set(bad+bad1)#包含坏键大小写的集合
        good=[]
        #找出好键
        if '+' in b:#判断坏键集合中是否存在上档键+
            for i in word:
                if i in b or 'A'<=i<='Z':#遇到坏键及大写字母,不添加
                    continue
                else:
                    good.append(i)
        else:
            for i in word:
                if i not in b:
                    good.append(i)
        print(''.join(good))
    
    bad=input()
    word=input()
    KeyTyping(bad,word)

    运行结果:

     
     
  • 相关阅读:
    .net core 3.1 使用Redis缓存
    JavaSE 高级 第11节 缓冲输入输出字节流
    JavaSE 高级 第10节 字节数组输出流ByteArrayOutputStream
    JavaSE 高级 第09节 字节数组输入流ByteArrayInputStream
    JavaSE 高级 第08节 文件输出流FileOutputStream
    JavaSE 高级 第07节 文件输入流FileInputStream
    JavaSE 高级 第06节 初识I、O流
    JavaSE 高级 第05节 日期类与格式化
    JavaSE 高级 第04节 StringBuffer类
    JavaSE 高级 第03节 Math类与猜数字游戏
  • 原文地址:https://www.cnblogs.com/BIXIABUMO/p/12767806.html
Copyright © 2020-2023  润新知