python3.7 jack棋牌11点实例
# -*- codeing: utf-8 -*-
# Project: 棋牌游戏11点
# Author: jack
# Version: 2.2
# Start Time: 2021-07-24
import random
P_INFO = [["小王",0.5],["大王",0.5]] # 初始一副poker牌
USER_LIST = ["庄家","玩家1","玩家2"] # 玩家信息表
P_INFO_TWO = [] # 剩余牌列表
USER_POKER = [] # 人员和牌列表
RESULT ={} # 最终成绩表
# 1、生成一副扑克牌(自己设计扑克牌的结构)
def one_poker(P_INFO):
poker_type = ["黑桃","红桃","草花","方块"]
# 基本牌数字
poker_num = ["A","2","3","4","5","6","7","8","9","10","J","Q","K","小王","大王"]
for type in poker_type:
count = 1
for num in range(len(poker_num)):
if num > 12:
pass
elif num > 9:
card = [type+poker_num[num],0.5] # J、Q、K、代表的值为0.5
P_INFO.append(card)
else:
card = [type+poker_num[num],count]
P_INFO.append(card)
count += 1
# print(P_INFO)
return P_INFO # 已生成一副牌
# 2、3个玩家(玩家也可以自己定义)
def user_num(USER_LIST):
count = 0
while count < 54:
user_name = input("请输入玩家名字,输入Q/q退出游戏,输入S/s开始发牌:").strip()
print()
if user_name.upper() == "Q":
exit()
elif user_name.upper() == "S":
break
elif user_name in USER_LIST:
print("{}玩家名称已存在,请重新输入".format(user_name))
else:
USER_LIST.append(user_name) # 新玩家自动添加到玩家信息表
count += 1
else:
exit("太多人玩了,牌不够了")
return USER_LIST
# 3、发牌
def deal(USER_LIST,P_INFO,RESULT,P_INFO_TWO):
count = 0
while count < len(USER_LIST):
user_p_one = random.randint(0,len(P_INFO)-1) # 产生0-53之间的一个整数
card = P_INFO[user_p_one]
user = USER_LIST[count]
USER_POKER.append([user,card])
print("{}抽到的第1张牌为:{}".format(user,card))
print("牌面值为:{}".format(card[1]))
print()
RESULT[user] = card[1]
P_INFO.pop(user_p_one)
count += 1
P_INFO_TWO.extend(P_INFO) # 剩余牌列表
return USER_POKER,RESULT,P_INFO_TWO
# 4、要牌
def recard(USER_LIST,P_INFO_TWO,RESULT,USER_POKER):
count = 0
while count < len(USER_LIST):
user = input("{}选择是否要牌,输入N/n不要牌,回车继续要牌:".format(USER_LIST[count])).strip()
print()
if user.upper() == "N":
count += 1
# continue
else:
user_p_one = random.randint(0,len(P_INFO_TWO)-1) # 取一张牌
card = P_INFO_TWO[user_p_one] # 牌的信息
user = USER_LIST[count] # 用户信息
USER_POKER[count].append(card) # 牌加到人员和牌列表
print("{}抽到的牌为:{}".format(user,card))
score = RESULT.get(user) # 得到第一次牌分数
score += card[1] # 计算新的分数
print("{}现在的牌面是:{}".format(USER_LIST[count],USER_POKER[count][1:]))
print("牌面值为:{}".format(score))
print()
RESULT[user] = score # 把分数写进字典
P_INFO_TWO.pop(user_p_one)
if score > 11: # 超过11分牌爆掉
RESULT[user] = 0
print("{}牌爆掉了,下次注意点......".format(user))
print()
count += 1
return P_INFO_TWO,RESULT
one_poker(P_INFO) # 生产一副牌
# for poker in P_INFO:
# print(poker[0],end=" ") # 显示一副牌,不显示值
print("JACK赌坊,欢迎光临".center(30,"-"))
print("小赌怡情,大赌伤身,强赌灰飞烟灭".center(22,"-"))
print("玩家请看牌".center(40,"-"))
print(P_INFO) # 显示一副牌
print("开始棋牌11点".center(34,"-"))
print()
user_num(USER_LIST) # 人员列表
# print(USER_LIST)
deal(USER_LIST,P_INFO,RESULT,P_INFO_TWO) # 第一次发牌
# print(USER_POKER)
# print(RESULT)
# print(P_INFO_TWO)
recard(USER_LIST,P_INFO_TWO,RESULT,USER_POKER) # 要牌过程
# print(P_INFO_TWO)
print(RESULT) # 打印最终结果字典
# 5、判断胜者
# 字典排序
win_sorted = sorted(RESULT.items(),key=lambda x:x[1],reverse=True)
# print(win_sorted)
count = 1
while count < len(win_sorted)+1:
if win_sorted[count-1][1] != win_sorted[count][1]:
print("胜者是{}".format(win_sorted[:count]).center(40,"-"))
break
else:
count += 1
python3.7 jack棋牌11点实例的更多相关文章
- JavaScript学习11 数组排序实例
JavaScript学习11 数组排序实例 数组声明 关于数组对象的声明,以前说过:http://www.cnblogs.com/mengdd/p/3680649.html 数组声明的一种方式: va ...
- Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...
- Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素
ylbtech-Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素 1.返回顶部 1. Java 实例 - 删除数组元素 Java 实例 以下实例演示了如何使用 ...
- Java-Runoob-高级教程-实例-字符串:11. Java 实例 - 字符串性能比较测试
ylbtech-Java-Runoob-高级教程-实例-字符串:11. Java 实例 - 字符串性能比较测试 1.返回顶部 1. Java 实例 - 字符串性能比较测试 Java 实例 以下实例演 ...
- 零元学Expression Blend 4 - Chapter 11 用实例了解布局容器系列-「Border」
原文:零元学Expression Blend 4 - Chapter 11 用实例了解布局容器系列-「Border」 将教大家以实做案例认识Blend 4 的布局容器,此章介绍的布局容器是Blend ...
- python从入门到大神---4、python3文件操作最最最最简单实例
python从入门到大神---4.python3文件操作最最最最简单实例 一.总结 一句话总结: python文件操作真的很简单,直接在代码中调用文件操作的函数比如open().read(),无需引包 ...
- Windows server2008/2012 安装oracle 11 创建实例HANG住在百分之2
Windows server2008/2012 安装oracle 11.2.0.1的时候,可能会在创建数据库实例的时候卡在百分之2的地方. 这个时候可以 1.点击开始菜单,在“搜索程序和文件”中输入“ ...
- postgres 11 单实例最大支持多少个database?
有人在pg8时代(10年前)问过,当时说10000个没问题,而且每个db会在/base下建立1个文件夹, 文件ext3只支持32000个子文件夹,所以这是上限了. 而现在早就ext4了,根本没有限制了 ...
- C++11 正则表达式——实例系统(转载)
一.用正则表达式判断邮箱格式是否正确 1 #include <regex> #include <iostream> #include <string> bool i ...
随机推荐
- postman之将获取响应数据-创建环境变量,用于不同的接口调用
应用场景: token的获取,用于不同接口的取值 在test中进行如下设置: var jd = pm.response.json(); var access_token = jd.access_tok ...
- 性能工具之Jmeter-Dubbo脚本开发
内容目录: 1.idea 环境项目部署 2.nacos 环境部署 3.dubbo插件部署 4.不带参数请求 5.带参参数请求 Apache Dubbo 是一款高性能.轻量级的开源Java RPC框架 ...
- 基于redis实现的四种常见的限流策略
引言 在web开发中功能是基石,除了功能以外运维和防护就是重头菜了.因为在网站运行期间可能会因为突然的访问量导致业务异常.也有可能遭受别人恶意攻击 所以我们的接口需要对流量进行限制.俗称的QPS也是对 ...
- 02:HTML
HTML介绍 Web服务本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5 ...
- 关于MySQL索引面试题的六连炮!招架的住吗?
1.面试真题 MySQ索引的原理和数据结构能介绍一下吗? b+树和b-树有什么区别? MySQL聚簇索引和非聚簇索引的区别是什么? 他们分别是如何存储的? 使用MySQL索引都有哪些原则? MySQL ...
- 【模拟7.25】回家(tarjan V-DCC点双连通分量的求法及缩点 求割点)模板题
作为一道板子题放在第二题令人身心愉悦,不到一个小时码完连对拍都没打. 关于tarjan割点的注意事项: 1.在该板子中我们求的是V-DCC,而不是缩点,V-DCC最少有两个点组成,表示出掉一个块里的任 ...
- ORA-01157:cannot identify/lock data file 6 - see DBWR trace file ORA-01110:data file 6:'/u01/app/oracle/oradata/PRDO2/sysaux02.dbf'
- Mac为docker和kubectl添加自动命令补全
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 自动命令补全是非常有用的功能,特别是当命令有特别多参数时.显然,docker/kubectl就是这样的命令.我们 ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- 8、oracle密码过期设置
8.1.登录到oracle实例: [oracle@slave-node2 ~]$ echo $ORACLE_SID orcl [oracle@slave-node2 ~]$ sqlplus sys/1 ...