本节作业:

熟练使用类和模块,写一个交互性强、有冲突的程序。

思路:

1、各个模块之间的调用关系,如何使用类,各种方法的使用上面;

2、学了类,以为能用来解决所有问题,东西都要写在类里面;

3、下面自己谢了一个简写版程序,有些地方还待完善,先梳理一下,自己在把里面所有东西完善完成;

本例写的是两个男人为了一个女人决斗,谁胜利抱得美人归,失败的人一边凉快去。

conf配置文件下面有两个文件:

    setting.py:

  1. import os,sys
  2. '''配置环境变量'''
  3. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  4. sys.path.append(BASE_DIR)
  5. Skills = ["rich","poor","handsome","ugly",'struggle',"car",'house',"height","short",'fat',"thin"]
  6. DATABASE = {'rich':,"poor":,"handsome":,"ugly":,"struggle":,"car":,"house":,'height':,
  7. 'short':,"fat":,"thin":}

setting里面是存放技能属性和技能对应的得分属性,有钱人得分66,贫穷得分:10分等等;根据属性判断得分,屌丝就失败,高富帅就抱得美人归。

    menu.py:

  1. '''程序主入口显示'''
  2. main_show = '''
  3. -------------------------------------------------------------------------------------------
  4. 欢迎光临抢美女决战平台 日期:{} 星期:{}
  5. -------------------------------------------------------------------------------------------
  6.  
  7. 【】故事介绍 【】PK决战 【】战绩榜 【q】退出
  8.  
  9. -------------------------------------------------------------------------------------------
  10. '''
  11.  
  12. skill_message = '''
  13. ----------------------------------------------------------------------------------------------
  14. 技能展示
  15. ----------------------------------------------------------------------------------------------
  16. 技能编号 技能名称 技能得分
  17. '''
  18.  
  19. battle_message = '''
  20. --------------------------------------------------------------------------------------------------
  21. \[;1m 今天:{} 星期:{}
  22. 姓名:{} 和 姓名:{} 为了 {} 在此决斗,获胜者将抱得美人归,生死由命成败在天,谁能抱
  23. 得美人归,各凭实力
  24. 特在此签生死状,如有生死,既往不咎!!! \[0m
  25. --------------------------------------------------------------------------------------------------
  26.  
  27. '''
  28.  
  29. battle_show = '''
  30. --------------------------------------------------------------------------------------------------
  31. 第{}回合: 日期:{} 星期:{}
  32.  
  33. 决战者1 姓名:{} 决战者2 姓名:{}
  34. VS
  35. 技能:{} 得分 {} 技能:{} 得分:{}
  36. --------------------------------------------------------------------------------------------------
  37. '''
  38.  
  39. match_show = '''
  40. --------------------------------------------------------------------------------------------------
  41.  
  42. 第{}回合--决战者1:{} 累计得分:{} 决战者2:{} 累计得分:{}
  43.  
  44. --------------------------------------------------------------------------------------------------
  45. '''
  46. victor_show = '''
  47. --------------------------------------------------------------------------------------------------
  48. 比赛结果: 日期:{} 星期:{}
  49.  
  50. 经过{}回合决斗,决战者--姓名:{} 最终得分:{} 战胜 姓名:{} 最终得分:{}
  51.  
  52. --------------------------------------------------------------------------------------------------
  53. '''

