Python入门之(4.2)元组

本文介绍了Python中元组的基本概念、创建与使用方法,并通过一个发牌模拟程序实例展示了元组的应用。元组作为不可变序列,在某些场景下比列表更适用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

元组

1.1 元组的创建和使用

1.2 不可变和可变对象


元组

元组与列表类似,也是元素的有序序列。元组与列表的区别是:元组存储的值不能被修改,即这些数据值是不可改变的。元组中没有append()、extend()和insert()方法。除此之外,列表中的其他函数和方法对元组同样适用。

元组可以当成一个独立的对象使用,也可以通过索引方式引用其他任何元素。

1.1 元组的创建和使用

1.元组的创建

元组的定义通常是由逗号分隔,或由圆括号括住的一个序列。列表是用方括号括住。

例如:

t1=('month','year',1997,2000)  #用圆括号括住多个用逗号分隔的元素
t2=(1,2,3,4,5)
t3='a','b','c','d'             #多个用逗号分隔的元素,输出时自动加上圆括号

注意:

  1. 元组中数据的类型可以不同;
  2. t=()表示创建一个空元组,而不是表达式;
  3. 创建只有一个元素的元组时,语句的末尾要加逗号,如t='a',或t=('a',);
  4. 可以使用tuple()函数把一个列表转换为元组,如t1=[1,2,3,4,5],t2=tuple(t1)。

对于上面注意中的第3点,如果末尾不加逗号,就没有成功创建一个元组。例如:

t1='a'
t2='a',
t3=('a')
t4=('a',)

print(t1,end='\t')
print(t2,end='\t')
print(t3,end='\t')
print(t4,end='\t')

执行结果为:

E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/ssss.py
a	('a',)	a	('a',)	
Process finished with exit code 0

 

2.元组的访问和切片

元组内元素的访问和切片与列表一致。通过单个索引,可以获得该索引位置的元素,但是只能读,不能修改。通过切片,可以获得由若干个元素构成的子元组。

3.元组操作符

元组对+和*的操作符与字符串相似。其中,+用于合并元组,*用于重复元组。成员运算符in和not in用来测试元素是否在元组中。使用方法见4.1节。

4.删除整个元组

虽然元组的元素不能修改,但是可以用del元组名来删除整个元组。

5.元组的函数和方法

在列表的函数和方法中,除append()、extend()和insert()这3种方法之外,其他函数和方法都可以用于元组。使用方法见4.1节。

1.2 不可变和可变对象

对象是一个可以存储数据并且具有数据操纵方法的实体。数值、字符串、列表和元组都是对象。当使用赋值语句创建一个变量后,赋值号之后的值就成为内存中的一个对象,变量名(引用)指向该对象。修改一个列表是在该对象所在空间中完成。当一个变量要修改的值是数值、字符串或元组时,Python会分配一个新的内存空间存储新值,并把此对象赋值给该变量。

因此,列表相当于原地修改,但是数值、字符串和元组不是。能够原地修改的对象称为可变的,不能原地修改的对象是不可变的。

编写一个Python程序,模拟扑克游戏的发牌,两副牌,4个人玩。

程序如下:

import random
print('扑克游戏发牌模拟')
#定义牌的数字元组
ranks=('2','3','4','5','6','7','8','9','10','J','Q','K','A')
#定义牌的花色元组
suits=('黑桃','红桃','方块','梅花')
#通过列表解析,把2个元组组合在一起,生成新的列表
puke=[(x,y) for x in suits for y in ranks]
pai=puke*2                         #两副牌
cardRand=random.sample(pai,104)    #使用随机函数打乱扑克牌的顺序
#定义玩家列表,存放所分发的牌
play1=[]
play2=[]
play3=[]
play4=[]
#洗好的牌按顺序分发给4个玩家,模拟发牌
for i in range(26):
    play1.append(cardRand.pop())
    play2.append(cardRand.pop())
    play3.append(cardRand.pop())
    play4.append(cardRand.pop())
play1.sort(key=lambda x:x[0])   #按花色对分到的牌排序
play2.sort(key=lambda x:x[0])
play3.sort(key=lambda x:x[0])
play4.sort(key=lambda x:x[0])

print('玩家1的牌')
#输出玩家1的牌,每行输出6个数据
i=1
for each in play1:
    print(each,end=',')
    if i%6==0:
        print()
    i=i+1
print('\n玩家2的牌')
i=1
for each in play2:
    print(each,end=',')
    if i%6==0:
        print()
    i=i+1
print('\n玩家3的牌')
i=1
for each in play3:
    print(each,end=',')
    if i%6==0:
        print()
    i=i+1
print('\n玩家4的牌')
i=1
for each in play4:
    print(each,end=',')
    if i%6==0:
        print()
    i=i+1

运行结果:

E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/ssss.py
扑克游戏发牌模拟
玩家1的牌
('方块', '5'),('方块', 'J'),('方块', '2'),('方块', '6'),('方块', '10'),('方块', 'Q'),
('方块', '8'),('方块', 'A'),('梅花', '10'),('梅花', '7'),('梅花', 'A'),('梅花', '7'),
('梅花', 'K'),('梅花', '2'),('梅花', '3'),('红桃', 'A'),('红桃', '3'),('红桃', '5'),
('红桃', '2'),('红桃', '4'),('黑桃', 'K'),('黑桃', '7'),('黑桃', '3'),('黑桃', '2'),
('黑桃', '4'),('黑桃', '6'),
玩家2的牌
('方块', '9'),('方块', '8'),('方块', 'K'),('方块', '3'),('梅花', '9'),('梅花', 'A'),
('梅花', '4'),('红桃', '6'),('红桃', 'Q'),('红桃', '5'),('红桃', '7'),('红桃', 'J'),
('红桃', '9'),('红桃', '10'),('红桃', 'A'),('红桃', 'K'),('红桃', 'J'),('红桃', '4'),
('红桃', '9'),('黑桃', '5'),('黑桃', '10'),('黑桃', 'J'),('黑桃', '9'),('黑桃', 'K'),
('黑桃', 'Q'),('黑桃', '8'),
玩家3的牌
('方块', '2'),('方块', 'J'),('方块', 'Q'),('方块', '4'),('方块', '3'),('方块', '7'),
('方块', '9'),('梅花', 'Q'),('梅花', 'J'),('梅花', '4'),('梅花', 'J'),('梅花', 'Q'),
('梅花', '6'),('梅花', '5'),('梅花', 'K'),('梅花', '9'),('红桃', 'K'),('红桃', '7'),
('红桃', '10'),('红桃', '3'),('黑桃', '2'),('黑桃', '8'),('黑桃', '7'),('黑桃', 'A'),
('黑桃', 'Q'),('黑桃', '10'),
玩家4的牌
('方块', 'K'),('方块', 'A'),('方块', '4'),('方块', '10'),('方块', '7'),('方块', '5'),
('方块', '6'),('梅花', '2'),('梅花', '6'),('梅花', '3'),('梅花', '8'),('梅花', '5'),
('梅花', '10'),('梅花', '8'),('红桃', 'Q'),('红桃', '8'),('红桃', '2'),('红桃', '6'),
('红桃', '8'),('黑桃', '3'),('黑桃', '9'),('黑桃', 'A'),('黑桃', '5'),('黑桃', '4'),
('黑桃', 'J'),('黑桃', '6'),
Process finished with exit code 0

第十行中sample(list, k)返回一个长度为k新列表,新列表存放list所产生k个随机不重复的元素,在本题中,也就完成了将所有牌打乱的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值