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

网页制作素材印象数码怎么弄出来郴州百度seo

网页制作素材印象数码怎么弄出来,郴州百度seo,手机开发游戏,邵阳网站建设优化概述 今天突发奇想, 写一个将数字转换成中文字符串的函数. 并不是将 1234 转成 1234 , 而是将 1234 转成 一千二百三十四. 本来以为很简单, 写下来之后发现还是有些坑的. 尝试 因为我是在写完最终版本, 回过头来整理的这篇文章, 所以中间很多尝试的步骤会有所遗漏. 以下简单…概述 今天突发奇想, 写一个将数字转换成中文字符串的函数. 并不是将 1234 转成 1234 , 而是将 1234 转成 一千二百三十四. 本来以为很简单, 写下来之后发现还是有些坑的. 尝试 因为我是在写完最终版本, 回过头来整理的这篇文章, 所以中间很多尝试的步骤会有所遗漏. 以下简单整理一下. 如果不想看, 可以直接拉到最后, 看最终的成品. 第一次尝试 在写之前, 首先要寻找中文说话的规律嘛. 数字的念法: 零一二三四五六七八九每一位都有一个对应的权重: 个十百千万 所以我的初步想法是, 将数字的每一位都转成中文然后拼上对应的权重, so easy. 以下为 Python 实现: # 数字中文 DIGIT_STR_LIST [, 一, 二, 三, 四, 五, 六, 七, 八, 九] # 权重中文 WIGHT_STR_LIST [, 十, 百, 千, 万, 十万, 百万, 千万, 亿]def num_to_str(num):# 保存每一位的内容result_list []# 遍历数字的每一位, 将数组转列表并倒序遍历for wight, digit in enumerate(reversed(list(str(num)))):digit int(digit)digit_str DIGIT_STR_LIST[digit] if digit len(DIGIT_STR_LIST) else wight_str WIGHT_STR_LIST[wight] if wight len(WIGHT_STR_LIST) else # 结果拼接result_list.append(digit_str wight_str)# 将结果倒序拼接result_list.reverse()return .join(result_list)OK, 写的很流畅, 也很简单, 尝试一下. 传参: 1234 , 输出: 一千二百三十四 . 很完美.五位数试一下: 54321. 输出: 五万四千三百二十一. nice六位数试一下: 654321 . 输出: 六十万五万四千三百二十一. ??? 有问题. 这里问题很明显了, 我将权重直接拼到了每一位的后边, 而十万直接拼上去明显有问题. 正解应该是六十五万四千三百二十一. 到这里, 毫无疑问, 一开始思路就错了, 需要重新改变一下思路了. 第二次尝试 对于654321这个数字. 十万位6没有将十万直接拼到后边, 而是和万位5连起来, 一起组成了六十五万. 再多一个数字呢? 7654321, 就应该是七百六十五万. 我貌似发现规律了, 把数字切分为四个一组就可以了. 再看一下位数多一点的数字: 1-2345-6789. 中文是: 一亿-二千三百四十五万-六千七百八十九 嗯, 和我预想得一毛一样. 大概懂了, 着手改进一下: # 数字中文 DIGIT_STR_LIST [, 一, 二, 三, 四, 五, 六, 七, 八, 九] # 权重中文 WIGHT_STR_LIST [, 十, 百, 千] # 分组后对应的中文 GROUP_STR_LIST [, 万, 亿, 兆]def thousand_list_num_to_str(num_list: list) - str:将4位数字转成字符串:param num_list: 数字列表, 长度不超过4. 索引和数字对应为: 个十百千:return:# 保存每一位的内容result_list []# 遍历数字的每一位, 将数组转列表并倒序遍历for wight, digit in enumerate(num_list):digit int(digit)digit_str DIGIT_STR_LIST[digit] if digit len(DIGIT_STR_LIST) else wight_str WIGHT_STR_LIST[wight] if wight len(WIGHT_STR_LIST) else # 结果拼接result_list.append(digit_str wight_str)# 将结果倒序拼接result_list.reverse()return .join(result_list)def num_to_str(num : int) - str:将数组装成中文:param num::return:# 将数字切割为每四个一组, 分别进行处理num_list list(str(num))# 这里为了处理长度不是4整数倍的情况, 提前反转.num_list.reverse()group_num_list [num_list[i:i4] for i in range(0, len(num_list), 4)]result_list []# 遍历每一组, 并产生对应中文输出for group, num_list in enumerate(group_num_list):this_num_str thousand_list_num_to_str(num_list)group_str GROUP_STR_LIST[group] if group len(GROUP_STR_LIST) else result_list.append(this_num_str group_str)result_list.reverse()return .join(result_list)OK! 现在已经可以应对刚才的情况了. 试一下: 654321 - 六十五万四千三百二十一321 - 三百二十一120 - 一百二十10101010 - 一千百一十万一千百一十 纳尼???1000 - 一千百一十 纳尼??? 很明显, 问题出在thousand_list_num_to_str 这个函数. 四位数的时候, 0应该是要跳过的. 第三次尝试 我们对thousand_list_num_to_str函数进行简单的改进, 遇到零的时候直接跳过, 不进行处理. 改进后如下(只展示了部分改动的地方): DIGIT_STR_LIST [零, 一, 二, 三, 四, 五, 六, 七, 八, 九]def thousand_list_num_to_str(num_list: list) - str:将4位数字转成字符串:param num_list: 数字列表, 长度不超过4. 索引和数字对应为: 个十百千:return:# 保存每一位的内容result_list []# 遍历数字的每一位, 将数组转列表并倒序遍历for wight, digit in enumerate(num_list):digit int(digit)# 0无输出if digit is 0:continuedigit_str DIGIT_STR_LIST[digit] if digit len(DIGIT_STR_LIST) else wight_str WIGHT_STR_LIST[wight] if wight len(WIGHT_STR_LIST) else # 结果拼接result_list.append(digit_str wight_str)# 将结果倒序拼接result_list.reverse()return .join(result_list) OK, 再次尝试. 10101010 - 一千一十万一千一十 nice!100 - 一百 nice!1210 - 一千二百一十1201 - 一千二百一 纳尼?? 这里按照思维, 应该是输出一千二百零一才对. 继续对thousand_list_num_to_str函数进行加工. 第四次尝试 这里thousand_list_num_to_str函数要将零输出, 但是要考虑连续为零的情况(前边的100). 改动后代码如下: def thousand_list_num_to_str(num_list: list) - str:将4位数字转成字符串:param num_list: 数字列表, 长度不超过4. 索引和数字对应为: 个十百千:return:# 保存每一位的内容result_list []# 遍历数字的每一位, 将数组转列表并倒序遍历for wight, digit in enumerate(num_list):digit int(digit)if digit is 0:# 个位的0无输出if wight is 0:continue# 连续0无输出elif int(num_list[wight-1]) is 0:continue# 直接拼零result_list.append(ZERO_STR)continuedigit_str DIGIT_STR_LIST[digit] if digit len(DIGIT_STR_LIST) else wight_str WIGHT_STR_LIST[wight] if wight len(WIGHT_STR_LIST) else #if digit is 0:wight_str # 结果拼接result_list.append(digit_str wight_str)# 将结果倒序拼接result_list.reverse()return .join(result_list)OK. 尝试一下: 100 - 一百1201 - 一千二百零一 nice101 - 一百零一1000 - 一千100000000 - 一亿万 什么鬼? 后边怎么多了一个万? 第五次尝试 有了处理0的经验, so easy, num_to_str这个函数呀加上一个对0的处理就好了. 代码如下(只展示了num_to_str函数): def num_to_str(num : int) - str:将数组装成中文:param num::return:# 将数字切割为每四个一组, 分别进行处理num_list list(str(num))# 这里为了处理长度不是4整数倍情况, 提前反转.num_list.reverse()group_num_list [num_list[i:i4] for i in range(0, len(num_list), 4)]result_list []# 遍历每一组, 并产生对应中文输出for group, num_list in enumerate(group_num_list):# 若是0, 跳过if int(.join(num_list)) is 0:continuethis_num_str thousand_list_num_to_str(num_list)group_str GROUP_STR_LIST[group] if group len(GROUP_STR_LIST) else result_list.append(this_num_str group_str)result_list.reverse()return .join(result_list)再次进行尝试: 100000000 - 一亿 nice!!0 - ??? 我的零呢? 第六次尝试 这个判断就粗暴了, 直接在num_to_str的入口处强制判一下0, 改动内容: ZERO_STR 零 def num_to_str(num : int) - str:if num is 0:return ZERO_STR...再来: 0 - 零… 经过我的一番测试, 基本完成. 总结 开始有这个想法的时候, 我想着会很简单, 随便写写咯. 但是当真正开始动手后, 才发现, 事情完全偏离了我的预期. 在写的过程中, 初版只是个很简单的版本, 但是在自己尝试的过程中总是发现各种各样的问题, 甚至有的时候解决了这个问题, 回头一测, 发现原来已经改好的问题有出现了, 唉, 果然还是功力太浅啊. too young, too simple, sometimes naive. 我最终还算是磕磕绊绊的写完了, 不过冥冥之中还是感觉有一些情况没有考虑到, 无妨, 反正这不过是个一路填坑的过程, 再碰到问题, 改就完了. 至此, 代码初步完成, 将完整代码奉上: # 数字中文 DIGIT_STR_LIST [, 一, 二, 三, 四, 五, 六, 七, 八, 九] # 权重中文 WIGHT_STR_LIST [, 十, 百, 千] # 分组后对应的中文 GROUP_STR_LIST [, 万, 亿, 兆] # 零 ZERO_STR 零def thousand_list_num_to_str(num_list: list) - str:将4位数字转成字符串:param num_list: 数字列表, 长度不超过4. 索引和数字对应为: 个十百千:return:# 保存每一位的内容result_list []# 遍历数字的每一位, 将数组转列表并倒序遍历for wight, digit in enumerate(num_list):digit int(digit)if digit is 0:# 个位的0无输出if wight is 0:continue# 连续0无输出elif int(num_list[wight-1]) is 0:continue# 直接拼零result_list.append(ZERO_STR)continuedigit_str DIGIT_STR_LIST[digit] if digit len(DIGIT_STR_LIST) else wight_str WIGHT_STR_LIST[wight] if wight len(WIGHT_STR_LIST) else #if digit is 0:wight_str # 结果拼接result_list.append(digit_str wight_str)# 将结果倒序拼接result_list.reverse()return .join(result_list)def num_to_str(num : int) - str:将数组装成中文:param num::return:if num is 0:return ZERO_STR# 将数字切割为每四个一组, 分别进行处理num_list list(str(num))# 这里为了处理长度不是4整数倍情况, 提前反转.num_list.reverse()group_num_list [num_list[i:i4] for i in range(0, len(num_list), 4)]result_list []# 遍历每一组, 并产生对应中文输出for group, num_list in enumerate(group_num_list):# 若是0, 跳过if int(.join(num_list)) is 0:continuethis_num_str thousand_list_num_to_str(num_list)group_str GROUP_STR_LIST[group] if group len(GROUP_STR_LIST) else result_list.append(this_num_str group_str)result_list.reverse()return .join(result_list)
http://www.zqtcl.cn/news/320417/

