PTA天梯赛PythonL2-2 含茶量

ChatGPT(全名:Chat Generative Pre-trained Transformer)近期成为网络讨论的热点话题之一。本题就请你根据某社交网络中发帖的情况,统计每个人帖子中含有 ChatGPT(不区分大小写)的数量(简称“含茶量”),找出最热衷于讨论这个话题的人,即含茶量排前三的人。

输入格式:

输入在第一行中给出正整数:N(≤104),为参加统计的帖子数量。
随后给出 N 条帖子的信息,每条格式为:第一行给出发帖人 ID,是一个长度不超过 10 位的非空数字串;第二行给出非空的帖子的内容,由不超过 140 个英文字母、数字、空格、标点(只包括 ?,.)组成,以回车结束(回车不算在 140 字内)。

输出格式:

分三行输出含茶量最高的前三个 ID,及其含茶量。有并列时按 ID 的字典序递增输出;如果有含茶量的 ID 不到三个,那么有几个就输出几个,但含茶量为 0 的不要输出。数字间以 1 个空格分隔,行首尾不得有多余空格。
题目保证至少有一个输出。

输入样例:

5
1010
I am not interested in ChatGPT.
233
I am gonna talk about chatgpt, and Chatgpt, and CHATGPT
233
they are all ChatGPT
2
I am gonna talk about chatgpt, and Chatgpt, and CHATGPT
0002
chatgp, hatGPT and Chatppt, are they all ChatGPTs?

输出样例:

233 4
2 3
0002 1

注意: 20002 是两个不同的 ID。

代码实现:

import re

N = int(input())  # 读取帖子数量
tea_count = {}  # 存储每个发帖人的“含茶量”

for _ in range(N):
    user_id = input().strip()  # 读取发帖人 ID
    post_content = input().strip()  # 读取帖子内容

    # 统计“ChatGPT”(不区分大小写)的出现次数
    count = len(re.findall(r'chatgpt', post_content, re.IGNORECASE))

    # 更新字典中的“含茶量”
    if user_id in tea_count:
        tea_count[user_id] += count
    else:
        tea_count[user_id] = count

# 按“含茶量”降序排序,如果含茶量相同,则按 ID 的字典序升序排序
sorted_users = sorted(tea_count.items(), key=lambda x: (-x[1], x[0]))

# 输出含茶量最高的前三个人的信息
for user_id, count in sorted_users[:3]:
    if count > 0:  # 只输出含茶量大于 0 的用户
        print(f"{user_id} {count}")

相关知识:

1.不区分大小写统计:

导入 Python 的 re 模块,用于处理正则表达式。

re.findall(r'chatgpt', post_content, re.IGNORECASE)
    • r'chatgpt' 是一个正则表达式,表示要匹配的字符串是“chatgpt”。

    • post_content 是要搜索的字符串。

    • re.IGNORECASE 是一个标志,表示在匹配时忽略大小写

    • re.findall 返回一个列表,包含所有匹配到的子串。

  • len(...) 计算列表的长度,即“ChatGPT”出现的次数。

2.对字典排序

sorted_users = sorted(tea_count.items(), key=lambda x: (-x[1], x[0]))
tea_count.items():用于获取键值对
key=lambda x: (-x[1], x[0])
  • lambda x:一个匿名函数,x 是每个键值对 (key, value)

  • -x[1]:表示按“含茶量”(x[1])的负值排序,即降序排列。

  • x[0]:表示按发帖人的 ID(x[0])的字典序排序,即升序排列。

  • 组合排序sorted 函数会先按第一个键(-x[1])排序,如果第一个键相同,则按第二个键(x[0])排序。

3.字典值的访问

通过键访问值:dict['Name']

通过for循环输出:

for user_id, count in sorted_users[:3]:
    if count > 0:  
        print(f"{user_id} {count}")

4.字典修改

dict['Age'] = 8 # 更新 Age

dict['School'] = "信息" # 添加信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值