python3模拟扑克牌
python3.6环境
import collections
from random import choice
Card=collections.namedtuple('Card',['rank','suit']) class FrenchDeck:
ranks=[str(n) for n in range(2,11)] +list('JQKA') #扑克的大小范围
print(ranks)
suits='spades diamods clubs hearts'.split() # 黑桃,钻石,方块,红心
print(suits)
def __init__(self):
self._cards=[Card(rank,suit) for suit in self.suits
for rank in self.ranks] def __len__(self):
return len(self._cards) def __getitem__(self, position):
return self._cards[position] beer_card=Card('','diamonds') #实例一个扑克点
print(beer_card) deck= FrenchDeck() #创一个扑克对象deck
print(len(deck)) #打印总共有多少张扑克 print(deck[0]) #打印第一张牌 黑桃2
print(deck[-1]) #打印最后一张牌 红心A print(choice(deck)) #随机抽取一张牌 print(deck[:3]) #查看最上面三张 黑桃 2 ,3, 4 print(deck[12::13]) #抽取索引为12的那张牌,然后每隔13张在抽取一张 正好是4个A # 实现了 __getitem__方法,这一摞牌变成了可迭代对象
for card in deck:
print(card)
print('===============================下面是反响迭代===============================')
#反向迭代
for card in reversed(deck):
print(card) #判断某张牌实例是否存在这副牌中
print(Card('Q','hearts') in deck) #True
print(Card('','beasts') in deck) #False # 比较扑克牌的大小2 最小、A 最大;同时还要加
# 上对花色的判定,黑桃最大、红桃次之、方块再次、梅花最小。
# 下面就是按照这个规则来给扑克牌排序的函数,梅花 2 的大小是 0,黑桃 A 是 51:
suit_values=dict(spades=3,hearts=2,diamods=1,clubs=0) def spades_high(card):
# 获取扑克的点数
rank_value = FrenchDeck.ranks.index(card.rank)
# 根据传入的牌的实例返回扑克0-51 之间的一个索引 例 黑桃A:12*4+3=51
return rank_value * len(suit_values) + suit_values[card.suit] # 通过上面定义的函数对这幅牌进行 升序排序
print('===============================自定义排序===============================')
for card in sorted(deck, key=spades_high):
print(card)
python3模拟扑克牌的更多相关文章
- C# -- 模拟扑克牌发牌
C# -- 模拟扑克牌发牌 1. User 类: 玩家 public class User { private List<PaperCard> listCard = new List&l ...
- python3 模拟登录网站
最近学习python,因经常登录公积金网站查看公积金缴存还款情况,so网上找了写脚本,修改了一下,方便获取网页中的数据. 使用谷歌浏览器F12查看登录请求内容 1.request header需要参数 ...
- python3 模拟鼠标和键盘操作
1. 安装pyperclip pip install pyperclip 使用方法复制 pyperclip.copy("hello world") 粘贴 pyperclip.pas ...
- Python3 模拟登录知乎(requests)
# -*- coding: utf-8 -*- """ 知乎登录分为两种登录 一是手机登录 API : https://www.zhihu.com/login/phone ...
- Python模拟登陆TAPD
因为在wiki中未找到需要的数据,查询也很迷,打算用python登录tapd抓取所需项目下的wiki数据,方便查找. 2018-9-30 19:12:44 几步走 模拟登录tapd 抓取wiki页左侧 ...
- Python3高级基础(2)
1 Python3模拟数据结构 1.1 栈 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表.栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进 ...
- python http请求及多线程应用
目录 概述 tomorrow包准备 运行环境遇到的问题 其他尝试未果 概述 今天, 使用python3 模拟下发包, http get 请求, 然后 采用tomorrow 多线程. 代码如下: # c ...
- 第四小节之Java 集合类
Java的集合类就像一个容器,专门用来存储Java类的对象.这些类可以存储任意类型的对象,并且长度可变,统称为集合,这些类位于java.util包中,数组也可以保存多个对象,但在某些情况下无法确定到底 ...
- python 处理protobuf协议
背景:需要用django基于python3模拟一个http接口,请求是post方式,body是protobuf string,返回也是protobuf string 设计:django获取pb str ...
随机推荐
- Linux5个数据段
进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回 ...
- 1、python的基础
一.python组成 python程序的内容主要由变量.数据.关键字.操作符组成. 二.变量 在python中,变量指的是其指向的数据是可变的. 首先我们要了解一下python的内存管理.数据创建后就 ...
- 定时任务之crond服务
计划任务分为一次性计划任务与长期性计划任务 一次性计划任务:今天11:25执行重启网卡操作,执行结束 即任务消失 一次性计划任务格式: 创建:"at 时间" #默认采用的是交互式 ...
- 使用JavaConfig方式-Spring 基础学习
在Spring的使用中,大量采用xml方式配置类之间的关系太过于繁琐(个人这么认为),而在学习了Spring4后发下使用JavaConfig方式来配置这些关系会更加的简单明了. 测试环境 1. Apa ...
- MySQL时间字段究竟使用INT还是DateTime
今天解析DEDECMS时发现deder的MYSQL时间字段,都是用 `senddata` ) unsigned '; 随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用 ...
- Java并发之(1):volatile关键字(TIJ21-21.3.3 21.3.4)
Java并发Java服务器端编程的一项必备技能. ** 1 简介 volatile是java中的一个保留关键字,它在英语中的含义是易变的,不稳定的.volatile像final.static等其 ...
- IOS开发---菜鸟学习之路--(六)-UITableView几个方法的使用说明
对于UITableView的基础使用我这边就不做重复介绍了 我重点就来介绍下如何实现大部分新闻的界面.也就是第一条记录显示大图片下面加一段文字说明 然后剩下来的内容全部显示为文字图片的格式 其实要做到 ...
- Beamer模板
普通模板: \documentclass[UTF-8]{beamer} \usepackage{ctex} \usetheme{CambridgeUS} \begin{document} \secti ...
- flask url_for()和redirect的区别
一. 两者用来重定向的时候,被操作的对象不同. redirect直接是url,就是app.route的路径参数. url_for()是对函数进行操作. from flask import Flask, ...
- JWT实现token认证
演变 1.1 有状态服务 在原来的单体系统中,有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,session+cookie.在如今的大多数分布式系统中 ...