模块一后的小作业(棋牌游戏11点)

经过对模块一python基础知识的学习后,对已学知识进行实战练习,目的也是为了巩固和掌握其语法知识。
虽然小游戏实现难度不大,但贵在基本是自己慢慢写出来的代码吧哈哈哈。一步一步来,问题不大。

游戏题目及要求如下:

1、生成一副扑克牌(自己设计扑克牌的结构,小王和大王可以分别用14、15表示 )
2、自定义3个玩家
3、发牌规则:
默认先给用户发一张牌,其中 J、Q、K、小王、大王代表的值为0.5,其他就是则就是当前的牌面值。
4.用户根据自己的情况判断是否继续要牌。要,则再给他发一张。(可以一直要牌,但是如果自己手中的牌总和超过11点,你的牌就爆掉了(牌面变成0))不要,则开始给下个玩家发牌。(没有牌则则牌面默认是0)
如果用户手中的所有牌相加大于11,则表示爆了,此人的分数为0,并且自动开始给下个人发牌。
4、最终计算并获得每个玩家的分值,例如:
result = {"alex":8,"武沛齐":9,"李路飞":0
}

代码实现如下:

import random# 新建一个扑克花色表
poke_color = ["红桃", "黑桃", "方块", "梅花"]# 新建一个扑克数值列表
num_list = []
for i in range(1, 14):num_list.append(i)# 创建一副新的扑克牌及各牌对应代表分数的列表,如[('红桃', 7 , 7),('黑桃', 12 , 0.5)...]
total_poke_list = []
for color in range(len(poke_color)):for num in range(1, 14):if num < 11:data = (poke_color[color], num_list[num - 1], num_list[num - 1])total_poke_list.append(data)else:data = (poke_color[color], num_list[num - 1], 0.5)total_poke_list.append(data)
special_poke = [('小王', 14, 0.5), ('大王', 15, 0.5)]
total_poke_list.extend(special_poke)print('游戏开始'.center(50, '-'))# 自定义录入三名玩家姓名
user_list = []
for i in range(3):user_input = input(f"请输入玩家{i + 1}号的姓名({i + 1}/3):").strip()user_list.append(user_input)# 首先为三位玩家先随机各发一张牌
poke_first = []
poke_score = []
for i in range(len(user_list)):index = random.randint(0, len(total_poke_list) - 1)poke = total_poke_list.pop(index)poke_first.append(poke)poke_score.append(poke[2])print("各玩家首次发牌完毕,下面是加牌环节".center(50, '-'))# 依次询问用户是否需要选择要牌,最后统计出各玩家最后得分(牌值爆了则为0分)
result = {}
for i in range(len(user_list)):print(f"{user_list[i]}玩家,你的第一张牌是:{poke_first[i][0]}{poke_first[i][1]}")while True:choice = input("请选择是否需要继续要牌(y/n):").strip()choice = choice.upper()# 首先判断用户输入是否符合规则if choice not in {'Y', 'N'}:print("输入格式错误,请重新正确的输入!")continue# 输入N,则选择不要牌了if choice == 'N':result[user_list[i]] = poke_score[i]print(f"{user_list[i]}玩家选择不要牌了")break# 输入Y,继续要牌,将牌得分进行累加,判断是否爆了if choice == 'Y':index = random.randint(0, len(total_poke_list) - 1)poke = total_poke_list.pop(index)print(f"{user_list[i]}玩家要的牌为:{poke[0]}{poke[1]}")poke_score[i] += poke[2]# 判断牌值得分是否爆了while poke_score[i] <= 11:result[user_list[i]] = poke_score[i]breakelse:print(f"很遗憾{user_list[i]}玩家,您手中的牌已爆!")result[user_list[i]] = 0breakprint("游戏结束,玩家的得分情况如下:".center(50, '-'))
for i in result:print(f"玩家{i}得分:", result[i])

害,感觉还良好的作业,经过一番修改,才知道原来存在的问题也还比较多,受益颇多吧,这或许就是成长和进步吧。

