python基础 class6(基本统计值计算、文本词频统计)

 

# 不定长度输入
def getNum():
    nums = []
    iNumStr = input('输入数字:')
    while iNumStr != '':  # 空字符结束
        nums.append(eval(iNumStr))
        iNumStr = input('输入数字:')
    return nums


# 平均值
def mean(n):
    smean = 0.0
    for i in n:
        smean += i
    return smean / len(n)


# 计算样本标准差
def dev(n, mean_n):
    sdev = 0.0
    for i in n:
        sdev += pow(i - mean_n, 2)
    return pow(sdev / (len(n) - 1), 0.5)


# 计算中位数
def median(n):
    n=sorted(n)
    size = len(n)
    if size % 2 == 0:
        return (n[size // 2] + n[size // 2 - 1]) / 2
    else:
        return n[size // 2]


def main():
    n = getNum()
    m = mean(n)
    print("平均数:{:.2f}\t标准差:{:.2f}\t中位数:{:.2f}".format(m, dev(n, m), median(n)))

try:
    main()
except:
    print("输入错误")
# 文本词频统计

# 英文
# def getText():
#     txt = open('hamlet.txt', 'r').read()
#     txt = txt.lower()
#     for char in '!@#$%^&*()_+-={}[]|\\;:"\'<,>.?/`~':
#         txt = txt.replace(char, ' ')
#     return txt
#
#
# hamlettxt = getText()
# words = hamlettxt.split()
# counts = {}
# for word in words:
#     counts[word] = counts.get(word, 0) + 1
# items = list(counts.items())
# items.sort(key=lambda x: x[1], reverse=True)
# for i in range(10):
#     word, count = items[i]
#     # print(type(items[i]))
#     print('{:<10}{:>5}'.format(word, count))

# 中文
import jieba


def getText():
    txt = open('threekingdoms.txt', 'r', encoding='utf-8').read()
    return txt


excludes = {'将军', '却说', '荆州', '二人', '不可', '不能', '如此', '商议',
            '如何', '主公', '军士', '左右', '军马', '引兵', '次日', '大喜',
            '天下', '东吴', '于是', '今日', '不敢', '魏兵', '陛下', '一人',
            '都督', '人马', '不知', '汉中', '只见', '众将', '蜀兵', '上马',
            '大叫', '太守', '此人', '夫人', '先生', '后人', '背后', '城中',
            '一面', '何不', '大军', '忽报', '百姓', '何故', '然后', '先锋',
            '天子', '不如', '赶来', '原来', '令人', '江东', '下马', '喊声',
            '正是', '徐州', '忽然', '因此', '成都', '不见', '未知', '大败',
            '大事', '之后', '一军', '引军', '起兵', '军中', '接应', '进兵',
            '大惊', '可以', '以为', '大怒', '不得', '心中'}
words = jieba.lcut(getText())
counts = {}
for word in words:
    if len(word) == 1:
        continue
    elif word == '孔明' or word == '孔明曰':
        rword = '诸葛亮'
    elif word == '关公' or word == '云长':
        rword = '关羽'
    elif word == '丞相' or word == '孟德':
        rword = '曹操'
    elif word == '玄德' or word == '玄德曰' or word == '先主':
        rword = '刘备'
    elif word == '后主':
        rword = '刘禅'
    elif word == '吕奉先' or word == '奉先':
        rword = '吕布'
    elif word == '张翼德' or word == '翼德':
        rword = '张飞'
    else:
        rword = word
    counts[rword] = counts.get(rword, 0) + 1
for word in excludes:
    del counts[word]
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
for i in range(20):
    word, count = items[i]
    print('{:<8}{:>5}'.format(word, count))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值