此模块配置各种输出框架,整理输出,以便看着舒服。

    modules模块--类,函数存放

    common.py:

  1. import sys,os,datetime
  2. base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  3. sys.path.append(base_dir)
  4. from conf import menu
  5. from conf import setting
  6.  
  7. def introduce(mess):
  8. '''
  9. 主页介绍,介绍系统有哪些功能,让人们尝试
  10. :param mess: 功能展示
  11. :return:
  12. '''
  13. print(mess)
  14.  
  15. def function_show(skills,skills_dict):
  16. '''
  17. 功能展示模块,进行人功能的展示
  18. :param skills:
  19. :param skills_dict:
  20. :return:
  21. '''
  22. print(menu.skill_message)
  23. for skill_num,skill in enumerate(skills,):
  24. print("%18s%30s%20s" %(skill_num,skill,skills_dict[skill]))
  25. print("----------------------------------------------------------------------------------------------")
  26.  
  27. def trans_weekday():
  28. '''
  29. 星期转换模式,按照国人的习惯,把数字日期转换为中文日期
  30. :return: 返回中文下的日期
  31. '''
  32. weekdays = ["一","二","三","四","五","六","日"]
  33. week_day = weekdays[datetime.date.weekday(datetime.date.today())]
  34. return week_day
  35.  
  36. def show_duel_message(date,week,name1,name2,name3):
  37. '''决斗者双方信息展示,以及签订生死状'''
  38. print(menu.battle_message.format(date,week,name1,name2,name3))

common.py模块,存放公共函数,一些转换函数,方法都在里面。

    role.py

  1. '''定义角色类'''
  2. class Person(object):
  3. '''定义一个人的类'''
  4. def __init__(self,name,age,sex): ###变量初始化###
  5. self.name = name
  6. self.age = age
  7. self.sex = sex
  8.  
  9. class Man(Person):
  10. def __init__(self,name,age,sex,score=):
  11. '''继承'''
  12. super(Man,self).__init__(name,age,sex) #重写父类的方法,因为被子类覆盖了
  13. self.score = score
  14.  
  15. class Wemon(Person):
  16. '''定义一个女性的类,继承父类'''
  17. def __init__(self,name,age,sex,belong_to=""):
  18. super(Wemon,self).__init__(name,age,sex)
  19. self.belong_to = belong_to

存放类模块,用来生成实例:

