zoukankan      html  css  js  c++  java
  • 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)

    运行结果:

     
     
  • 相关阅读:
    java.lang.String 的 + 号操作到底做了什么事情?
    我的【Java】面试日记
    ReentrantLock源码学习总结 (二)
    ReentrantLock源码学习总结 (一)
    【Dubbo】带着问题看源码:什么是SPI机制?Dubbo是如何实现的?
    假如 Redis Cluster 模式用在 T-io 上
    Win10下安装tensorflow详细过程
    Python 3.7 使用pyhive (坑)
    ARIMA
    AttributeError: 'Series' object has no attribute 'ix'
  • 原文地址:https://www.cnblogs.com/BIXIABUMO/p/12767806.html
Copyright © 2011-2022 走看看