SWUST 派森练习题:P116. 字符统计排序

描述

编写程序:从键盘中输入一段字符,完成以下统计并输出:

(1)该段字符中总共出现了多少种不同类型的字符;

(2)出现次数最多的前3个字符(只能为字母和数字,其它忽略)及次数?

样例

输入

ukvP^hhhhh0d~R+`],$Ls[5555555vV1<(,'Q[9}adWNdR<nZ:=Nt*SF/?-SEY

输出

总共出现了43种字符

5:7次

h:5次

d:3次

代码:

def count_char(text):# 统计字符出现次数char_count = {}for char in text:if char.isalnum():char_count[char] = char_count.get(char, 0) + 1# 统计不同类型字符数量num_of_types = len(char_count)# 找到出现次数最多的前3个字符most_common_chars = sorted(char_count.items(), key=lambda x: x[1], reverse=True)[:3]return num_of_types, most_common_chars
input_text = input("请输入一段字符:")
types, most_common = count_char(input_text)
print("不同类型的字符数量:", types)
print("出现次数最多的前3个字符及次数:")
for char, count in most_common:print(char, ":", count)

代码描述:

s = input()
  • 这行代码使用input函数从键盘获取用户输入的一段字符,并将其赋值给变量s
dict0 = {}
dict1 = {}
  • 这两行代码分别创建了两个空字典dict0dict1,用于记录字符出现的次数。
all_length = 0
  • 这行代码创建了一个变量all_length,初始化为0,用于记录总共出现的不同字符的数量。
for ch in s:
  • 这是一个for循环,遍历变量s中的每个字符,用变量ch表示当前字符。
 dict0[ch] = dict1.get(ch)
  • 这行代码将字典dict1中对应字符ch的值赋给字典dict0中的键ch,相当于将字典dict1复制给dict0
 all_length = len(dict0)
  • 这行代码更新变量all_length的值为字典dict0中的键值对的数量,即不同字符的数量。
 if ch.isalnum():
  • 这是一个if条件语句,判断字符ch是否为字母或数字,使用isalnum()方法进行判断。
 dict1[ch] = dict1.get(ch, 0) + 1
  • 如果字符ch是字母或数字,则将字典dict1中对应字符ch的值加1。
  • 如果字符ch在字典dict1中不存在,则使用dict1.get(ch, 0)获取字符ch对应的值(即出现次数),如果字符不存在于字典中,则返回默认值0。
length = len(dict1)
  • 这行代码计算字典dict1的长度,即出现过的不同字符的数量。
items = list(dict1.items())
items.sort(key=lambda x: x[1], reverse=True)
  • 这两行代码将字典dict1转换为列表,并对列表中的元素按照出现次数进行排序。
  • dict1.items()将字典中的键值对以元组的形式返回。
  • sort函数对列表中的元素进行排序,key=lambda x: x[1]指定按照元组的第二个元素(也就是出现次数)进行排序。
  • reverse=True表示降序排列。
top3 = items[:3]
  • 这行代码将排序后的列表items的前三个元素赋值给变量top3,即出现次数最多的前三个字符及其次数。
print(f"总共出现了{all_length}种字符")
  • 这行代码使用print函数打印出现的不同字符的数量。
for i in range(3):if i < len(top3):print(f"{top3[i][0]}:{top3[i][1]}次")
  • 这部分代码使用for循环遍历前三个字符及其次数的列表top3
  • 使用print函数打印每个字符和对应的次数,格式为字符:次数。注意,在循环中会判断变量i是否小于top3的长度,以防止越界访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/45639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件

文章目录 ⭐前言⭐react 组件传值实例&#x1f496;父组件传值给子组件&#xff08;props&#xff09;&#x1f496;子组件传递事件给父组件props绑定事件&#x1f496;父组件触发子组件的事件Ref ⭐vue3 组件传值实例&#x1f496; 父组件传递数据给子组件props&#x1f496; …

【论文阅读】SHADEWATCHER:使用系统审计记录的推荐引导网络威胁分析(SP-2022)

SHADEWATCHER: Recommendation-guided CyberThreat Analysis using System Audit Records S&P-2022 新加坡国立大学、中国科学技术大学 Zengy J, Wang X, Liu J, et al. Shadewatcher: Recommendation-guided cyber threat analysis using system audit records[C]//2022 I…

Hlang-中英双语言编程语言使用手册

文章目录 介绍Hlang基本使用下载配置环境变量特性中文关键字支持中文符号混合编程中文错误提示终端多行输入基本数据类型整数浮点数列表字符串基本操作变量定义逻辑判断基本运算条件判断循环函数介绍 Hlang是一款基于Python编写的支持中英文混合编程的动态语言。其简单易上手,…

学C的第三十四天【程序环境和预处理】

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十三天【C语言文件操作】_高高的胖子的博客-CSDN博客 1 . 程序的翻译环境和执行环境 在ANSI C(C语言标准)的任何一种实现中&#xff0c;存在两个不同的环境。 &#xff0…

for循环也能写错?

好开心好开心 可是明明也只是解决了一个不应该要犯错的地方 本来是要在一个大循环中&#xff0c;每一次循环中有30次的另一个循环&#xff0c;然而我写成了这个样子&#xff1a; consensus_iterations 30 for i in range(2):for consensus_iterations in range(consensus_it…

容器虚拟化基础之cgroups/LXC

"你真的&#xff0c;自由了~" 容器虚拟化基础之Cgroups: (1) 什么是cgroups cgroups是 linux 内核提供的一种机制&#xff0c; 这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内&#xff0c;从而为系统资源管理提供一个统一…

3D与沉浸式技术,如何助力企业数字化转型?

说起3D&#xff0c;估计许多读者朋友会在第一时间想起《阿凡达》系列和《侏罗纪公园》系列电影大作。每一帧细节纤毫毕现的逼真画面&#xff0c;让观众几乎分不清虚拟与现实&#xff0c;完全沉浸在导演打造的视觉盛宴中。 事实上&#xff0c;除了大家所熟知的3D影视动画之外&am…

查找算法及应用

查找算法及应用 常用查找算法包括顺序/线性查找、二分/折半查找、插值查找、斐波那契查找。 线性查找 逐一比对&#xff0c;发现有相同值返回即可。 二分查找 前提是数组有序。如果数据是连续的情况下可以使用插值查找。 插值查找 插值查找算法类似二分查找&#xff0c;不同的…

快速学习GO语言总结

备注&#xff1a;本博客将自己初步学习GO的总结进行分享&#xff0c;希望大家通过本博客可以在短时间内快速掌握GO的基本程序编码能力&#xff0c;如有错误请留言指正&#xff0c;谢谢&#xff01; 一、初步了解Go语言 &#xff08;一&#xff09;Go语言诞生的主要问题和目标…

8.3 【C语言】通过指针引用数组

8.3.1 数组元素的指针 所谓数组元素的指针就是数组元素的地址。 可以用一个指针变量指向一个数组元素。例如&#xff1a; int a[10]{1,3,5,7,9,11,13,15,17,19}&#xff1b; int *p; p&a[0]&#xff1b; 引用数组元素可以用下标法&#xff0c;也可以用指针法&#xf…

iOS17 widget Content margin

iOS17小组件有4个新的地方可以放置分别是&#xff1a;Mac桌面、iPad锁屏界面、 iPhone Standby模式、watch的smart stack Transition to content margins iOS17中苹果为widget新增了Content margin, 使widget的内容能够距离边缘有一定的间隙&#xff0c;确保内容显示完整。这…

【WinAPI详解】<CreateWindowEx详解>

函数原型: HWND CreateWindowEx(DWORD dwExStyle, //窗口的扩展风格&#xff08;加强版专有&#xff09;LPCTSTR lpClassName, //已经注册的窗口类名称LPCTSTR lpWindowName,//窗口标题栏的名字DWORD dwStyle, //窗口的基本风格int x, //窗口左上角水平坐标位置int …

学习设计模式之适配器模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 适配器模式 意图&#xff1a;将一个类的接口转换成客户希望的另一个接口 主要解决&#xff1a;把现有对象放到新环境里&#xff0c;而新…

通过C实现sqlite3操作,(增删改查),导入电子词典

一、插入 #include <stdio.h> #include <sqlite3.h> void do_insert(sqlite3 *db); int main(int argc, const char *argv[]) {//创建并打开一个数据库sqlite3 *db NULL;if(sqlite3_open("./mysql.db",&db) ! SQLITE_OK){fprintf(stderr,"sql…

AUTOSAR配置与实践(配置篇)5.1 BSW的通信功能进阶

传送门 -> AUTOSAR配置与实践总目录 AUTOSAR配置与实践(配置篇)5.1 BSW的通信功能进阶 一、模块和收发流程主要配置项介绍1.1 模块介绍1.2 通知方式相关主要配置项二、收发流程详解2.1 发送流程2.2 发送确认过程2.2.1 发送确认过程(读数据方式:轮询)2.2.2 发送确认过程…

IDEA 如何制作代码补丁?IDEA 生成 patch 和使用 patch

什么是升级补丁&#xff1f; 比如你本地修复的 bug&#xff0c;需要把增量文件发给客户&#xff0c;很多场景下大家都需要手工整理修改的文件&#xff0c;并整理好目录&#xff0c;这个很麻烦。那有没有简单的技巧呢&#xff1f;看看 IDEA 生成 patch 和使用 patch 的使用。 介…

Centos升级openssl

依赖包 安装编译 OpenSSL 所需的包&#xff0c;包括 gcc、make、perl 和 zlib-devel。可以通过运行以下命令完成&#xff1a; yum install -y gcc make perl zlib-devel安装包下载 下载 OpenSSL 1.1.1 的源码包&#xff0c;可以从 OpenSSL 官网下载&#xff08;https://www.op…

一、Kafka概述

目录 1.3 Kafka的基础架构 1.3 Kafka的基础架构 Producer&#xff1a;消息生产者&#xff0c;就是向 Kafka broker 发消息的客户端Consumer&#xff1a;消息消费者&#xff0c;向 Kafka broker 取消息的客户端。Consumer Group&#xff08;CG&#xff09;&#xff1a;消费者组&…

使用pytorch 的Transformer进行中英文翻译训练

下面是一个使用torch.nn.Transformer进行序列到序列&#xff08;Sequence-to-Sequence&#xff09;的机器翻译任务的示例代码&#xff0c;包括数据加载、模型搭建和训练过程。 import torch import torch.nn as nn from torch.nn import Transformer from torch.utils.data im…

PyTorch学习笔记(十六)——利用GPU训练

一、方式一 网络模型、损失函数、数据&#xff08;包括输入、标注&#xff09; 找到以上三种变量&#xff0c;调用它们的.cuda()&#xff0c;再返回即可 if torch.cuda.is_available():mynn mynn.cuda() if torch.cuda.is_available():loss_function loss_function.cuda(…