博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python程序设计之组合数据类型
阅读量:3965 次
发布时间:2019-05-24

本文共 5138 字,大约阅读时间需要 17 分钟。

1.利用列表实现石头剪刀布游戏。

import random#定义手势类型allList = ['石头','剪刀','布']#定义获胜的情况winList=[['石头','剪刀'],['剪刀','布'],['布','石头']]#用户输入chnum=-1prompt='''===欢迎参加石头剪刀布游戏===请选择:0 石头1 剪刀2 布3 我不想玩了=============================请选择对应的数字: '''while True:    chnum = input(prompt)    if chnum not in ['0','1','2','3']:        print("无效的选择,请选择 0/1/2/3")        continue    if chnum == '3':        break    cchoice = random.choice(allList)    uchoice = allList[int(chnum)]    print("您选择了:{}\n计算机选择了:{}".format(uchoice,cchoice))    if uchoice == cchoice:		#自己输入的和计算机随机的相同,就平局        print("平局")    elif [uchoice, cchoice] in winList: #自己输入的和计算机随机的在胜率表中,玩家就胜利        print("你赢了!!!")    else:				#以上情况都不满足,肯定就输了        print("你输了!!!")print("游戏结束!")

在这里插入图片描述

  1. 利用字典实现大侠个人信息查询程序。
people={
'乔峰':{
'绝技':'降龙十八掌', '门派':'丐帮' }, '张无忌':{
'绝技':'乾坤大挪移', '门派':'明教' }, '令狐冲':{
'绝技':'独孤九剑', '门派':'华山派' }}labels={
'绝技':'行走江湖的绝技', '门派':'所在的门派'}#初始化名字name = input('请输入大侠的名字:')#获取选项r = input('请选择大侠的绝技(q)或者门派(a):')#获取键if r=='q': y='绝技'if r=='a': y='门派'#查找if name in people: print("{}大侠{}是{}.".format(name,labels[y],people[name][y]))

程序执行效果如下:

在这里插入图片描述

请思考:如何修改程序,使用户只有在输入“exit”的时候才退出程序?

答:

people={
'乔峰':{
'绝技':'降龙十八掌', '门派':'丐帮' }, '张无忌':{
'绝技':'乾坤大挪移', '门派':'明教' }, '令狐冲':{
'绝技':'独孤九剑', '门派':'华山派' }}labels={
'绝技':'行走江湖的绝技', '门派':'所在的门派'}while True: # 初始化名字 name = input('请输入大侠的名字:') # 获取选项 r = input('请选择大侠的绝技(q)或者门派(a):') # 获取键 if r == 'q': y = '绝技' if r == 'a': y = '门派' # 查找 if name in people: print("{}大侠{}是{}.".format(name, labels[y], people[name][y])) # 判断是否要退出程序 choice = input('请问是否要退出程序?输入exit退出,其余任意键继续') if choice == 'exit': break

在这里插入图片描述

3.利用jieba库对李之仪的《卜算子》进行分词,按以下要求编写程序。

(1) 利用jieba库对李之仪的《卜算子》进行分词,并查看分词结果。

import jiebatxt='''卜算子【宋】李之仪我住长江头,君住长江尾。日日思君不见君,共饮长江水。此水几时休?此恨何时已?只愿君心似我心,定不负相思意。'''words = jieba.lcut(txt)print(words)

在这里插入图片描述

(2) 对每个单词计数,并保存到字典类型counts中。查看counts的内容。

import jiebatxt='''卜算子【宋】李之仪我住长江头,君住长江尾。日日思君不见君,共饮长江水。此水几时休?此恨何时已?只愿君心似我心,定不负相思意。'''words = jieba.lcut(txt)counts = {
}for word in words: if len(word) == 1: continue else: rword = word counts[rword] = counts.get(rword,0) + 1print(counts)

在这里插入图片描述

(3) 按照单词出现的次数从高到低排序。因为字典类型是无序的,无法排序,因此将counts转为列表类型。查看排序后的结果。

import jiebatxt='''卜算子【宋】李之仪我住长江头,君住长江尾。日日思君不见君,共饮长江水。此水几时休?此恨何时已?只愿君心似我心,定不负相思意。'''words = jieba.lcut(txt)counts = {
}for word in words: if len(word) == 1: continue else: rword = word counts[rword] = counts.get(rword,0) + 1items = list(counts.items())items.sort(key=lambda x:x[1], reverse=True)for item in items: print(item)