总结一下以上代码中出现的问题和需要优化的地方:
问题1:没有考虑到用户输入的为空和重复的情况
问题2:num_list是多余的,可删
问题3: 用太多for i in range(len(xxx)), python 可以直接for i in array
问题4:变量命名太随意

可以优化的点:
优化1:同时遍历index,和value可以使用enumerate
优化2:在循环中,重复的代码可以抽出来,简化代码量

更新优化后的代码如下:

import random# 新建一个扑克花色表
poke_color = ["红桃", "黑桃", "方块", "梅花"]# 创建一副新的扑克牌及各牌对应代表分数的列表,如[('红桃', 7 , 7),('黑桃', 12 , 0.5)...]
total_poke_list = []
for color in poke_color:for num in range(1, 14):if num < 11:score = numelse:score = 0.5data = (color, num, score)total_poke_list.append(data)
special_poke = [('小王', 14, 0.5), ('大王', 15, 0.5)]
total_poke_list.extend(special_poke)print('游戏开始'.center(50, '-'))# 自定义录入三名玩家姓名
user_list = []
while len(user_list) < 3:user_order = len(user_list) + 1user_input = input(f"请输入玩家{user_order}号的姓名({user_order}/3):").strip()if user_input and user_input not in user_list:user_list.append(user_input)else:print("输入错误,请重新输入")# 首先为三位玩家先随机各发一张牌
poke_first = []
poke_score = []
for name in user_list:index = random.randint(0, len(total_poke_list) - 1)poke = total_poke_list.pop(index)poke_first.append(poke)poke_score.append(poke[2])print("各玩家首次发牌完毕,下面是加牌环节".center(50, '-'))# 依次询问用户是否需要选择要牌,最后统计出各玩家最后得分(牌值爆了则为0分)
result = {}
for index, name in enumerate(user_list):print(f"{name}玩家,你的第一张牌是:{poke_first[index][0]}{poke_first[index][1]}")while True:choice = input("请选择是否需要继续要牌(y/n):").strip()choice = choice.upper()# 首先判断用户输入是否符合规则if choice not in {'Y', 'N'}:print("输入格式错误,请重新正确的输入!")continue# 输入N,则选择不要牌了if choice == 'N':result[user_list[index]] = poke_score[index]print(f"{user_list[index]}玩家选择不要牌了")break# 输入Y,继续要牌,将牌得分进行累加,判断是否爆了if choice == 'Y':index_random = random.randint(0, len(total_poke_list) - 1)poke = total_poke_list.pop(index_random)print(f"{user_list[index]}玩家要的牌为:{poke[0]}{poke[1]}")poke_score[index] += poke[2]# 判断牌值得分是否爆了while poke_score[index] <= 11:result[user_list[index]] = poke_score[index]breakelse:print(f"很遗憾{user_list[index]}玩家,您手中的牌已爆!")result[user_list[index]] = 0breakprint("游戏结束,玩家的得分情况如下:".center(50, '-'))
for name in result:print(f"玩家{name}得分:", result[name])

