python输入n行、实现n行沙漏打印_Python真题练习:1027-打印沙漏、1029-旧键盘、1031-查验身份证、1033-旧键盘打字...

1027——打印沙漏

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

*****

***

*

***

*****

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

*****

***

*

***

*****

2

代码实现:

importmathdefhourglass(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 inrange(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

代码实现:

defBrokenKey(l):

bk=[]#找出坏键

for i inl[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

代码实现:

defID(l):globalll

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 inZM)

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]):ifj.isdigit():

s+= w[i] *int(j)else:

ll.append(l)#避免存在X而X不在最后一位的情况下,下面重复添加l

returnz=s%11last=ZM_dict.get(z)#检验最后1位校验码是否计算正确

if str(last)!=l[-1]:

ll.append(l)#print(ll)

n=input()#声明全局变量,用于存放不正确的号码

globalll

ll=[]for i inrange(int(n)):

l=input()

ID(l)if ll==[]:print('All passed')else:for i inll:print(i)

运行结果:

1033——旧键盘打字

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

输入格式:

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

注意:如果上档键坏掉了,那么大写的英文字母无法被打出。

输出格式:

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

输入样例:

7+IE.

7_This_is_a_test.

输出样例:

_hs_s_a_tst

代码实现:

defKeyTyping(bad,word):

bad1=bad.lower()

b=set(bad+bad1)#包含坏键大小写的集合

good=[]#找出好键

if '+' in b:#判断坏键集合中是否存在上档键+

for i inword:if i in b or 'A'<=i<='Z':#遇到坏键及大写字母,不添加

continue

else:

good.append(i)else:for i inword:if i not inb:

good.append(i)print(''.join(good))

bad=input()

word=input()

KeyTyping(bad,word)

运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值