在这里插入图片描述

(4) 为了增强排序后结果的可读性,利用format调整输出的格式。

import jiebatxt='''卜算子【宋】李之仪我住长江头,君住长江尾。日日思君不见君,共饮长江水。此水几时休?此恨何时已?只愿君心似我心,定不负相思意。'''words = jieba.lcut(txt)counts = {
}for word in words: if len(word) == 1: continue else: rword = word counts[rword] = counts.get(rword,0) + 1items = list(counts.items())items.sort(key=lambda x:x[1], reverse=True)for item in items: word, count =item print ("{0:<10}{1:>5}".format(word,count))

在这里插入图片描述

4.《红楼梦》人物统计。

参考课本中《三国演义》人物出场统计的程序,编写程序统计《红楼梦》中前20位出场最多的人物。

# 红楼梦人物出场次数统计import jieba# 排除掉和人物姓名 / 别名 无关的词汇excludes = {
'什么', '一个', '我们', '你们', '如今', '说道', '知道', '起来', '这里', '姑娘', '出来', '众人', '那里', '自己', '他们', '一面', '只见', '怎么', '两个', '没有', '不是', '不知', '这个', '听见', '这样', '进来', '咱们', '告诉', '就是', '东西', '回来', '只是', '大家', '老爷', '只得', '丫头', '过来', '心里', '如此', '今日', '这些', '不敢', '出去', '所以', '不过', '的话', '不好', '一时', '不能', '银子', '几个', '答应', '二人', '还有', '只管', '这么', '说话', '一回', '那边', '这话', '外头', '打发', '自然', '今儿', '罢了', '屋里', '那些', '听说', '如何', '问道', '看见'}# 打开指定路径下txt文件txt = open("./红楼梦1.txt", "r", encoding='utf-8').read()words = jieba.lcut(txt)counts = {
}for word in words: if len(word) == 1: continue elif word == "贾宝玉" or word == "宝玉": rword = "贾宝玉" elif word == "王熙凤" or word == "凤姐" or word == "凤姐儿": rword = "王熙凤" elif word == "贾母" or word == "老太太": rword = "贾母" elif word == "王夫人" or word == "太太": rword = "王夫人" elif word == "薛姨妈" or word == "奶奶": rword = "薛姨妈" elif word == "贾琏" or word == "二爷": rword = "贾琏" elif word == "袭人" or word == "姐姐": rword = "袭人" elif word == "宝钗": rword = "薛宝钗" elif word == "黛玉" or word == "林妹妹": rword = "林黛玉" elif word == "湘云": rword = "史湘云" elif word == "小丫头": rword = "紫鹃" elif word == "妹妹": rword = "香菱" else: rword = word counts[rword] = counts.get(rword, 0) + 1for 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("{0:<10}{1:>5}".format(word, count))

参考答案: (贾宝玉,3908)、(王熙凤,1611)、(贾母,1429)、(林黛玉,1291)、(王夫人,1061)、(薛宝钗,929)、(袭人,745)、(贾琏,688)、(平儿,602)、(贾政,523)、(薛姨妈,455)、(探春,437)、(鸳鸯,423)、(史湘云,412)、(晴雯,336)、(贾珍,299)、(刘姥姥,288)、(紫鹃,288)、(邢夫人,287)、(香菱,264)

我的答案:(因为对红楼梦不熟悉,对人物别名不熟悉,所以应该有弄错的)

在这里插入图片描述

转载地址:http://sxyki.baihongyu.com/

你可能感兴趣的文章
图像处理技术在视频监视中的应用
查看>>
DM8168 HDVPSS中的显示输出
查看>>
光电系统中的视频处理技术
查看>>
NRZ NRZI及扰码等串行编码技术的基本概念
查看>>
ADV7604介绍(一)
查看>>
无人机光电系统图像处理模块
查看>>
VP6802高清视频处理模块
查看>>
VP6802S01高清视频输入模块
查看>>
VP6803高清视频处理模块
查看>>
CAN总线基础知识(一)
查看>>
CAN总线基础知识(二)
查看>>
DM8148的电源和地(二)
查看>>
基于陀螺进行运动检测的电子稳像方案
查看>>
数字视频基础(一)
查看>>
AM5728概述(1)
查看>>
AM5728概述(4)
查看>>
AM5728概述(6)
查看>>
RapidIO协议(1)
查看>>
RapidIO协议(2)
查看>>
DM8168 EMAC/MDIO模块(2)
查看>>