相关文章:

  • asp国外网站什么页游好玩
  • 高端简约30平米办公室装修广州搜索seo网站优化
  • 海口的网站建设公司wordpress二次元极简主题
  • 南京快速建站公司国家网站域名
  • 兰州装修公司哪家好网站seo推广员招聘
  • 郑州网站推广 汉狮网络易企秀类似的软件
  • 做外单网站成都网页制作公司排名
  • 成都优化网站关键词搜索引擎有哪些平台
  • 福建百川建设有限公司网站郑州手机软件开发公司
  • 盐城企业做网站多少钱88建网站
  • 南京网站制作报价wordpress主题 yusi
  • 北京建网站已备案网站新增接入
  • 做搬家服务网站问卷调查的目的房产网签是什么意思
  • 江苏品牌网站设计美团后台管理系统登录
  • 没有备案的网站会怎么样深圳的互联网公司排名
  • 阿里云 建设网站北京百度竞价托管公司
  • 怎么样做长久的电影网站安卓手机应用市场
  • 网站建设账户搭建济南网络优化哪家专业
  • 宜兴城乡建设局网站wordpress调用logo
  • 让他人建设网站需要提供的材料女生读电子商务好就业吗
  • 北大荒建设集团网站国内开源代码网站
  • 高端企业网站要多少钱中企动力z云邮箱登录
  • 网站建设视频教程百度云那种自行提取卡密的网站怎么做
  • 网站外链建设与维护网站建设客户调研表
  • 海南省建设银行官方网站招聘营销的主要目的有哪些
  • flask 简易网站开发网站建设和空间
  • 怀化建设网站wordpress静态化插件
  • 网站上的中英文切换是怎么做的大连网站制作优选ls15227
  • 网站开发工作安排广告设计公司有哪些
  • 无人机公司网站建设用什么软件做网站最简单