python学习笔记之例题篇NO.3

2025-08-27 05:24:27   场地维护动态

获得用户输入的一个整数N,输出N中所出现不同数字的和。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

s = list(set(list(input())))# ①

result = 0

for i in s:

result += eval(i)

print(result)

① set() 函数创建一个无序不重复元素的集合,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等,返回新的集合对象{ , }

人名最多数统计

编程模板中给出了一个字符串,其中包含了含有重复的人名,请直接输出出现最多的人名。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

s = '...字符串...'

from collections import Counter# ①

words = s.split()

c = Counter(words)# ②

print(c.most_common(1)[0][0])# ③

①Counter是一个简单的计数器;

②C 输出的字典类型:{'字符':次数,...}

③most_common(n)返回一个出现次数从大到小的前 n 个元素的列表。此处是[(字符, 次数)]

方法二:

words = s.split()

counts = {}

for word in words:

counts[word] = counts.get(word, 0) + 1 # ①

items = list(counts.items()) # ②

items.sort(key=lambda x: x[1], reverse=True)

print(items[0][0])

① 字典取值方式dictname.get(key, value);如果key存在返回对应的value,如果key不存在,返回None,设置的不加入字典中

②dictname.items()函数以列表返回可遍历的(键值)元组数组。

给运动员打分计算总成绩排名

在文件dafen.txt中存放了12个裁判员为10名运动员的评分,现在要求编写程序,从文件中取出这些分数,每个运动员评分中去掉一个最高分和一个最低分,计算平均成绩,然后给出运动员排名;

要求输出格式: print( “第{:2d}名 {:2d}号运动员,平均分为{:6.2f}”.format(名次,运动员编号,平均分))

例如; 第 1名 7号运动员,平均分为 8.56 …(略)

def read_data():#读文件内容,返回读入的数据

fp=open("src/dafen.txt") #以默认的方式打开文件,默认‘r’,'utf-8'

score = []

No = 0

for line in fp:

No+=1

x = list(map(eval, line.split())) #eval函数 接收运行一个字符串表达式,返回表达式的结果值。

a,*s,b = sorted(x)

score.append((sum(s)/10,No))

return score

def cal_sort_avg(p):#对运动员成绩排序,返回排序后的结果

# -------------------BEGIN------------------------

p.sort(key = lambda x: (-x[0],x[1]))

return p

# ------------------END------------------------

def print_result(p):#输出排序结果,按格式输出最终结果

# -------------------BEGIN------------------------

for i in range(len(p)):

print( "第{:2d}名 {:2d}号运动员,平均分为{:6.2f}".format(i+1,p[i][1],p[i][0]))

# ------------------END------------------------

def main():

l1=read_data() #读文件中的数据

l2=cal_sort_avg(l1) #进行数据处理

print_result(l2) #输出结果

if __name__ == '__main__':

main()

判断字符串是否数字

str.isnumeric()方法可以判断字符串str是否都是数字字符。若都是数字字符,返回true,否则返回false

获取字符在字符串的位置

使用str.find(c)方法可以返回字符串str中字符c所在位置的序号。

“2021/2/25“.find(“/“)返回数字4。

str.rfind(c)方法可以返回从尾部起,字符串str中字符c所在位置的序号。

“2021/2/25“.rfind(“/“)返回数字6。

Q4 图论问题

eg:如下图所示,G是一个无向图,其中蓝色边的长度是 11、橘色边的长度是 22、绿色边的长度是 33。则从 A 到 S 的最短距离是多少?

# 录入路线图

lyh_list = [

["A", "E", 1],["A", "B", 2],["A", "C", 1],["A", "D", 1],["A", "E", 1],["B", "G", 1],

["B", "J", 2],["C", "D", 3],["C", "G", 3],["C", "F", 3],["D", "G", 2],["D", "H", 1],

["D", "I", 2],["E", "H", 1],["E", "I", 3],["F", "J", 1],["F", "G", 1],["G", "K", 2],

["G", "I", 3],["H", "L", 2],["H", "I", 1],["I", "M", 3],["J", "S", 2],["K", "N", 1],

["K", "L", 3],["L", "R", 1],["L", "M", 1],["M", "N", 2], ["M", "Q", 1],["M", "S", 1],

["N", "P", 1],["Q", "O", 1],["O", "R", 3],["P", "O", 1],["R", "S", 1],

]