game_index.py -- 程序主入口,运行调用整个模块

  1. import sys,os,datetime,random
  2. from conf import menu
  3. from modules import common,role
  4. from conf import setting
  5.  
  6. def story_introduce():
  7. message = '''
  8. -------------------------------------------------------------------------------------------------
  9. \[;1m相传在民国时期,如果两个男的同时看上一个女的,那么他们两个就要进行决斗来获得美女的芳心。
  10. 比赛共分为三场,没人根据自己的独特性质进行得分,最后得分最高者胜利,抱得美人归。如果三场比赛
  11. 之后,两人得分相同,则进入加时赛,加时赛按每轮进行得分,直到分出胜负。\[0m
  12. -------------------------------------------------------------------------------------------------
  13. '''
  14. print(message)
  15.  
  16. def duel():
  17. '''决斗'''
  18. '''完善决斗者1的信息'''
  19. name1 = input("请输入决斗者1的名字:")
  20. age1 = input("请输入决斗者1的年龄:")
  21. sex1 = "男" #默认决斗者的性别都是男
  22. '''把决斗者1封装到类中,生成一个实例'''
  23. m1 = role.Man(name1,age1,sex1)
  24. '''完善决斗者2的信息'''
  25. name2 = input("请输入决斗者2的名字:")
  26. age2 = input("请输入决斗者2的年龄:")
  27. sex2 = "男"
  28. m2 = role.Man(name2,age2,sex2)
  29. '''完善美女的信息'''
  30. name = input("请输入被决斗美女的名字:")
  31. age = input("请输入被决斗美女的年龄:")
  32. sex = "女"
  33. w1 = role.Wemon(name,age,sex)
  34. '''下面进入决斗了'''
  35. common.show_duel_message(date_today,week_day,m1.name,m2.name,w1.name)
  36. skill_num =
  37. common.function_show(setting.Skills, setting.DATABASE)
  38. while skill_num < :
  39. '''初始化m1的属性'''
  40. m1.skill = input("决斗者1请根据实际情况输入您对应的技能编号:")
  41. if int(m1.skill) in list(range(,)):
  42. m1.skill = setting.Skills[int(m1.skill)-]
  43. else:
  44. print("对不起,您输入的技能编号有误,请重新输入!")
  45. continue
  46. m1_tem_score = setting.DATABASE[m1.skill]
  47. m1.score += m1_tem_score
  48.  
  49. '''初始化m2的属性'''
  50. m2.skill = input("决斗者2请根据实际情况输入您对应的技能编号:")
  51. if int(m2.skill) in list(range(,)):
  52. m2.skill = setting.Skills[int(m2.skill)-]
  53. else:
  54. print("对不起,您输入的技能编号有误,请重新输入!")
  55. continue
  56. m2_tem_score = setting.DATABASE[m2.skill]
  57. m2.score += m2_tem_score
  58. print(menu.battle_show.format(skill_num+,date_today,week_day,m1.name,m1.skill,m1.score,m2.name,m2.skill,m2.score))
  59. print(menu.match_show.format(skill_num+,m1.name,m1.score,m2.name,m2.score))
  60. skill_num +=
  61. if m1.score > m2.score:
  62. print(menu.victor_show.format(date_today,week_day,,m1.name,m1.score,m2.name,m2.score))
  63. print("比赛结束,%s获胜" %m1.name)
  64. sys.exit()
  65. elif m1.score < m2.score:
  66. print(menu.victor_show.format(date_today,week_day,,m2.name,m2.score,m1.name,m1.score))
  67. print("比赛结束,%s获胜" %m2.name)
  68. sys.exit()
  69. elif m2.score == m1.score:
  70. print("两个人经过三轮比赛,得分一样,下面将进行加时赛,来确定输赢!!!")
  71.  
  72. if __name__ == "__main__":
  73. date_today = datetime.date.today().strftime("%Y-%m-%d")
  74. week_day = common.trans_weekday()
  75. flag = True
  76. while flag:
  77. common.introduce(menu.main_show.format(date_today,week_day))
  78. query_num = input("请输入选择功能编号:")
  79. if query_num == '':
  80. story_introduce()
  81. common.function_show(setting.Skills, setting.DATABASE)
  82. elif query_num == '':
  83. ###完善挑战者1的信息,并放在一个类中###
  84. duel()
  85. elif query_num == '':
  86. pass
  87. elif query_num == 'q' or query_num == 'quit':
  88. sys.exit("您已退出游戏,欢迎下次来玩!")

