Rui. 发表于 2019-12-8 16:34

对于《疯狂python》书P86 数字转人民币代码<完善对于整数和小数的分离>

本帖最后由 Rui. 于 2019-12-9 09:39 编辑

本人一个在校大学生,自学python,本程序还有很多地方需要完善,需要改正的地方希望大家积极指出
<第一次发帖,望谅解>

希望能得到各位志同道合的朋友的更正,谢谢!
```python

def divide(num):
    """
    用split函数将浮点数以‘.’为界限拆分为
      整数部分(integer)
      小数部分(fraction)
    :param num:
    :return:
    """
    integer, fraction = str(num).split('.')
    result = integer_to_str(integer) + fractional_part(fraction)
    return result
```
以上是以前对于整数部分和小数部分处理的函数代码,在输入整数时会出现‘零’的现象

===============================================================

下面的新代码是我用正则表达式修改后的,修复了以上的现象

```python
import re
han_list = ['零','壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
unit_list = ['拾', '佰', '仟']

def divide(num):
    """
    用split函数将浮点数以‘.’为界限拆分为
      整数部分(integer)
      小数部分(fraction)
    :param num:
    :return:
    """
    num = str(num)
    # 通过正则表达式对整数部分进行提取
    integer = re.match('^\d*', num)
    # 通过调用正则的sub方法将整数部分和小数点替换成空字符(去除),留下小数部分
    fraction = re.sub('^\d*\.', '', num)
    if integer == '0' or fraction == '0':
      result = integer_to_str(integer.group())
      return result

    else:
      result = integer_to_str(integer.group()) + fractional_part(fraction)
      if 'error' not in result:
            return result
      else:
            return "数字位数超过12位!"

def four_to_hanstr(num_str):
    """
    将一个4位的数字字符串转换成汉字字符串
    num_str是需要被转换的4位数字字符串
    返回4位数字字符串被转换成汉汉字字符串
    :param num_str:
    :return: 将结果返回到integer_to_str()函数
    """
    result = ""
    # 对于只输出一个0做限制
    flag = 0
    num_len = len(num_str)

    # print("传入参数:",num_str)

    for i in range(num_len):
      num = int(num_str)
      # 如果每4个数字一组中的最后一个数字,且其不为0
      if i != num_len - 1 and num != 0:
            result += han_list + unit_list
      else:
            # 如果传入的四位数,四位数字都为0则不做任何输入
            if i == num_len - 4 and int(num_str)== 0 \
                  and int(num_str) == 0 \
                  and int(num_str) == 0 \
                  and num == 0:
                pass

            # 如果传入的四位数,后三位数字为0
            elif i == num_len - 3 and int(num_str) == 0 \
                  and int(num_str) == 0 \
                  and num == 0:
               break

            # 如果从左到右第2位和第3位为0只输入一个0
            elif i == num_len - 2 and int(num_str) == 0 \
                  and num == 0:
                break
            else:
                if num == 0:
                  if flag == 0:
                        result += han_list
                        flag += 1
                  else:
                        pass
                else:
                  result += han_list
    return result

def fractional_part(fraction_srt):
    """
    对小数部分进行处理
    :param fraction_srt:
    :return: 转化后的结果,前后加一个空格以便区分
    """
    result =""
    str_len = len(fraction_srt)
    for i in range(str_len):
      num = int(fraction_srt)
      result += str(han_list)

    return ' 点'+result

def integer_to_str(num_str):
    """
    对整数位数进行控制
    """
    str_len = len(num_str)
    if str_len > 12:
      error = "error"
      return error
    elif str_len > 8:
      # -8代表这个数字的第八位,第九位就是亿
      return four_to_hanstr(num_str[:-8]) + '亿' + \
               four_to_hanstr(num_str[-8:-4]) + '万' + \
               four_to_hanstr(num_str[-4:])

    elif str_len > 4:
      # -4代表这个数的第4位,第五位就是万
      return four_to_hanstr(num_str[:-4]) + '万' + \
               four_to_hanstr(num_str[-4:])

    else:
      return four_to_hanstr(num_str)

if __name__ == '__main__':
    num = float(input("请输入一个数:"))
    print("结果为:\n",divide(num))
```









============ 更改记录 ===========
2019年12月8日:发布代码
2019年12月9日0:33:完善对于整数和小数部分的处理

Rui. 发表于 2019-12-8 21:01

冥月影 发表于 2019-12-8 18:23
请问一下大佬,Python容易上手吗,有点java基础。

哥们,纠正一下,我不是大佬,我只是想分享一下,我也是学python没多久,
你学了Java来学python上手应该回简单,我是学了C然后学的python,毕竟你有一门语言的语法的基础学其他的语言会容易一点;加油,只要付出时间和努力,都可以的!

rosesword 发表于 2019-12-8 19:03

冥月影 发表于 2019-12-8 18:23
请问一下大佬,Python容易上手吗,有点java基础。

容不容易不好说。看跟什么比。
但根据我目前的文献查阅来看,Python目前以及未来,会是主流的编程语言。
如果要学,还是推荐学Python

diyikuai 发表于 2019-12-8 16:54

支持了入坑了易语言,不想换了

Rui. 发表于 2019-12-8 16:57

diyikuai 发表于 2019-12-8 16:54
支持了入坑了易语言,不想换了

我的易语言不怎么了解,似乎我知道易语言都是因为”游戏外G“

dhz0105 发表于 2019-12-8 17:47

有问题,51亿万零是什么鬼?

dhz0105 发表于 2019-12-8 17:48

diyikuai 发表于 2019-12-8 16:54
支持了入坑了易语言,不想换了

有学习易语言的时间精力,不如专心研究下C语言!

heavyd 发表于 2019-12-8 17:54

我想学Python,0中之0 开始

shaunkelly 发表于 2019-12-8 18:02

本帖最后由 shaunkelly 于 2019-12-8 18:08 编辑

我试运行一下看看



还有一点不完美哦,超过12位不计算,但是后面还有一个点零???是什么情况的?

hf2008paopao 发表于 2019-12-8 18:03

书的链接分享一个

社区主任 发表于 2019-12-8 18:15

为程序员点赞

冥月影 发表于 2019-12-8 18:23

请问一下大佬,Python容易上手吗,有点java基础。
页: [1] 2
查看完整版本: 对于《疯狂python》书P86 数字转人民币代码<完善对于整数和小数的分离>