#路线存储器

loads = []

#寻路函数

def find(length, r):# length: 路线长度 r:节点node

for x, y in enumerate(lyh_list):

if r[1] == y[0]:

length+=r[2]

if y[1] == 'S':

loads.append(length)

else: find(length = length, r = y)

for i, j in enumerate(lyh_list):

if j[0] == 'A':

find(length = j[2], r = j)

print(min(loads))

Q5 数字三角形

h = int(input())

list = [list(map(int, input().split())) for i in range(h)]

for i in range(1,h): #从第二行开始

for j in range(0,i+1):

if j == 0:# 最左侧的只能是上一行最左侧的移下来的

list[i][j] += list[i-1][j]

elif j == i:# 最右侧的只能是上一行最右侧的移下来的

list[i][j] += list[i-1][j-1]

else:

list[i][j] += max(list[i-1][j-1:j+1])

# print(max(list[-1]))

if h & 1: # 如果是奇数行,则返回最中间值

print(list[-1][h // 2])

else: # 偶数行则返回中间较大值

print(max(list[-1][h // 2 - 1], list[-1][h // 2]))

一定得看题,不能上来就递归或者搜索

最后一句话决定了题目性质:

①向左下走的次数与向右走的次数相差不能超过1意味着:

|freq(左) - freq(右)| = 0 or 1

② 我们把一次左移和一次右移称为对称位移,一次对称位移后,竖直方向是不变的;

③ freq(左)+freq(右) = 行数 ,由于①的限制,如果行数是偶数,只能是freq(左) = freq(右);如果行数是奇数,只能是|freq(左) - freq(右)| = 1;

综上,所谓的最大值并不是在一堆数中选最大,实际上最大值是确定值,所以极具误导性

集合的使用

问题描述:

小蓝有 n 个单词,但是单词中有一些是重复的,请帮小蓝去除重复的单词。

输入格式

输入第一行包含一个正整数 n ,表示小蓝的单词数量。

接下来 n 行,每行包含一个由小写字母组成的单词。

输出格式

请输出去除重复后的那些单词。如果一个单词出现了多遍,请保留第一次出现的单词,去除之后出现的单词,按输入的顺序输出。

评测用例规模与约定: 对于所有评测用例,1 <= n <= 100,每个单词的长度不超过 100。

s = input()

s_ = s[::-1]

def check(s):#判断是否为回文

return s == s[::-1]

if check(s): print(s)

else:

for i in range(1, len(s)):

if check(s[i:]):

print(s+s_[-i:])

break

一个m行n列的方格图。开始时,在方格图的左上角,即第1行第1列。可以在方格图上跳跃,跳跃时,如果当前在第r行第c列,不能跳到行号比 r小的行,也不能跳到列号比c小的列。同时,一跳的直线距离不超过 3(不能斜走)。最终要跳到第m行第n列。图中每个格子有权值。从第1行第1列跳到第m行第n列后,总的权值和最大是多少?

m, n = map(int, input().split())

lst = [[map(int, input().split())] for _ in range(m)]

direct = [(0,1),(0,2),(0,3),

(1,0),(1,1),(1,2),

(2,0),(2,1),(3,0)]

for x in range(m):

for y in range(n):

res = []

for dx, dy in direct:

lx = x - dx

ly = y - dy

if (lx >= 0 and ly >= 0 and lx < n and ly < m)

res.append(dp[lx][ly])

dp[x][y] += max(res) if len(res)!=0 else 0

print(dp[-1][-1])

cig电子竞技大赛 电子竞技国际比赛
准确把握法律规定 依法惩治性侵未成年人犯罪