Python期末考试

1.水滴石穿 (10 分)

水滴石穿是一个成语,起源于东汉班固的《中书•梅城传》。

成语的意思是水不断滴落,能穿石而下;比喻坚持不懈,潜移默化的力量也能成就艰巨的工作。
在这里插入图片描述
假设 M 滴水可以穿透 1 cm厚的石头。一块 N cm厚的石头需要多少滴水才能穿透?

函数接口定义:

def Count_water(M,N)

其中 M 是击穿1cm厚石所需的水滴数量, N 是石的厚度 函数须返回击穿厚度为N的石头需要最少水滴数量

裁判测试程序样例:

M = int(input())
N = int(input())
/* 请在这里填写答案 */
print(Count_water(M,N))

输入样例:
1000
2

输出样例:
2000

def Count_water(M,N):
    return M*N
    

2.输出矩形 (10 分)

本题要求实现一个函数,可以根据函数接口传入的row和col输出一个符合规则的矩形。

规则:构建一个行数为row、列数为col的,由*构成的空心矩形,

例如:函数传入row为4 col为5,实现的函数需要输出4行5列的*表示的空心矩形,如下

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

函数接口定义:

def Draw_rectangle ( row , col):

row为行数、col为列数,函数需要实现打印一个如题目描述中的空心矩形

裁判测试程序样例:


/* 请在这里填写答案 */

row = int(input())
col = int(input())
Draw_rectangle ( row , col )

输入样例:
4 5

输出样例:

*****
*   *
*   *
*****
def Draw_rectangle ( row , col):
    for i in range(row):
        if i==0 or i==row-1:
            print("*"*col)
        else:
            print("*"," "*(col-2),"*",sep="")

3.n的阶乘 (10 分)

输入一个数n,编程求n的阶乘。

输入格式:
输入一个正整数n(n<10)。

输出格式:
n的阶乘。

输入样例:
3

输出样例:
6

import math

n = eval(input())
print(math.factorial(n))

4.密码是否符合要求 (10 分)

小明正在注册邮箱,设置密码时,提示:组成密码的字符中必须包含大写字母和数字字符,且密码长度必须是8-16个字符。

请编写一段代码,帮小明判断他输入的字符串是否符合上述要求,若符合,则输出YES,不符合,输出NO。

输入格式:
输入不大于16个字符长度的非空字符串

输出格式:
符合要求,输出YES,否则,输出NO

输入样例:
XIAOMING2021

输出样例:
YES

p = input()
flag1 = 0
flag2 = 0
if 8 <= len(p) <= 16:
    for i in p:
        if i.isdigit():
            flag2 = 1
        if "A" <= i <= "Z":
            flag1 = 1
    if flag2 == 1 and flag1 == 1:
        print("YES", end="")
    else:
        print("NO", end="")
else:
    print("NO", end="")

5.魔镜 (10 分)

传说魔镜可以把任何接触镜面的东西变成原来的两倍,不过增加的那部分是反的。例如,对于字符串XY,若把Y端接触镜面,则魔镜会把这个字符串变为XYYX;给定一个字符串,请输出使用魔镜后的结果

输入格式:
输入一个非空的字符串

输出格式:
输出使用魔镜后的字符串。

输入样例:
AACB

输出样例:
AACBBCAA

n=input()
s=n[::-1]
print(n+s)

6.整数个数 (10 分)

给定k(k大于1且小于50)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。

输入格式:
输入数据只有一组,第一行包含一个正整数k(k大于1且小于100),第二行包含k个正整数,每两个正整数用一个空格分开。

输出格式:
输出有三个数,第一个数为1出现的次数,第二个数为5出现的次数,第三个数为10出现的次数且后面没有多于的空格,每个数间用一个空格隔开。

样例1:
5
1 5 8 10 5

样例1:
1 2 1

k = eval(input())
d = list(map(int, input().split()))
print(d.count(1), d.count(5), d.count(10))

7.最大的差值 (10 分)

给定n个数字,请你从中选出两个数字,使得这两个数字的差尽量大,输出这个最大的差。

输入格式:
第一行是一个正整数n

第二行有n个空格隔开的整数

输出格式:
输出一个整数,表示最大的差值。

输入样例:
3
1 2 1

输出样例:
1

k=eval(input())
d=list(map(int,input().split()))
print(max(d)-min(d))

8.成绩排序 (10 分)

