学习内容:
- 掌握 python 单词分析
- 掌握 python 门牌制作
- 掌握 python 成绩分析
- 掌握 python 卡片
- 掌握 python 回文日期
实操分析:
案例一 单词分析
【问题描述】
题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
【输入描述】
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
【输出描述】
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序~~最小~~ 的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
输入输出样例
示例 1
输入
lanqiao
copy
输出
a
2
运行限制
最大运行时间:1s
最大运行内存: 256M
【分析与解答】
统计单词中每个字母出现的次数用循环实现,首先定义一个变量来接收值的变化,如果有多个字母出现的次数相等,再使用循环统计字母出现的次数同样多的字母,将这些字母加入一个序列中,排序后首位就是最小的,输出字典序最小 的那个。
【运行结果】
import os
import sys
# 请在此输入您的代码
#输入代码
#统计字母
word=input() #输入的字母由Word变量接收
#统计单词中出现最多的字母
coun=0
for i in word:
a=word.count(i)
if a>=coun:
coun=a
#多个字母出现次数相等,输出字典序最小的
g=[]
for j in word:
if word.count(j)==coun:
g.append(j)
g.sort()
print(g[0])
print(coun)
案例二 门牌制作
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1个字符0、2个字符1、1个字符7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
运行限制
最大运行时间:1s
最大运行内存: 128M
【分析与解答】
for循环遍历所有数字,但是数字无法直接统计个数,要先转为字符串。
【运行结果】
import os
import sys
# 请在此输入您的代码
coun=0
for i in range(1,2021):
coun += str(i).count('2')
print(coun)
结果为:624
案例三 成绩分析
【问题描述】
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入描述
输入的第一行包含一个整数 n,表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
输入输出样例
示例
输入
7
80
92
56
74
88
100
0
输出
71%
43%
运行限制
最大运行时间:1s
最大运行内存: 256M
【运行结果】
import os
import sys
# 请在此输入您的代码
n=int(input())
lst=[int(input()) for i in range(n)]
#及格率=及格人数/总人数 * 100%
#优秀率=优秀人数/总人数 * 100%
#及格人数lst1
#优秀人数lst2
lst1=0
lst2=0
for i in range(0,n):
if lst[i] >= 85:
lst2 += 1
if lst[i] >= 60:
lst1 += 1
print('{}%'.format(round(lst1/n*100)))
print('{}%'.format(round(lst2/n*100)))
输出结果:
70%
60%
案例四 卡片
【问题描述】
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,
但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021 张,共 2021 张,请问小蓝可以从 1 拼到多少?
提示:建议使用计算机编程解决问题。
运行限制
最大运行时间:1s
最大运行内存: 128M
【运行结果】
import os
import sys
# 请在此输入您的代码
coun=0
for i in range(10000000):
coun+=str(i).count('1')
if coun==2021:
print(i)
break
输出结果:
3181
案例五 回文日期
【问题描述】
题目描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
输入描述
输入包含一个八位整数 NN,表示日期。
输出描述
输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。
输入输出样例
示例
输入
20200202
输出
20211202
21211212
运行限制
最大运行时间:1s
最大运行内存: 256M
【运行结果】
import os
import sys
import datetime
# 请在此输入您的代码
date=input()
y=int(date[0:4]) # 将输入的日期转化为年月日的形式
m=int(date[4:6])
d=int(date[6:])
dd=datetime.date(y,m,d) # 将y,m,d转化为日期格式
flag=True # 输出一次回文日期
for i in range(9999999):
dd=dd+datetime.timedelta(days=1) # 日期增加1天
strdd=str(dd).replace('-','') # 将日期转换为字符串的形式并将其中的-符号去掉
if strdd==strdd[::-1]:
if flag:
print(strdd)
flag=False
if strdd[0]==strdd[2]==strdd[-1]==strdd[-3] and strdd[1]==strdd[3]==strdd[-2]==strdd[-4] :
print(strdd)
break
学习总结:
例如:
- 技术笔记 2 遍
- CSDN 技术博客 2 篇
- 学习的 vlog 视频 1 个