game_life.py程序主入口,用来调用整个程序的模块,下面,运行这个程序,看如下:

  1. -------------------------------------------------------------------------------------------
  2. 欢迎光临抢美女决战平台 日期:-- 星期:日
  3. -------------------------------------------------------------------------------------------
  4.  
  5. 【】故事介绍 【】PK决战 【】战绩榜 q】退出
  6.  
  7. -------------------------------------------------------------------------------------------
  8.  
  9. 请输入选择功能编号:
  10. 请输入决斗者1的名字:吴沛齐
  11. 请输入决斗者1的年龄:
  12. 请输入决斗者2的名字:Alex
  13. 请输入决斗者2的年龄:
  14. 请输入被决斗美女的名字:李志玲
  15. 请输入被决斗美女的年龄:
  16.  
  17. --------------------------------------------------------------------------------------------------
  18. 今天:-- 星期:日
  19. 姓名:吴沛齐 姓名:Alex 为了 李志玲 在此决斗,获胜者将抱得美人归,生死由命成败在天,谁能抱
  20. 得美人归,各凭实力
  21. 特在此签生死状,如有生死,既往不咎!!!
  22. --------------------------------------------------------------------------------------------------
  23.  
  24. ----------------------------------------------------------------------------------------------
  25. 技能展示
  26. ----------------------------------------------------------------------------------------------
  27. 技能编号 技能名称 技能得分
  28.  
  29. rich
  30. poor
  31. handsome
  32. ugly
  33. struggle
  34. car
  35. house
  36. height
  37. short
  38. fat
  39. thin
  40. ----------------------------------------------------------------------------------------------
  41. 决斗者1请根据实际情况输入您对应的技能编号:
  42. 决斗者2请根据实际情况输入您对应的技能编号:
  43.  
  44. --------------------------------------------------------------------------------------------------
  45. 1回合: 日期:-- 星期:日
  46.  
  47. 决战者1 姓名:吴沛齐 决战者2 姓名:Alex
  48. VS
  49. 技能:rich 得分 技能:poor 得分:
  50. --------------------------------------------------------------------------------------------------
  51.  
  52. --------------------------------------------------------------------------------------------------
  53.  
  54. 1回合--决战者1:吴沛齐 累计得分: 决战者2Alex 累计得分:
  55.  
  56. --------------------------------------------------------------------------------------------------
  57.  
  58. 决斗者1请根据实际情况输入您对应的技能编号:
  59. 决斗者2请根据实际情况输入您对应的技能编号:
  60.  
  61. --------------------------------------------------------------------------------------------------
  62. 2回合: 日期:-- 星期:日
  63.  
  64. 决战者1 姓名:吴沛齐 决战者2 姓名:Alex
  65. VS
  66. 技能:handsome 得分 技能:ugly 得分:
  67. --------------------------------------------------------------------------------------------------
  68.  
  69. --------------------------------------------------------------------------------------------------
  70.  
  71. 2回合--决战者1:吴沛齐 累计得分: 决战者2Alex 累计得分:
  72.  
  73. --------------------------------------------------------------------------------------------------
  74.  
  75. 决斗者1请根据实际情况输入您对应的技能编号:
  76. 决斗者2请根据实际情况输入您对应的技能编号:
  77.  
  78. --------------------------------------------------------------------------------------------------
  79. 3回合: 日期:-- 星期:日
  80.  
  81. 决战者1 姓名:吴沛齐 决战者2 姓名:Alex
  82. VS
  83. 技能:house 得分 技能:height 得分:
  84. --------------------------------------------------------------------------------------------------
  85.  
  86. --------------------------------------------------------------------------------------------------
  87.  
  88. 3回合--决战者1:吴沛齐 累计得分: 决战者2Alex 累计得分:
  89.  
  90. --------------------------------------------------------------------------------------------------
  91.  
  92. --------------------------------------------------------------------------------------------------
  93. 比赛结果: 日期:-- 星期:日
  94.  
  95. 经过3回合决斗,决战者--姓名:吴沛齐 最终得分: 战胜 姓名:Alex 最终得分:
  96.  
  97. --------------------------------------------------------------------------------------------------
  98.  
  99. 比赛结束,吴沛齐获胜

    总结:

1、通过上面的实例,大概知道了类是如何使用的,上面我就是使用类的方法进行调用的,使用类的好处是,可以把一个人所有的属性都封装到类里面,而且另一个实例也一样,调用的时候我们只需要调用类即可,很名了。

2、可以把一些方法放在类里面,其实不是说使用类,就不用其他的函数了,其他函数还是与之前一样要写的,只是类里面包含的是属于类的本身方法,就如common模块本身还有自己的方法。

3、函数的调用,我们要知道我们实现的东西是什么,不要害怕参数问题,参数后期自己可以直接传即可,只要知道需要什么参数,都是可以办的到的。

下面将对上面代码进行重写完善,并整理流程图。这也是我第一次用类写框架,所以纪念一下。

