
正文
roll函数Python python roll函数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
怎样python 写一个扑克和骰子的程序,模拟的5骰子的滚动,至多三次,具体要求如下:
参考下面roll函数Python的代码.
play 可能有问题roll函数Python,主要是没说清楚在保留牌的时候, 输入Ace 或者 "Ace Ace" 有什么区别,到底是输入一次 Ace 保留手上所有的 Ace 还是只保留一个,这个没说清楚。看例子,这两种用法都有,我按照输入了几个就保留几个来做的。
simulate 没问题,和图片中的结果完全一样
必须用 python 3
import random
import collections
_dice_type = ['Ace', 'King', 'Queen', 'Jack', '10', '9']
_hand_mapping = collections.OrderedDict([
('5kind', 'Five of a kind'),
('4kind', 'Four of a kind'),
('full', 'Full house'),
('straight', 'Straight'),
('3kind', 'Three of a kind'),
('2pair', 'Two pair'),
('1pair', 'One pair'),
('bust', 'Bust'),
])
def _check_hand(dices):
counter = collections.Counter(dices)
if len(counter) == 1:
return '5kind'
sorted5 = counter.most_common(5)
if sorted5[0][1] == 4:
return '4kind'
if sorted5[0][1] == 3:
if sorted5[1][1] == 2:
return 'full'
else:
return '3kind'
if sorted5[0][1] == 2:
if sorted5[1][1] == 2:
return '2pair'
else:
return '1pair'
if len(counter) == 5:
dtype = sorted5[0][0]
for x in sorted5:
if dtype != x[0]:
break
dtype += 1
else:
return 'straight'
return 'bust'
def play():
dices = []
retry = 0
while True:
remain = 5 - len(dices)
if remain = 0:
break
dices.extend([random.randint(0,5) for x in range(remain)])
print("The roll is: {}".format(
" ".join([_dice_type[d] for d in sorted(dices)])
))
print("It is a {}".format(_hand_mapping[_check_hand(dices)]))
if retry 1:
break
prompt = "Which dice do you want to keep for the {} roll? ".format(
"second" if retry == 0 else "third"
)
while True:
answer = input(prompt).lower()
if answer == 'all':
break
answer = [x.capitalize() for x in answer.split()]
if set(answer).issubset(set(_dice_type)):
break
print("That is not possible, try again!")
retry += 1
if answer == 'all':
print("Ok, done")
break
tmp = dices
dices = []
for x in tmp:
if _dice_type[x] in answer:
dices.append(x)
answer.remove(_dice_type[x])
def simulate(n, debug=False):
result = dict.fromkeys(_hand_mapping.keys(), 0)
for _ in range(n):
dices = [random.randint(0,5) for x in range(5)]
if debug:
print("DEBUG:", " ".join([_dice_type[d] for d in sorted(dices)]))
result[_check_hand(dices)] += 1
for k, v in _hand_mapping.items():
cnt = result[k]
print("{:16s}: {:.2f}%".format(v, 100*cnt/n))
相关问答
Q1: Python如何图像识别?
1. 简介。
图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前版本为 1.1.7,roll函数Python我们可以 在这里 下载学习和查找资料。
Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。
2. 使用。
导入 Image 模块。然后通过 Image 类中的 open 方法即可载入一个图像文件。如果载入文件失败,则会引起一个 IOError roll函数Python;若无返回错误,则 open 函数返回一个 Image 对象。现在,我们可以通过一些对象属性来检查文件内容,即:
1 import Image
2 im = Image.open("j.jpg")
3 print im.format, im.size, im.mode
4 JPEG (440, 330) RGB
这里有三个属性,我们逐一了解。
format : 识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值。
size : 返回的一个元组,有两个元素,其值为象素意义上的宽和高。
mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。
现在,我们可以使用一些在 Image 类中定义的方法来操作已读取的图像实例。比如,显示最新载入的图像:
1 im.show()
2
输出原图:
3. 函数概貌。
3.1 Reading and Writing Images : open( infilename ) , save( outfilename )
3.2 Cutting and Pasting and Merging Images :
crop() : 从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。
paste() :
merge() :
1 box = (100, 100, 200, 200)
2 region = im.crop(box)
3 region.show()
4 region = region.transpose(Image.ROTATE_180)
5 region.show()
6 im.paste(region, box)
7 im.show()
其效果图为:
旋转一幅图片:
1 def roll(image, delta):
2 "Roll an image sideways"
3
4 xsize, ysize = image.size
5
6 delta = delta % xsize
7 if delta == 0: return image
8
9 part1 = image.crop((0, 0, delta, ysize))
10 part2 = image.crop((delta, 0, xsize, ysize))
11 image.paste(part2, (0, 0, xsize-delta, ysize))
12 image.paste(part1, (xsize-delta, 0, xsize, ysize))
13
14 return image
3.3 几何变换。
3.3.1 简单的几何变换。
1 out = im.resize((128, 128)) #
2 out = im.rotate(45) #逆时针旋转 45 度角。
3 out = im.transpose(Image.FLIP_LEFT_RIGHT) #左右对换。
4 out = im.transpose(Image.FLIP_TOP_BOTTOM) #上下对换。
5 out = im.transpose(Image.ROTATE_90) #旋转 90 度角。
6 out = im.transpose(Image.ROTATE_180) #旋转 180 度角。
7 out = im.transpose(Image.ROTATE_270) #旋转 270 度角。
各个调整之后的图像为:
图片1:
图片2:
图片3:
图片4:
3.3.2 色彩空间变换。
convert() : 该函数可以用来将图像转换为不同色彩模式。
3.3.3 图像增强。
Filters : 在 ImageFilter 模块中可以使用 filter 函数来使用模块中一系列预定义的增强滤镜。
1 import ImageFilter
2 imfilter = im.filter(ImageFilter.DETAIL)
3 imfilter.show()
3.4 序列图像。
即我们常见到的动态图,最常见的后缀为 .gif ,另外还有 FLI / FLC 。PIL 库对这种动画格式图也提供了一些基本的支持。当我们打开这类图像文件时,PIL 自动载入图像的第一帧。我们可以使用 seek 和 tell 方法在各帧之间移动。
1 import Image
2 im.seek(1) # skip to the second frame
3
4 try:
5 while 1:
6 im.seek( im.tell() + 1)
7 # do something to im
8 except EOFError:
9 pass
3.5 更多关于图像文件的读取。
最基本的方式:im = Image.open("filename")
类文件读取:fp = open("filename", "rb"); im = Image.open(fp)
字符串数据读取:import StringIO; im = Image.open(StringIO.StringIO(buffer))
从归档文件读取:import TarIO; fp = TarIo.TarIO("Image.tar", "Image/test/lena.ppm"); im = Image.open(fp)
基本的 PIL 目前就练习到这里。其他函数的功能可点击 这里 进一步阅读。
Q2: 为什么python会显示错误?具体说明在下面。
init方法写错了,是双下划线,__init__
没有__init__方法,所以就没有参数。报错就是告诉你,你带了参数,但Dog类没有定义。
Q3: 如何使用python函数返回值
函数的尾部 return 要是用的返回值 def roll_dice(number=3, points=None): print('Choice points...') if points is None: points = [] while number 0: point = random.randrange(1, 7) points.append(point) number = number - 1 return points
Q4: python初学者
python类里roll函数Python的函数需要一个参数
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Dog(object):
def __init__(self,name,age):
self.name=name
self.age=age
def roll(scl):
print "it is rolling now"
def sit(self):
print "it is sitting now"
my_dog=Dog("David",12)
my_dog.sit()
my_dog.roll()
Q5: 如何用python写sql
python可以利用pymysql模块操作数据库。
什么是 PyMySQL?
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
PyMySQL 安装
在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。
PyMySQL 下载地址:。
如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:
$ pip3 install PyMySQL
如果你的系统不支持 pip 命令,可以使用以下方式安装:
1、使用 git 命令下载安装包安装(你也可以手动下载):
$ git clone cd PyMySQL/$ python3 setup.py install
2、如果需要制定版本号,可以使用 curl 命令来安装:
$ # X.X 为 PyMySQL 的版本号$ curl -L | tar xz$ cd PyMySQL*$ python3 setup.py install
$ # 现在你可以删除 PyMySQL* 目录
注意:请确保您有root权限来安装上述模块。
安装的过程中可能会出现"ImportError: No module named setuptools"的错误提示,意思是你没有安装setuptools,你可以访问 找到各个系统的安装方法。
Linux 系统安装实例:
$ wget python3 ez_setup.py
数据库连接
连接数据库前,请先确认以下事项:
您已经创建了数据库 TESTDB.
在TESTDB数据库中您已经创建了表 EMPLOYEE
EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
在你的机子上已经安装了 Python MySQLdb 模块。
如果您对sql语句不熟悉,可以访问我们的 SQL基础教程
实例:
以下实例链接 Mysql 的 TESTDB 数据库:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询 cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.data = cursor.fetchone()
print ("Database version : %s " % data)
# 关闭数据库连接db.close()
执行以上脚本输出结果如下:
Database version : 5.5.20-log
创建数据库表
如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# 关闭数据库连接db.close()
数据库插入操作
以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 插入语句sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""try: # 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()except: # 如果发生错误则回滚
db.rollback()
# 关闭数据库连接db.close()
以上例子也可以写成如下形式:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 插入语句sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', %s, '%s', %s)" % \ ('Mac', 'Mohan', 20, 'M', 2000)try: # 执行sql语句
cursor.execute(sql)
# 执行sql语句
db.commit()except: # 发生错误时回滚
db.rollback()
# 关闭数据库连接db.close()
以下代码使用变量向SQL语句中传递参数:
..................................user_id = "test123"password = "password"con.execute('insert into Login values( %s, %s)' % \ (user_id, password))..................................
数据库查询操作
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
fetchall(): 接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
实例:
查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 查询语句sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME %s" % (1000)try: # 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results: fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \ (fname, lname, age, sex, income ))except: print ("Error: unable to fetch data")
# 关闭数据库连接db.close()
以上脚本执行结果如下:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
数据库更新操作
更新操作用于更新数据表的的数据,以下实例将 TESTDB 表中 SEX 为 'M' 的 AGE 字段递增 1:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 更新语句sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')try: # 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()except: # 发生错误时回滚
db.rollback()
# 关闭数据库连接db.close()
删除操作
删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 删除语句sql = "DELETE FROM EMPLOYEE WHERE AGE %s" % (20)try: # 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()except: # 发生错误时回滚
db.rollback()
# 关闭连接db.close()
执行事务
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
实例
实例(Python 3.0+)
# SQL删除记录语句sql = "DELETE FROM EMPLOYEE WHERE AGE %s" % (20)try: # 执行SQL语句
cursor.execute(sql)
# 向数据库提交
db.commit()except: # 发生错误时回滚
db.rollback()
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。
错误处理
DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:
异常
描述
Warning 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
Error 警告以外所有其他错误类。必须是 StandardError 的子类。
InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
DatabaseError 和数据库有关的错误发生时触发。 必须是Error的子类。
DataError 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。
OperationalError 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。
IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternalError 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。
ProgrammingError 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。
NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
roll函数Python的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python roll函数、roll函数Python的信息别忘了在本站进行查找喔。






