当前位置: 首页 > news >正文

Python世界:输入输出之回文串判别实践

Python世界:输入输出之回文串判别实践

    • 背景任务
    • 实现思路
    • 坑点小结
    • 小结

背景任务


问题来自《简明Python教程》中的输入与输出一章,作业练习中提出实现:回文字符串判别。

要想检查文本是否属于回文需要。 例如, “Rise to vote, sir. "

本文在其io_input.py 示范代码基础上,实现改进。

实现思路


文件命名为:io_input_is_palindrome.py,改进功能:

  • 支持中英文输入
  • 支持强回文和非强回文模式切换
  • 非强回文模式指忽略标点符号与大小写

编码思路

  • 不动强回文模式基线实现,先复用底层强回文
  • 把非强回文要求的字符串转化下,去除冗余字符
    • 大小写统一
    • 去除冗余空格
    • 去除英文标点符号
    • 去除中文标点符号
  • 输入强回文子函数判别

核心实现逻辑:

def check_palindrome_not_strict(strs):print(strs)strs = strs.lower() # 全小写strs = strs.replace(' ', '') # 空格替换punc_en = string.punctuationstrs = rm_target_ch_in_source(strs, punc_en)punc_zh = punctuationstrs = rm_target_ch_in_source(strs, punc_zh)print(strs)check_palindrome_strict(strs)return

测试用例

  1. sir
  2. maam
  3. madam
  4. racecar
  5. Rise to vote, sir.
  6. 你好,好你
  7. 你,是,谁啊?

坑点小结


问题1:ModuleNotFoundError: No module named ‘zhon’ from zhon.hanzi import punctuation

原因:未安装zhon库

解决:pip install zhon

问题2:已安装成功,仍报找不到对应模块。

分析:

1、已确认zhon模块有在本地,但是是在aconda环境中
2、在vscode中python解释器选择aconda的python3.6无法使用

解决:跑到aconda的环境中,用spyder可以正常跑代码

小结


本文尝试实现了忽略其中的标点、 空格与大小写的回文字符串判别,可进一步优化点是,强回文判别底层实现可以用双指针,提高判别效率。

参考资料:

  1. python 去除所有的中文 英文标点符号
  2. python 字符串去空格

附完整示例代码:

# -*- coding: utf-8 -*-
"""
Created on 240904
功能:判断是否回文字符串
1、支持中英文
2、支持强回文和非强回文模式切换
"""import string                           # 引用英文标点符号
from zhon.hanzi import punctuation      # 引用中文标点符号def reverse(text):return text[::-1]def is_palindrome(text):return text == reverse(text)def print_palindrome_check_result(is_palindrome):if is_palindrome == True:print("Yes, it is a palindrome")else:print("No, it is not a palindrome")def check_palindrome_strict(strs):if is_palindrome(strs):print_palindrome_check_result(True)else:print_palindrome_check_result(False)def rm_target_ch_in_source(strs, target):for ch in target:strs = strs.replace(ch, '')return strsdef check_palindrome_not_strict(strs):print(strs)strs = strs.lower() # 全小写strs = strs.replace(' ', '') # 空格替换punc_en = string.punctuationstrs = rm_target_ch_in_source(strs, punc_en)punc_zh = punctuationstrs = rm_target_ch_in_source(strs, punc_zh)print(strs)check_palindrome_strict(strs)returndef check_palindrome_proc(is_strict_palindrome):input_str = input("Enter text: ")# input_str = "madam"# input_str = "sir"# input_str = "Rise to vote, sir."# input_str = "你好,好你"# input_str = "你好,Y好你??!!!"# input_str = "你,是,谁啊?"if is_strict_palindrome:check_palindrome_strict(input_str)else:check_palindrome_not_strict(input_str)if __name__ == '__main__':print('start!')# 正式运行# is_strict_palindrome = True # 支持强回文模式is_strict_palindrome = False # 不支持强回文模式,忽略标点符号及大小写check_palindrome_proc(is_strict_palindrome)# 正式退出main函数进程,以免main函数空跑print('done!')

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何使用python抓包,附代码
  • java中prepareStatement怎么用
  • SpringBoot2:学SpringBoot前的知识准备-用IDEA创建传统的webapp工程,并整合SpringMVC
  • qt配合halcon深度学习网络环境配置
  • SQLite Insert 语句
  • 反射: 获取变量类型
  • 【例003】利用MATLAB绘制有趣平面图形
  • 基于多种机器学习的房价预测研究【数据抓取、预处理、可视化、预测】
  • 【鸿蒙蓝牙连接】
  • 【网络安全】子域名接管概念+实例详析
  • vuex和Pinia
  • 一文读懂网络安全
  • 基于微信小程序的挂号管理系统-小程序端
  • ARM的寄存器组织
  • 代码审计总结
  • C语言笔记(第一章:C语言编程)
  • Django 博客开发教程 8 - 博客文章详情页
  • JavaScript设计模式与开发实践系列之策略模式
  • laravel 用artisan创建自己的模板
  • laravel5.5 视图共享数据
  • LintCode 31. partitionArray 数组划分
  • MySQL几个简单SQL的优化
  • React的组件模式
  • Redash本地开发环境搭建
  • 彻底搞懂浏览器Event-loop
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 力扣(LeetCode)21
  • 区块链将重新定义世界
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 网络应用优化——时延与带宽
  • 用quicker-worker.js轻松跑一个大数据遍历
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # Apache SeaTunnel 究竟是什么?
  • # Redis 入门到精通(一)数据类型(4)
  • #70结构体案例1(导师,学生,成绩)
  • $(selector).each()和$.each()的区别
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (4)STL算法之比较
  • (C语言)球球大作战
  • (javaweb)Http协议
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (pytorch进阶之路)扩散概率模型
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • .java 9 找不到符号_java找不到符号
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net 托管代码与非托管代码
  • .Net程序帮助文档制作
  • .NET性能优化(文摘)
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [BZOJ1053][HAOI2007]反素数ant
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [C++]二叉搜索树
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [DP 训练] Longest Run on a Snowboard, UVa 10285