python经典百题之统计字符数

2023-09-15 13:28:49

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

方法一:

str_input = input("请输入一行字符:")
count_letter, count_space, count_digits, count_other = 0, 0, 0, 0
for char in str_input:
    if char.isalpha():
        count_letter += 1
    elif char.isspace():
        count_space += 1
    elif char.isdigit():
        count_digits += 1
    else:
        count_other += 1
print("英文字母个数为:", count_letter)
print("空格个数为:", count_space)
print("数字个数为:", count_digits)
print("其他字符个数为:", count_other)

思路:使用for循环遍历字符串中的每一个字符,判断其属于英文字母、空格、数字还是其他字符,并记录相应个数。最后输出结果。

优点:简单易懂,代码量较少。

缺点:if-elif语句较多,代码可读性较差。

方法二:

str_input = input("请输入一行字符:")
count_letter = sum(1 for char in str_input if char.isalpha())
count_space = sum(1 for char in str_input if char.isspace())
count_digits = sum(1 for char in str_input if char.isdigit())
count_other = len(str_input) - count_letter - count_space - count_digits
print("英文字母个数为:", count_letter)
print("空格个数为:", count_space)
print("数字个数为:", count_digits)
print("其他字符个数为:", count_other)

思路:使用生成器表达式与sum函数,将判断字符属于哪一类的过程集成到一行代码中,实现代码简洁化。

优点:代码量较少,可读性较好。

缺点:生成器表达式嵌套在sum函数中,可读性稍弱一些。

方法三:

from collections import Counter

str_input = input("请输入一行字符:")
count_dict = Counter(str_input)
count_letter = count_dict.get("{}".format(chr(10))) - 1    # 减去回车符的个数
count_space = count_dict.get(" ")
count_digits = sum(1 for key in count_dict if key.isdigit())
count_other = len(str_input) - count_letter - count_space - count_digits
print("英文字母个数为:", count_letter)
print("空格个数为:", count_space)
print("数字个数为:", count_digits)
print("其他字符个数为:", count_other)

思路:使用Python标准库中的Counter计数器,将字符串中所有字符及其出现次数记录下来,然后通过字典的get方法获取英文字母、空格、数字及其他字符的数量。

优点:代码简洁,可读性较好。

缺点:需要导入collections库,如果不熟悉该库,理解起来可能较困难。

综上所述,三种方法都能实现统计英文字母、空格、数字和其他字符的个数,具体选择哪一种方法,主要取决于项目实际情况和个人喜好。

更多推荐

LVS+Keepalived群集

1、keepalived概述及其功能·故障自动切换failover·实现lvs群集中节点健康检查·节点服务器的高可用性keepalived软件就是通过vrrp协议来实现高可用功能Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。在一个LVS服务集群中通常有主服务

YOLOv5算法改进(20)— 引入 RepVGG 重参数化模块

前言:Hello大家好,我是小哥谈。RepVGG重参数化模块是一种用于深度卷积神经网络的模块化设计方法,旨在通过将卷积层和全连接层统一为卷积层来简化网络结构并提高计算效率。该方法通过重参数化,将常规的卷积层分解为一个轻量级的卷积层和一个恒等映射层,从而达到降低计算复杂度的目的。本节课就简单介绍一下如何在YOLOv5中引

最新ChatGPT网站源码+支持GPT4.0+支持Midjourney绘画+支持国内全AI模型

一、智能创作系统SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!SparkAi程序使用Nestjs和Vu

【uni-app】uni-app内置组件和扩展组件

内置组件和扩展组件的关系先引用uni-app官网原文:uni-app是有内置组件的。这和web开发不一样。web开发基本上不用基础组件,都是找一个三方ui库,全套组件都包含。那是因为html的基础组件默认样式不适配手机风格。但uni-app体系不是这样,内置组件就是为手机优化的。但内置组件只能满足基础需求,更多场景,需

想要精通算法和SQL的成长之路 - 最长回文子序列

想要精通算法和SQL的成长之路-最长回文子序列前言一.最长回文子序列前言想要精通算法和SQL的成长之路-系列导航一.最长回文子序列原题链接首先,我们看下动态规划方程的定义,我们用dp[i][j]来代表:字符串s在下标区间为[i,j]之间的最长回文子序列。那么请问,最终的返回结果,就是我们要求得字符串s的最长回文子序列,

Day66|图part5:130. 被围绕的区域、827.最大人工岛

130.被围绕的区域leetcode链接:题目链接这题看起来很复杂,其实跟之前找飞地和找边缘地区的是差不多的,主要分三步:使用dfs将边缘的岛都找出来,然后用A代替防止混淆;再用dfs找中间不与任何岛相连的飞地;最后把之前的A替换成O。最终代码:classSolution{public:voiddfs(vector<v

ChatGPT 或其它 AI,能用在文书创作上吗?

新的申请季已经正式开始,一些热门项目的ED截止日期也不再遥远,因此很多准留学生们都已经开始了关于文书的创作。而随着科技的不断发展,以ChatGPT为首的一众AI工具也作为一种辅助手段愈发融入了我们的生活。那么不免就会有一些同学在准备申请时“动起了歪脑筋”,如果选择用ChatGPT来帮自己写文书的话,岂不是又省事又省力还

6.2 Sunday搜索内存特征

Sunday算法是一种字符串搜索算法,由DanielM.Sunday于1990年开发,该算法用于在较长的字符串中查找子字符串的位置。算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较,从模式的最左侧位置开始。如果发现不匹配,则算法将模式向右滑动一定数量的位置。这个数字是由当前文本中当前模式位置的最右侧字符确定的

Vue模板语法【下】事件处理器,表单、自定义组件、通信组件

目录一、事件处理器1.1常用的事件修饰符1.2常用的按键修饰符二,vue中的表单三、自定义组件四,通信组件一、事件处理器1.1常用的事件修饰符Vue的事件修饰符是用来改变事件的默认行为或者添加额外的功能。以下是一些常用的事件修饰符及其作用:.stop:阻止事件冒泡,相当于调用event.stopPropagation(

IntelliJ IDEA使用——Debug操作

文章目录版本说明图标和快捷键查看变量计算表达式条件断点多线程调试版本说明当前的IntelliJIDEA的版本是2021.2.2(下载IntelliJIDEA)ps:不同版本一些图标和设置位置可能会存在差异,但应该大部分都差不多。图标和快捷键图标快捷键说明Ctrl+F8打断点,在需要的代码行进行断点测试Alt+F10定位

Vue|项目结构与执行过程介绍

一、项目文件1.1目录结构1.2结构介绍二、执行过程2.1main.js2.2App.vue2.3index.html三、生命周期3.1周期阶段3.2Vue实例的产生过程3.3钩子函数用途一、项目文件1.1目录结构1.2结构介绍文件结构文件介绍node_modules第三方包文件夹public放html文件的地方fav

热文推荐