常用功能代码记录

人民币大写转阿拉伯数字

'''
人民币大写转阿拉伯数字
'''

CNY_TABLE = {u'零': 0, u'壹': 1, u'贰': 2, u'叁': 3, u'肆': 4, u'伍': 5, u'陆': 6, u'柒': 7, u'捌': 8, u'玖': 9}
CNY_UNIT = {u'拾': 10, u'佰': 100, u'仟': 1000, u'角': 0.1, u'分': 0.01}
CARDINAL_NUMBER = {u'万': 10000, u'亿': 100000000}


def transform(cny_str):
    price = 0.0
    temp = 0
    num = 0
    for i in cny_str:
        if i == u'零':
            continue
        if i in CNY_TABLE:
            num = CNY_TABLE[i]
        elif i in CNY_UNIT:
            temp += num * CNY_UNIT[i]
            num = 0
        elif i == u'万':
            temp += num
            price += temp * 10000
            temp = 0
            num = 0
        elif i == u'亿':
            temp += num
            price += temp
            price *= 100000000
            temp = 0
            num = 0
        elif i in {u'元', u'圆'}:
            temp += num
            price += temp
            temp = 0
            num = 0
    price += temp
    return price


if __name__ == '__main__':
    cny_str = '人民币玖仟捌佰捌拾柒圆伍角柒分'
    price = transform(cny_str)
    print(price)  # 输出结果:9887.57

阿拉伯数字转成大写人民币

# coding: utf-8
def _rmb_upper(value):
    """
    人民币大写,将阿拉伯数字转成大写
    来自:http://topic.csdn.net/u/20091129/20/b778a93d-9f8f-4829-9297-d05b08a23f80.html
    传入浮点类型的值返回 unicode 字符串
    """
    map = [u"零", u"壹", u"贰", u"叁", u"肆", u"伍", u"陆", u"柒", u"捌", u"玖"]
    unit = [u"分", u"角", u"元", u"拾", u"百", u"千", u"万", u"拾", u"百", u"千", u"亿",
            u"拾", u"百", u"千", u"万", u"拾", u"百", u"千", u"兆"]

    nums = []  # 取出每一位数字,整数用字符方式转换避大数出现误差
    for i in range(len(unit) - 3, -3, -1):
        if value >= 10 ** i or i < 1:
            nums.append(int(round(value / (10 ** i), 2)) % 10)

    words = []
    zflag = 0  # 标记连续0次数,以删除万字,或适时插入零字
    start = len(nums) - 3
    for i in range(start, -3, -1):  # 使i对应实际位数,负数为角分
        if 0 != nums[start - i] or len(words) == 0:
            if zflag:
                words.append(map[0])
                zflag = 0
            words.append(map[nums[start - i]])
            words.append(unit[i + 2])
        elif 0 == i or (0 == i % 4 and zflag < 3):  # 控制‘万/元’
            words.append(unit[i + 2])
            zflag = 0
        else:
            zflag += 1

    if words[-1] != unit[0]:  # 结尾非‘分’补整字
        words.append(u"整")
    return ''.join(words)


result = _rmb_upper(9887.57)
print(result)  # 输出结果:玖千捌百捌拾柒元伍角柒分

判断8位数字字符串是否为合法的日期格式

# coding: utf-8
import datetime


def legal_date(strings):
    '''
    判断数字字符串是否为合法的日期格式,例如:20161211
    :param strings: 数字字符串
    :return:
    '''
    string = strings + '0'  # 添加1个字符串,防止找不出两个合法日期
    cut_str = []
    for i in range(len(string)):  # 分解成8位数
        substr = string[i:i + 8]
        cut_str.append(substr)
        if i + 8 == len(string):
            break
    # print('分解成:', cut_str)
    date_str = []
    for i_str in cut_str:
        y = i_str[:4]
        m = i_str[4:6]
        d = i_str[6:]
        string0 = y + ' ' + m + ' ' + d
        date_str.append(string0)
    legal = []
    for date_ in date_str:
        try:
            year, month, day = date_.split()
            r = datetime.date(int(year), int(month), int(day))
            rs = str(r.year) + str(r.month) + str(r.day)  # str
            legal.append(rs)
        except Exception:
            pass
    legal2 = []
    for le in legal:
        if len(le) == 8:
            legal2.append(le)
    return legal2


result = legal_date('20201229')
print(result)  # 输出合法日期:['20201229']
result1 = legal_date('20201232')
print(result1)  # 不合法,输出[],因为12月没有32日

阿拉伯数字转成中文数字(10以内,非人民币)

# coding: utf-8
def num_to_char(num):
    """阿拉伯数字转成中文数字"""
    num=str(num)
    new_str=""
    num_dict={"0":u"零","1":u"一","2":u"二","3":u"三","4":u"四","5":u"五","6":u"六","7":u"七","8":u"八","9":u"九"}
    listnum=list(num)
    # print(listnum)
    shu=[]
    for i in listnum:
        # print(num_dict[i])
        shu.append(num_dict[i])
    new_str="".join(shu)
    # print(new_str)
    return new_str


print(num_to_char(12))  # 输出:一二

求最大、最小日期:[‘20181229’, ‘20211229’, ‘32101123’]

# coding: utf-8


def min_max_date(date_legal):
    '''
    求最大、最小日期
    :param date_legal:
    :return:
    '''
    move = []
    for i, value in enumerate(date_legal):  # 循环更新date_legal
        max_value = max(int(i) for i in date_legal)
        min_value = min(int(i) for i in date_legal)

        m = str(max_value)
        n = str(min_value)
        if int(m[:4]) - int(n[:4]) < 100:  # 一般没人会把钱存一百年,所以日期年份不会相差大于100
            move.append([min_value, max_value])
        else:
            date_legal.remove(str(max_value))
    # print("move",move)
    return move


date_list = ['20181229', '20211229', '32101123']
result = min_max_date(date_list)
print(result)  # 输出结果:[[20181229, 20211229]]

纠正字符,变成正确的想要的字符,例如把’E’变成原本的’三’

# coding: utf-8

def to_correct(cun):
    '''
    纠正数字,例如把'E'变成原本的''
    :param cun:
    :return:
    '''
    cun_list = list(''.join(cun))
    # print(cun_list)
    error = {'E': '三', 'Z': '二'}
    for i in range(len(cun_list)):
        for key, value in zip(error.keys(), error.values()):
            # print(key, value)
            if cun_list[i] == key:
                # print(value)
                cun_list[i] = value

    cun_text = ''.join(cun_list)
    return cun_text

print(to_correct('E年'))  # 三年

人民币换成标准格式(12,555,000)

# coding: utf-8
money = 12555000
str1 = format(int(money), ",")  # 换成标准格式
print(str1)  # 12,555,000

判断各种字符所属类型(汉字、数字、字母、小写大写字母等)

string = '25人民uA二'
for s in string:
    if u'\u4e00' <= s <= u'\u9fff':
        print('中文:', s)  # 输出:人 民
        if s.isnumeric():
            print('中文数字:', s)
    elif s.isdigit():
        print('数字:', s)
    elif s.isalpha():
        print('字母(包含大小写):', s)
        if s.isupper():
            print('大写字母:', s)
        elif s.islower():
            print('小写字母:', s)
   # 输出:
  # 数字: 2
  # 数字: 5
#中文: 人
# 中文: 民
# 字母(包含大小写): u
# 小写字母: u
# 字母(包含大小写): A
# 大写字母: A
# 中文: 二
# 中文数字: 二
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值