内容正文:
任务4.3 元组
用扑克牌实现抽奖
4.3 元组——用扑克牌实现抽奖
【任务描述】
扑克(Poker)是人们常用的游戏工具,不同的花色和牌值可以辅助我们做很多有趣味的活动。现在班级里举行活动,小T作为抽奖环节的负责人,想充分利用扑克牌和Python程序来实现抽奖,大家和小T一起来思考:怎样利用扑克和程序实现抽奖。
小T是用这样的思路来组织抽奖环节的:班级中有50位同学,每位同学随机抽取一张扑克牌(除副牌大王和小王),小T用Python程序产生一副扑克牌(正牌),用随机数函数随机产生若干牌,手上牌与程序随机产生牌一致的同学就中奖了。
4.3 元组——用扑克牌实现抽奖
【任务分析】
一副扑克牌有54张牌,其中52张是正牌,52张正牌又均分为13张一组,由黑桃♠、红桃♥、梅花♣、方块◆四种花色组成,每组花色的牌包括从1~10(1通常表示为A)及J、Q、K标示的13张牌,我们可以用元组实现。花色、数字的组合可以得到这52张正牌,我们可以用如“♠J”的形式来表示一张牌。根据经验,解决该任务,我们可以用Python中的元组等数据类型。
4.3 元组——用扑克牌实现抽奖
扑克牌
黑桃♠、红桃♥、梅花♣、方块◆四种花色
1-10(1通常表示为A)以及J、Q、K标示的13张牌
班级活动抽奖:
入场抽扑克牌,python程序产生扑克牌,并随机抽奖
4.3 元组——用扑克牌实现抽奖
扑克牌(“♠J”)产生:
(1)定义两个元组分别存储花色和牌值
(2)循环嵌套这这两元组,进行两两组合,循环一次,产生一张扑克牌
(3)定义一个列表存储扑克牌,将新的扑克牌添加到此列表中
抽奖(“♠J”)环节:
(1)产生n个0~53的随机数
(2)把这些随机数作为下标,取出列表中扑克牌
4.3 元组——用扑克牌实现抽奖
4.3.1 元组的基本操作
4.3.2 元组的常用方法
4.3.3 元组任务实现——用扑克牌实现抽奖
4.3.2 元组的常用方法
4.3.2 元组的常用方法
元组元素的统计
元组元素的索引
1.元组元素的统计——count
tuple.count(x):返回x在元组tuple中出现的次数。
tup=(2008,'China',50,2008,'China','China')
print('元组中出现2008的个数为:', tup.count(2008))
print('元组中出现"China"的个数为:', tup.count('China'))
元组中出现2008的个数为: 2
元组中出现"China"的个数为: 3
4.3.2 元组的常用方法
【例4-42】元组元素的统计。
2.元组元素的索引——index
tuple.index(x):返回x在元组tuple中第一次出现的索引位置。
tup=(2008,'China',50,2008,'China','China')
print('元组中第一次出现2008的索引值为:',tup.index(2008))
print('元组中第一次出现"China"的索引值为:',tup.index('China'))
元组中第一次出现2008的索引值为: 0
元组中第一次出现"China"的索引值为: 1
4.3.2 元组的常用方法
【例4-43】元组元素的索引。
3.元组的长度——len
tuple.len(x):返回x元组元素个数。
tup=(2008,'China',50,2008,'China','China')
print('元组长度为:',len(tup))
元组长度为: 6
4.3.2 元组的常用方法
【例4-44】元组的长度。
4.3.2 元组的常用方法
边学边练:
有一个元组tup=(-1,2,10,-5,-7,2),请完成一下操作:
(1)返回元素2在元组中出现的次数。
(2)返回元组的长度。
(3)请将元组中的负数、非负数分别取出,组成两个新的元组输出。
4.3.3 元组任务的实现——用扑克牌实现抽奖
4.3.3 元组任务的实现——用扑克牌实现抽奖
【任务描述】
根据前面的思路,小T用Python程序产生一副扑克牌(正牌),在程序中输入本次要抽取的奖项个数n,用随机数函数随机产生n张牌,手上牌与程序随机产生牌一致的同学就中奖了。
4.3.3 元组任务的实现——用扑克牌实现抽奖
班级活动——用扑克牌实现抽奖
产生一副扑克牌?
黑桃♠、红桃♥、梅花♣、方块◆四种花色
1-10(1通常表示为A)以及J、Q、K标示的13张牌
怎样抽奖?
4.3.3 元组任务的实现——用扑克牌实现抽奖
【任务分析】
(1)定义两个元组分别存储花色和牌值。
(2)循环嵌套这两个元组,进行两两组合,每循环一次,产生一张扑克牌。
(3)定义一个列表存储扑克牌,将新的扑克牌添加到列表中,输出此列表。
(4)根据抽奖规则用随机数函数产生随机数,显示中奖牌。
注意:随机数函数可以用random.sample(sequence, k)实现,该函数返回从序列sequence中随机选择的k长度的列表,这里的sequence可以是列表、元组、字符串或集合;k是一个整数值,它指定抽取样本的长度。
将花色定义成一个元组
将牌值定义成一个元组
输出列表即扑克牌
遍历牌值结束
牌值和花色组合产生牌,添加到列表
Y
N
遍历花色结束
("3","4", "5", "6","7", "8", "9","10", "J", "Q","K", "A", "2")
("♠", "♥", "◆","♣")
'♠3'
随机抽奖
N
Y
(1)定义花色、牌值元组
(2)循环遍历牌值和花色,产生扑克牌,新的扑克牌添加到列表
(3)用随机数函数产生随机数,显示中奖的扑克牌
4.3.3 元组任务的实现——用扑克牌实现抽奖
4.3.3 元组任务的实现——用扑克牌实现抽奖
tupPokerType= ("♠", "♥", "◆","♣") # 定义花色元组
tupPokerNumber = ("3","4", "5", "6","7", "8", "9","10", "J", "Q","K", "A", "2") #定义牌值元组
(1)定义花色、牌值元组
4.3.3 元组任务的实现——用扑克牌实现抽奖
lstPoker = [] #定义牌列表
for i in tupPokerNumber: # 循环牌值元组
for j in tupPokerType: # 循环花色元组
lstPoker.append(j+i) # 产生一张新牌,添加到lstPoker末尾
(2)循环遍历牌值和花色,产生扑克牌,新的扑克牌添加到列表
4.3.3 元组任务的实现——用扑克牌实现抽奖
print(len(lstPoker)) # 输出牌列表长度,即产生的牌的张数
print(lstPoker)
52
['♠3', '♥3', '◆3', '♣3', '♠4', '♥4', '◆4', '♣4', '♠5', '♥5', '◆5', '♣5', '♠6', '♥6', '◆6', '♣6', '♠7', '♥7', '◆7', '♣7', '♠8', '♥8', '◆8', '♣8', '♠9', '♥9', '◆9', '♣9', '♠10', '♥10', '◆10', '♣10', '♠J', '♥J', '◆J', '♣J', '♠Q', '♥Q', '◆Q', '♣Q', '♠K', '♥K', '◆K', '♣K', '♠A', '♥A', '◆A', '♣A', '♠2', '♥2', '◆2', '♣2']
运行结果
4.3.3 元组任务的实现——用扑克牌实现抽奖
import random
n=int(input('请输入抽取奖项个数:')) # 输入需要抽取的奖项个数
lstWin=random.sample(lstPoker,n) # 在扑克牌列表中随机选取n个元素,即为中奖的扑克牌
print('本轮中奖:',lstWin)
(3)用随机数函数产生随机数,显示中奖的扑克牌
请输入抽取奖项个数:5
本轮中奖: ['♠5', '♠J', '◆3', '◆K', '♠A']
运行结果
$$