算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分
A = {"延安", "井冈山", "西柏坡", "瑞金"}
B = {"延安", "瑞金", "遵义", "古田"}import random
heroes = ["雷锋", "董存瑞", "黄继光", "邱少云", "刘胡兰"]
chosen = random.choice(heroes)
print(chosen)[[0] * 4 for i in range(3)]创建3行4列;A选项虽然也可以创建3×4但存在浅拷贝问题,各行引用相同列表scores = ["张三:85", "李四:92", "王五:78"],需要按分数降序排列。以下关于 sort() 方法 key 参数的说法,正确的是?题目描述:
学校开展"红色英雄故事分享"活动,需要在课堂上随机点名同学来分享。请你编写程序:首先输入n位同学的姓名,然后程序随机抽取一位同学,输出被抽中的同学姓名。确保每次抽取是随机的(使用random模块)。
输入格式:
第一行一个正整数 n(1 ≤ n ≤ 50)。
接下来 n 行,每行一个学生姓名。
输出格式:
一行,格式为"请【姓名】同学分享英雄故事!"
示例输入:
示例输出:
import random
n = int(input())
students = []
for i in range(n):
name = input()
students.append(name)
chosen = random.choice(students)
print("请" + chosen + "同学分享英雄故事!")
题目描述:
红军情报站需要检测情报密码的强度。强度评分规则如下(满分5分):
1. 长度 ≥ 8:+1分
2. 包含大写字母:+1分
3. 包含小写字母:+1分
4. 包含数字:+1分
5. 包含特殊字符(!@#$%^&*等):+1分
请你编写程序,输入密码字符串,输出其强度评分(0~5分)。
输入格式:
一行字符串,表示密码。
输出格式:
一行,格式为"密码强度:X分(满分5分)"
示例输入1:
RedArmy1936!
示例输出1:
密码强度:5分(满分5分)
示例输入2:
abc123
示例输出2:
密码强度:3分(满分5分)
示例输入:
示例输出:
password = input()
score = 0
# 规则1:长度 >= 8
if len(password) >= 8:
score += 1
has_upper = False
has_lower = False
has_digit = False
has_special = False
for ch in password:
if ch.isupper():
has_upper = True
elif ch.islower():
has_lower = True
elif ch.isdigit():
has_digit = True
else:
has_special = True
# 规则2-5
if has_upper:
score += 1
if has_lower:
score += 1
if has_digit:
score += 1
if has_special:
score += 1
print("密码强度:" + str(score) + "分(满分5分)")
题目描述:
几个革命根据地之间建立了简单的通信网络。网络用一个n×n的矩阵表示,network[i][j] = 1 表示根据地i和根据地j之间有直接的通信线路,network[i][j] = 0 表示没有。network[i][i]始终为1(自己到自己的线路)。请你编写程序:
1. 输入通信矩阵
2. 统计总共有多少条直接通信线路(i到j和j到i算同一条,即只统计network[i][j]=1且i < j的情况)
3. 找出通信线路最多的根据地(即该行中1最多的根据地,不包括自己到自己)
输入格式:
第一行一个正整数 n(2 ≤ n ≤ 20),表示根据地数量。
接下来 n 行,每行 n 个整数(0或1),用空格分隔,表示通信矩阵。
输出格式:
第一行输出"直接通信线路数:X条"
第二行输出"通信最多的根据地:根据地Y,共Z条线路"(根据地编号从1开始,如果并列最多则输出编号最小的)
示例输入:
示例输出:
n = int(input())
# 输入通信矩阵
network = []
for i in range(n):
row = list(map(int, input().split()))
network.append(row)
# 统计直接通信线路数(i < j)
link_count = 0
for i in range(n):
for j in range(i + 1, n):
if network[i][j] == 1:
link_count += 1
# 统计每个根据地的通信线路数(不包括自己)
max_links = 0
max_base = 1
for i in range(n):
links = 0
for j in range(n):
if i != j and network[i][j] == 1:
links += 1
if links > max_links:
max_links = links
max_base = i + 1 # 编号从1开始
print("直接通信线路数:" + str(link_count) + "条")
print("通信最多的根据地:根据地" + str(max_base) + ",共" + str(max_links) + "条线路")
题目描述:
有一篇红色主题文章的文本,需要统计其中每个词出现的频率。请你编写程序,输入一段文本(由空格分隔的单词组成,只包含英文字母,大小写不敏感),统计每个单词出现的次数,并按照出现次数从高到低输出词频排名。如果次数相同,按单词的字典序升序排列。
输入格式:
一行字符串,由英文字母和空格组成(单词之间可能用多个空格分隔)。
输出格式:
每行输出一个单词及其出现次数,格式为"单词:X次",按次数降序排列,次数相同按单词字典序升序。
示例输入:
示例输出:
text = input().strip()
# 将所有单词转为小写并按空格分割
words = text.split()
# 统计词频
word_count = {}
for word in words:
word_lower = word.lower()
if word_lower in word_count:
word_count[word_lower] += 1
else:
word_count[word_lower] = 1
# 将字典转为列表并排序
items = []
for word in word_count:
items.append((word, word_count[word]))
# 排序:按次数降序,次数相同按单词升序
for i in range(len(items)):
for j in range(i + 1, len(items)):
if items[i][1] < items[j][1] or (items[i][1] == items[j][1] and items[i][0] > items[j][0]):
items[i], items[j] = items[j], items[i]
# 输出结果
for word, count in items:
print(word + ":" + str(count) + "次")