期末考试临近尾声,请帮老师们编写一段代码,对n位学生的课程成绩(整型数据)进行降序排列并输出。

输入格式:
第一行为n (0 < n < 50),表示班里的学生数目;

接下来n行,每一行代表一个学生,每一行有一个非空(只含有小写字母)字符串name和一个整数score,中间以空格分割,name表示学生的名字,score表示学生的成绩 ,成绩为一个不大于100的非负整数。

输出格式:
输出学生的排名表,相同的成绩按照字典序排列,不存在重名的学生

输入样例:
在这里给出一组输入。例如:

4
ali 50
ala 51
bli 50
bla 52

输出样例:
在这里给出相应的输出。例如:

bla
ala
ali
bli

n=eval(input())
lis=[]
for i in range(n):
    lis.append(list(input().split()))

d={}
for i in lis:
    d[i[0]]=int(i[1])

l=sorted(d.items(),key=lambda x:x[1],reverse=True)

for i in l:
    print(i[0])

9.新年快乐 (10 分)

春节(Spring Festival),即中国农历新年,俗称新春、新岁、岁旦等,口头上又称过年、过大年。春节历史悠久,由上古时代岁首祈岁祭祀演变而来。万物本乎天、人本乎祖,祈岁祭祀、敬天法祖,报本反始也。春节的起源蕴含着深邃的文化内涵,在传承发展中承载了丰厚的历史文化底蕴。在春节期间,全国各地均有举行各种庆贺新春活动,带有浓郁的各地域特色。这些活动以除旧布新、驱邪攘灾、拜神祭祖、纳福祈年为主要内容,形式丰富多彩,凝聚着中华传统文化精华。

为了庆祝新的一年的到来,你打算跟家人一起燃放礼炮。在一串长度为n的字符串中,你可以任意挑选h,a,p,p,y,五个字符来组成一支礼炮,或者挑选h,a,p,p,y,a,p,p,y九个字符来组成两只礼炮,请你编写程序计算你最多可以燃放多少支礼炮

输入格式:
第一行输入一个非空的字符串,只含有小写字母

输出格式:
输出一个整数,表示最多燃放的礼炮个数

输入样例:
happyappy

输出样例:
2

提示:
对于组成礼炮的字符是无序的,也就是说yppayppah、ppppyyaah最多燃放的礼炮个数都为2,与样例相同

n = input()
h = n.count("h") * 2
a = n.count("a")
p = n.count("p") // 2
y = n.count("y")
print(min(a, p, y, h), end="")

10.一个!两个!蓝精灵(难度大) (10 分)

在广袤安宁的原始森林中,快乐的蓝精灵们正在准备一年一度的蓝月亮节。而就在这欢喜忙碌的关头,他们的宿敌——邪恶的巫师格格巫和他的宠物阿兹猫闯入了蓝精灵的秘密领地。受到惊吓的蓝精灵四散而逃,其中可怜的笨笨则盲打误撞跑进了一个神秘的山洞,山洞中的守护神告诉笨笨它喜欢排好队的小朋友,换句话说蓝精灵们只要按照从矮到高排好队就可以从山洞中通过。

现在村庄里一共有n个蓝精灵,他们的身高为1~n的整数,不存在身高相同的蓝精灵。 你可以每次任意交换队伍中的蓝精灵位置,使他们的顺序变为严格升序。请你编写程序计算最少需要交换几次才能让蓝精灵们通过山洞,躲避格格巫的追捕?

输入格式:
第一行:一个正整数n(n<1000),表示蓝精灵的数量

第二行:n个正整数,用空格分开,表示目前蓝精灵的排列情况,每一个正整数表示该位置蓝精灵的身高。

输出格式:
输出一个正整数,表示至少交换多少次,才能帮助蓝精灵们通过山洞。

输入样例:
5
3 1 2 5 4

输出样例:
3

样例说明:
交换1号蓝精灵和2号蓝精灵使队伍变成1 3 2 5 4

交换2号蓝精灵和3号蓝精灵使队伍变成1 2 3 5 4

交换4号蓝精灵和5号蓝精灵使队伍变成1 2 3 4 5

交换方法不唯一,但可以得出该交换次数是最少的

n = eval(input())
l = list(map(int, input().split()))
sum = 0
for i in range(n):
    for j in range(i + 1, n):
        if l[i] > l[j] == min(l[i + 1:]):
            l[i], l[j] = l[j], l[i]
            sum += 1

print(sum)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值