###################### 元组的创建 ################################
# 元组: 带了紧箍咒的列表;
# 不可变数据类型,没有增删改查;
# 可以存储任意数据类型;
li = [1, 2, 3]
li.append(4)
print(li)
# 定义元组
t = (1, 2.1, 2e+10, True, 2j+3, [1,2,3],(1,2,3) )
print(t, type(t))
# 如果元组里面包含可变数据类型, 可以间接修改元组内容;
t1 = ([1,2,3], 4)
t1[0].append(4)
print(t1)
#
t2 = ()
t3 = tuple([])
# 元组如果只有一个元素, 后面一定要加逗号, 否则数据类型不确定;
t4 = ('hello')
t5 = ('hello',)
print(type(t2), type(t3), type(t4), type(t5))
######################### 元组的特性 #############################
# 索引, 切片, 重复, 连接, 成员操作符
allowUsers = ('root', 'westos', 'fentiao')
allowPasswd = ('123', '456', '789')
print(allowUsers[0])
print(allowUsers[-1])
print(allowUsers[1:])
print(allowUsers[2:])
print(allowUsers[:-1])
print(allowUsers[::-1])
# 重复
print(allowUsers*3)
# 连接,
print(allowUsers + ('fensi', 'fendai'))
# 成员操作符
print('westos' in allowUsers)
print('westos' not in allowUsers)
# for循环
print("显示".center(50, '*'))
for user in allowUsers:
print("白名单用户:%s" %(user))
print("索引显示".center(50, '*'))
# # for循环并且求索引(枚举)
for index,user in enumerate(allowUsers):
print("第%d个白名单用户: %s" %(index+1, user))
# zip: 集和用户名和密码两个元组, 元素之间一一对应
for user, passwd in zip(allowUsers, allowPasswd):
print(user,':', passwd)
########################### 元组常用方法 ##########################
t = (1,2, 'a', 'c', 'a')
print(t.index('c'))
print(t.count('a'))
########################### 元组应用场景 ###########################
#1. 变量交换数值:
a = 1
b = 2
b,a = a,b
# 1. 先把(a,b)封装成一个元组, (1,2)
# 2. b,a = a,b ======> b,a =(1,2)
# 3. b = (1,2)[0], a=(1,2)[1]
print(a,b)
# 打印变量值
name = 'westos'
age = 10
t = (name, age)
print("name: %s, age: %d" %(name, age))
print("name: %s, age: %d" %t)
# 元组的赋值: 有多少个元素, 就用多少个变量接收
t = ('westos', 10, 100)
name, age,score = t
print(name, age, score)
############################ 去掉最高分最低分求平均成绩 ####################
scores = (100, 89, 45, 78, 65)
# 先对元组进行排序
# scoresLi = list(scores)
# scoresLi.sort()
# print(scoresLi)
scores = sorted(scores) #内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
# python3中
minScore, *middleScore, maxScore = scores
print(minScore, middleScore, maxScore)
print("最终成绩为: %.2f" %(sum(middleScore)/len(middleScore)))