基于Python完成的《棋牌游戏11点》游戏相关推荐

  1. 基于Python的Pygame带背景音乐的五子棋游戏的设计与实现

    源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 基于Python的Pygame带背景音乐的五子棋游戏的设计与实现 用户需求分析 通过软件功能的分析, ...

  2. 基于Python/Tkinter的飞机大战单机小游戏

    这是很早之前课余时间写的基于Python/Tkinter单机小游戏,用来练手,今天将代码贴出来,方便大家一起学习,通过Py/Tk对于学习GUI作为一个入口,其实是个不错入口,在这里推荐一下Tcl/Tk ...

  3. 基于Python制作的消消乐小游戏

    导语 哈喽,好久不见.消失人口上线更新一波每月必出的 python 制作小游戏系列文章.本期我们将制作一个消消乐小游戏,让我们愉快地开始吧 开发工具 Python 版本:3.6.4 相关模块: pyg ...

  4. Maze_AI: 一款基于 Python + Pygame + AI 算法的迷宫小游戏

    (一)课题内容 实现走迷宫. 主要功能为界面显示.上下左右键的响应以及当前步数统计. 通过该课题全面熟悉数组.字符串等的使用,掌握程序设计的基本方法及友好界面的设计. (二)课题要求 1. 基本要求 ...

  5. 基于Python实现制作的接金币小游戏

    资源下载地址:https://download.csdn.net/download/sheziqiong/85738332 资源下载地址:https://download.csdn.net/downl ...

  6. 基于Python的PyGame模块实现泡泡龙小游戏(Forgger2)

    环境要求 操作系统:Windows 7.Windows 10,mac. Python版本:3.8及以上 游戏介绍 游戏的主要目的时穿过马路和河流抵达自己的洞穴,中途会有可以互动的道具可以使用,地图上会 ...

  7. 基于Python实现的五子棋tkinter版小游戏设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85677012 资源下载地址:https://download.csdn.net/downl ...

  8. 基于Python实现的五子棋tkinter版小游戏 课程报告+源码

    资源下载地址:https://download.csdn.net/download/sheziqiong/85677012 资源下载地址:https://download.csdn.net/downl ...

  9. 【剧本杀游戏】彼岸元素星-基于python的剧本杀游戏开发

    彼岸元素星一款基于python开发的PC端剧本杀游戏,故事背景是元素星球被毁灭.玩家需要扮演"木精灵"找到元素星球被毁灭的原因. 游戏下载链接: https://download. ...

  10. python10点半纸牌游戏_扑克11点游戏(python代码)

    扑克11点游戏(python代码)import random'''纸牌11点游戏 规则: 1. 3个人参与,默认先给用户发一张牌,其中 J.Q.K.小王.大王代表的值为0.5,其他就是则就是当前的牌面 ...

最新文章

  1. Dubbo入门介绍---搭建一个最简单的Demo框架
  2. 2018年企业运维开发经典面试题
  3. 线上问题分析系列:数据库连接池内存泄漏问题的分析和解决方案
  4. SFB 项目经验-55-另类更新Exchange 2016 KB
  5. java 基本数据类型及自己主动类型提升
  6. Ajax datatype:'JSON'的error问题Status1:200,JSON格式
  7. 模型保存的方法-----保存整个模型
  8. 图像变换——对数变换
  9. 二八定律 80/20法则 帕累托法则、帕累托定律、马特莱定律、最省力法则或不平衡原则
  10. 初中英语语法(010)-分词
  11. java实现pdf的拆分和合并
  12. 讲解图层样式中的混合颜色带
  13. Excel常用技巧(一)——快捷键
  14. 301代码php代码在哪里加,php 301转向实现代码
  15. 淘宝详情页排版布局怎么做?大神导航,一个神奇的网站,从此开启大神之路!
  16. Dubbo host配置映射内网IP导致消费者无法连接到生产者提供的服务详解
  17. 在Windows Embedded Standard中阻止安装提示和OOBE
  18. 中国雅虎推出雅虎统计服务
  19. 项目管理类,PMP和软考的区别
  20. 撑不下去的时候,仰望,星空。

热门文章

  1. Java毕设项目在线投稿系统计算机(附源码+系统+数据库+LW)
  2. 拟合、过拟合、欠拟合
  3. section元素的使用
  4. 计算机为什么需要补码?
  5. 抖音APP数据python爬虫——个人粉丝视频
  6. SCCM2007部署Office2010(1)
  7. 【已解决】联想小新Pro14适配器打感叹号(代码56)无法上网原因解决!亲测有效
  8. QQ邮箱引流产品怎么推广好?QQ邮箱低成本引流技巧
  9. Python接口自动化函数调用TypeError: seperate_data() missing 1 required positional argument:‘self’
  10. 微信公众号开发--新增临时素材