day6作业--游戏人生的更多相关文章

  1. day6作业--游戏人生完善

    本节作业: 熟练使用类和模块,写一个交互性强.有冲突的程序.     一.作业目的 1.规范程序写法,要按照模块来规范书写: 2.类的使用,文件之间的调用练习: 3.思路的开阔,自己编写冲突,实现调用 ...

  2. day6作业详解

    1.day6题目 1,老男孩好声⾳选秀⼤赛评委在打分的时候呢, 可以进⾏输入. 假设, 老男孩有10个评委. 让10个评委进⾏打分, 要求, 分数必须⼤于5分, 小于10分. 电影投票. 程序先给出⼀ ...

  3. 老男孩Day6作业:计算器

    作业需求: 1.实现加减乘除及拓号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) ...

  4. Day6作业及默写

    1.使⽤循环打印以下效果: 1: * ** *** **** ***** for num in range(1,6): print('*' * num) 2: ***** **** *** ** * ...

  5. day6作业(元组,字典,集合)

    默写: 1.元组 字典 集合 列表 各自的特点 2.字典添加 删除 修改 循环 必做: 1.餐厅提供了五种不同的菜,使用元组来存储他们,并循环打印出所有菜名,要求用户输入新加的菜名,加入到菜单中,并重 ...

  6. day6作业--选课系统

    角色:学校.学员.课程.讲师 要求: 1.创建北京.上海2所学校: 2.创建Linux,Python,go 3个课程,Linux\python在北京开,go在上海开: 3.课程包含,周期.价格,通过学 ...

  7. Day6作业:计算器

    嗯,稀里糊涂就居然写完了...... readme: 程序说明: 此计算器比较简单,只支持普通的加减乘除和小括号,不支持[],{},求幂之类的均不支持! 测试过的字符串: -1/2*((60-30+( ...

  8. day6 作业 购物车

  9. Python全栈学习_day006作业

    Day6作业及默写 ,使用循环打印以下效果: : * ** *** **** ***** : ***** **** *** ** * : * *** ***** ******* ********* . ...

随机推荐

  1. 《剑指offer》 面试题53 :正则表达式匹配 Java

    引言:这道题情况比较复杂,边界条件较多,为了便于以后复习,整理一下.另外,由于C语言和Java对于字符串的操作存在不一样的地方,代码也存在改动. 题目:请实现一个函数用来匹配包含'.'和'*'的正则表 ...

  2. android studio run得时候 选择开启对话框

    一个项目run 调试得时候,在Android studio3.0默认得设置是运行在上一个device上,我们通过改变设置,废话不多说,上图: 然后点击这个edit config 在miscellane ...

  3. HBase基本概念

    HBase是什么 HBase构建在 HDFS 之上的分布式列式键值存储系统.HBase内部管理的文件全部存储在HDFS中. HBase VS HDFS HDFS适合批处理场景 不支持数据随机查找 不适 ...

  4. centos无法通过ssh连接的解决

    系统环境是centos7,虚拟机环境下的.在使用ssh工具连接虚拟机的时候发现连接不上,用的是root 先检查openssh-server是否安装: yum list installed | grep ...

  5. Linux学习5-线程

    线程 1.1什么是线程? 在一个程序中的多个执行路线就叫做线程(thread).更准确的定义是:线程是一个进程内部的一个控制序列.   要搞清楚fork系统调用和创建新线程之间的区别.当进程执行for ...

  6. Callable,Future,FutureTask

    1.概念定义 2.实现例子 3.总结   1.概念定义   1.Callable Callable是一个接口,效果类似Runnable接口.实现该接口,然后,耗时操作在call()方法中执行.与Run ...

  7. Bzoj3352 [ioi2009]旅行商

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 89  Solved: 36 Description 旅行商认定如何优化旅行路线是一个非常棘手的计算问题 ...

  8. CALayer的上动画的暂停和恢复

    CHENYILONG Blog CALayer上动画的暂停和恢复 #pragma mark 暂停CALayer的动画-(void)pauseLayer:(CALayer*)layer{CFTimeIn ...

  9. app横竖屏切换

    问题: 使用react编写的页面,编译后的页面文件打包成app安装后,在手机上显示时,初次横竖屏切换时会出现页面尺寸渲染问题,要跳到其它页面后才能恢复,如图: 由竖屏切换成横屏后页面出现很多空白. 解 ...

  10. linux学习记录.4.常用命令

    帮助command --help    获取‘command‘命令的帮助 目录与文件 cd /home    进入‘home’目录 cd ..    返回上一级目录 cd       进入个人目录 c ...