学习Python第七天
课后作业
注释部分的代码可取代他上面的代码,只是不同的写法
import random
porke_numbers = [i for i in range(2, 11)]
flower_porkes = ['A', 'J', 'Q', 'K']
porke_numbers += flower_porkes
#确定相同花色的牌种扑克牌种类,2~10、AJKQ
# print(porke_numbers)
porke_nums = []
color_porkes = ['♥', '♣', '♦', '♠']#花色,使用计算机自带输入法可以打出来
for color_porke in color_porkes:#遍历花色
for porke_number in porke_numbers:#遍历扑克数字
porke_nums.append(color_porke + str(porke_number))#将花色和数字组合
# porke_nums.append(f'{color_porke}{porke_number}')
# porke_nums = [f'{color_porke}{porke_number}' for color_porke in color_porkes for porke_number in porke_numbers ]
porke_nums.append('大王')
porke_nums.append('小王')
# print(porke_nums)
random.shuffle(porke_nums)#使用打乱列表元素顺序
# print(porke_nums)
# print(len(porke_nums))
# player1.append(porke_nums[51:54])
# print(player1)
player1 = []
player2 = []
player3 = []
for i in range(0, len(porke_nums) - 3, 3):#减三将后面三张给第一个玩家
player1.append(porke_nums[i])# 循环一次取三张扑克,所以循环步长为三
player2.append(porke_nums[i + 1])
player3.append(porke_nums[i + 2])
player1 += porke_nums[52:54]#,将后面三张给第一个玩家
# for _ in range(17):
# player1.append(porke_nums.pop())
# player2.append(porke_nums.pop())
# player3.append(porke_nums.pop())
# player1 += porke_nums
# player1.extend(porke_nums)
player1.sort(key=lambda x: x[1:])#这里可以不知道原理,知道作用就行,后面才会学到,作用是比较发到手里扑克大小将其整理好
player2.sort(key=lambda x: x[1:])
player3.sort(key=lambda x: x[1:])
for card in player1:
print(card, end=' ')
print()
for card in player2:#遍历玩家手里的扑克将其输出
print(card, end=' ')
print()
for card in player3:
print(card, end=' ')
print()
#简化输出格式
简化输出,用法循环简化代码
下面是关于炸金花的代码(17个人玩炸金花),与上面大同小异,只是简化代码,用循环简化代码
import random
porke_numbers = [i for i in range(2, 11)]
flower_porkes = ['A', 'J', 'Q', 'K']
porke_numbers += flower_porkes
# print(porke_numbers)
porke_nums = []
color_porkes = ['♥', '♣', '♦', '♠']
for color_porke in color_porkes:
for porke_number in porke_numbers:
porke_nums.append(color_porke + str(porke_number))
# porke_nums.append(f'{color_porke}{porke_number}')
# porke_nums = [f'{color_porke}{porke_number}' for color_porke in color_porkes for porke_number in porke_numbers ]
porke_nums.append('大王')
porke_nums.append('小王')
# print(porke_nums)
random.shuffle(porke_nums)
players = [[] for _ in range(17)]
for _ in range(3):
for player in players:# 遍历循环玩家,循环发牌
player.append(porke_nums.pop())
for player in players: # 遍历循环玩家,整理发到手上的扑克
player.sort(key=lambda x: x[1:])
for card in player:# 循环输出玩家手里的扑克
print(card, end=' ')
print()
列表的运用
- 保存五个学生的三门课程成绩
import random
# 导入包
names = ['鲁班七号', '铠', '周瑜', '孙悟空', '牛魔']
coures = ['语文', '英语', '数学']
score = [[random.randrange(60, 100) for _ in range(3)] for _ in range(5)]
# for _ in range(5)五次循环形成五个列表对应五个学生, random.randrange(60, 100) for _ in range(3)列表里面在循环三次对应三门课程,上面这个代码就相当于这两个代码的组合
for i, name in enumerate(names):
# 遍历大列表和对应坐标
for j, coure in enumerate(coures):
# 遍历大列表里面的小列表和小列表对应坐标
print(f'{name}的{coure}成绩是{score[i][j]}分')
# score[i][j]对应大列表里面小列表的元素
- 计算每个同学平均成绩、各科最高分、最低分
import random
names = ['鲁班七号', '铠', '周瑜', '孙悟空', '牛魔']
coures = ['语文', '英语', '数学']
scores = [[random.randrange(60, 100) for _ in range(len(coures))] for _ in range(len(names))]
for i, name in enumerate(names):
for j, coure in enumerate(coures):
print(f'{name}的{coure}成绩是{scores[i][j]}分')
print(f'{name}的平均成绩是{sum(scores[i]) // len(coures)}分')
print(f'{name}的最高成绩是{max(scores[i])}分,最低成绩是{min(scores[i])}')
for j, coure in enumerate(coures):
temp = [scores[i][j] for i in range(len(names))]
# 将每一门课程的分数放在一个列表里
print(f'{coure}都最高分:{max(temp)}')
print(f'{coure}都最低分:{min(temp)}')
元组
元组是不可变的容器
- 首先是简单的了解它的工
fruit = ('apple', )
# 一元组一定要有逗号否则会被认为是一个字符串
fruits1 = ('apple', 'banana', 'grape')
print(type(fruit))
# 重复运算
print(fruits1 * 3)
# 成员运算
print('apple' in fruits1)
print('apple' not in fruits1)
# 合并运算
fruits2 = ('pitaya', 'litchi')
fruits3 = fruits2 + fruits1
print(fruits3)
# 索引和切片
print(fruits3[4], fruits3[1])
print(fruits3[2:4])
print(fruits3[1:4:2])
print(fruits3[::-1])
# 元组为二的两个功能
print(fruits3.index('apple'))
# 查找元素所在的索引
print(fruits3.count('apple'))
# 计算元素在元组中出现的次数
一定要自己敲一遍代码观察它的输出结果,才能充分了解其功能
课后作业
-
一个列表中有很多重复元素,写一段代码去掉列表中的重复元素。
-
有一个放整数的列表,找出列表中出现次数最多的元素。
nums = [2, 3, 4, 5, 6, 7, 8, 9, 4, 5, 5, 3, 3, 8, 6, 9]
counts = []
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[j] == nums[i]:
counts.append(nums[j])
for count in counts:
nums.remove(count)
for count in counts:
if count not in nums:
nums.append(count)
print(nums)
nums = [2, 3, 4, 4, 4, 5, 6, 7, 8, 9, 4, 5, 5, 3, 3, 8, 6, 3, 3]
a = 0
sum = 0
for num in nums:
if a < nums.count(num):
a = nums.count(num)
sum = num
print(f',出现最多的元素是{sum}输出了{a}次')