ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

学习python的第二周的第二天

2021-07-30 19:29:47  阅读:133  来源: 互联网

标签:10 fruits3 python 元组 第二天 第二周 print 100 1000


学习python的第二周

——第二天

练习:

  • homework01 – 用一个列表保存54张扑克牌,先洗牌,
    再按斗地主的发牌方式把牌发给三个玩家,多的3张牌给第一个玩家(地主),最后把每个玩家手上的牌显示出来。
import random

suits = [ '♠' , '♥' , '♣' , '♦' ]
faces = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10','J', 'Q', 'K']
# 列表生成式
cards = [f'{suit}{face}' for suit in suits for face in faces]
'''等于
for suit in suits:
	for face in faces:
		cards = [f'{suit}{face}']
'''

cards.append('大王')
cards.append('小王')
# 随机打乱列表的元素
random.shuffle(cards)

players = [[] for _ in range(3)]  # 创造列表生成式
for _ in range(17):
    for i in range(3):
        # pop()随机删除一个元素并返回该值
        players[i].append(cards.pop())
players[0].extend(cards)

for player in players:   # 列表循环生成式的寻找元素
    player.sort(key = lambda x: x[1:])
    for card in player:
        print(card, end=' ')
    print()
  • example01- 保存5个学生,3门课程的成绩

    import random
    
    names = ('关羽', '张飞', '赵云', '马超', '黄忠')
    courses = ('语文', '数学', '英语')
    scores = [[random.randrange(60,101) for _ in range(len(courses))] for _ in len(nums)]
    print(scores)
    # for i, name in enumerate(names):
    #     for j, course in enumerate(courses):
    #         print(f'{name}的{course}成绩: {scores[i][j]}')
    
  • 统计每个学生的平均成绩

    for i,name in enumerate(names):
    	print(f'{name}平均成绩为{sum(scores[i])/len(couses):.1f}')
        # scores是二元组,但是可以一元组形式存在
    
  • 统计每门课的最高分和最低分

    for j, course in enumerate(courses):
        temp = [scores[i][j] for i in range(len(names))]
        #  for i in range(len(names)):
        #    temp.append(scores[i][j])
        print(f'{course}的最高分: {max(temp)}')
        print(f'{course}的最低分: {min(temp)}')
    

元组

不可变的容器,元组也是多个元素按照一定的顺序构成的序列。。元组和列表的不同之处在于,元组是不可变类型,这就意味着元组类型的变量一旦定义,其中的元素不能再添加或删除,而且元素的值也不能进行修改。定义元组通常使用()字面量语法,也建议大家使用这种方式来创建元组。

fruits1 = ('apple', 'banana', 'grape')
print(type(fruits1))
# 其中命名变量时,不能命名为tuple(关键字,tuple()函数)
# 重复运算
print(fruits1 * 3)
# 这里不i改变元组本身

# 成员运算
print('apple' in fruits1)
print('grape' not in fruits1)
# 看代码是否在元组里,输出结果True or Flase

# 找元素的数量
print(len(fruitsl)      # 3 
      
# 合并运算
fruits2 = ('pitaya', 'litchi')
fruits3 = fruits1 + fruits2
print(fruits3)
      
# 索引和切片
print(fruits1[2],fruits1[-1]) # grape grape
# TypeError: 'tuple' object does not support item assignment
# fruits3[4] = 'shit'
      
print(fruits3[1:4])  # 从1取到位置4之前
print(fruits3[1:4:2])  # 从1取到位置4,并步长为2
print(fruits3[::-1])  # 将列表反转
# tuple[起始位置:终止位子(不取最后一个):步长或反取值]

# 索引和求取该值出现次数
print(fruits3.index('apple'))
# 取该元素所在位子下标
print(fruits3.count('apple'))
#  统计该元素出现次数

由于元组是不可变的容器,当执行该语句时就会报错,并提示元组不具备这样的属性。

定义一元组时,需要在元素后面加一个‘’,这样才是定义数组,不然就是输入什么类型就是什么类型,例子如下

# AttributeError: 'tuple' object has no attribute 'append'
# fruits3.append('durian')
# AttributeError: 'tuple' object has no attribute 'pop'
# fruits3.pop(0)
# AttributeError: 'tuple' object has no attribute 'remove'
# fruits3.remove('banana')

# 空元组
a = ()
print(type(a))    # <class 'tuple'>
# 不是元组
b = ('hello')
print(type(b))    # <class 'str'>
c = (100)
print(type(c))    # <class 'int'>
# 一元组
d = ('hello', )
print(type(d))    # <class 'tuple'>
e = (100, )
print(type(e))    # <class 'tuple'>

元组的应用场景

打包和解包操作。

#  打包

a, *_, b = 5, 10, 15, 20, 25
print(a)     # 5
print(c)	 # 25
# 可以得出处两边所有值外打包了中间的值,并形成列表

*a, b, c = 5, 10, 15, 20, 25
print(a)
print(b)
print(c)
#  [5, 10, 15] 20 25

a, b, *c = 5, 10, 15, 20, 25
print(a)
print(b)
print(c)
# 5 10 [15, 20, 25]


##解包
a = 1, 10, 100, 1000
# i, j, k = a             # ValueError: too many values to unpack (expected 3)
# i, j, k, l, m, n = a    # ValueError: not enough values to unpack (expected 6, got 4)

a = 1, 10, 100, 1000
i, j, *k = a
print(i, j, k)          # 1 10 [100, 1000]
i, *j, k = a
print(i, j, k)          # 1 [10, 100] 1000
*i, j, k = a
print(i, j, k)          # [1, 10] 100 1000
*i, j = a
print(i, j)             # [1, 10, 100] 1000
i, *j = a
print(i, j)             # 1 [10, 100, 1000]
i, j, k, *l = a
print(i, j, k, l)       # 1 10 100 [1000]
i, j, k, l, *m = a
print(i, j, k, l, m)    # 1 10 100 1000 []
交换
# a = b, b = a`ROT_TWO`
a, b = b, a

# ROT_THREE
a, b, c = b, c, a
a = '\'hello, \a\tworld\b\b\''
b = "\"hello, \n\nworld\""
# '\n'转行 '\t'空格 、'\b'删除最后一个元素,有几个\b就删几个 \是转义的意思
c = '''
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
'''

print(a)
print(b)
print(c)

# 原始字符串(每个字符都是它原始的含义,没有转移字符)
d = r'c:\Users\Administrator\abc\hello.py'
print(d)

# 带占位符的字符串(格式化字符串)
e = f'文件路径: {d}'
print(e)

s1 = '\141\142\143\x61\x62\x63'
# 二进制 x开头的十进制
print(s1)
# ASCII ---> GB2312 ---> GBK ---> Unicode(UTF-8)
s2 = '\u9a86\u660a'
print(s2)

总结

列表和元组都是容器型的数据类型,即一个变量可以保存多个数据。列表是可变数据类型元组是不可变数据类型,所以列表添加元素、删除元素、清空、排序等方法对于元组来说是不成立的。但是列表和元组都可以进行拼接成员运算索引和切片这些操作,就如同之前讲到的字符串类型一样,因为字符串就是字符按一定顺序构成的序列,在这一点上三者并没有什么区别

标签:10,fruits3,python,元组,第二天,第二周,print,100,1000
来源: https://blog.csdn.net/qq_58307515/article/details/119253559

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有