1、冒泡排序
nums = [35, 12, 99, 58, 67, 42, 49, 31, 73]
第一轮找到了最大的99,找到最大的值之后,进行交换。
for i in range(0, len(nums)-1): if nums[i] > nums[i+1]: nums[i], nums[i+1] = nums[i+1], nums[i]
第二轮找到了最大的73,找到最大的值之后,进行交换。 for i in range(0, len(nums)-2): if nums[i] > nums[i+1]: nums[i], nums[i+1] = nums[i+1], nums[i]
接下来重复这样的过程,一直到最后,具体的过程。
nums = [35, 12, 99, 58, 67, 42, 49, 31, 73] for i in range(1, len(nums)): for j in range(0, len(nums)- i): if nums[i] > nums[i+1]: nums[i], nums[i+1] = nums[i+1], nums[i] print(nums)
2、鸡尾酒排序(双向排序)
按照上面的排序方式进行选择的话,如果遇到了列表存在部分有序的情况下,效率较低
nums = [2, 3, 4, 5, 6, 7, 8, 9, 1, 0]
可以添加swapped 方法来进行判断
for i in range(1, len(nums)): swapped = False for j in range(0, len(nums) - i): if nums[j] > nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] swapped = True if not swapped: break print(nums)
3、choice和choices方法的区别
names1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
print(random.choices(names1, k=1)) print(random.choice(names1))
都是完成随机取样的要求 choice 是只抽取一个元素 只是一个字符串 而不是列表 下面有两种方法的对比。
4、homework-1
用列表保存54张牌,先洗牌
在按照斗地主的方式将牌发给3个玩家 多的牌发给第一个玩家(地主)
最后将每个玩家手上的牌显示出来
思路:
4.1 创造出牌
cards = [] suites = ['黑桃', '红心', '草花', '方块'] faces = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] for suite in suites: for face in faces: cards.append(f'{suite}{face}')
cards.append('小王') cards.append('大王')
4.2 洗牌
random.shuffle(cards)
4.3 创建三个玩家
player_one = [] player_two = [] player_three = []
4.4 发牌 pop不放回的拿走一张牌 三个人轮流摸17轮次
for _ in range(17): player_one.append(cards.pop()) player_two.append(cards.pop()) player_three.append(cards.pop())
4.5 地主多拿了3张牌
player_one += cards
4.6 对3位玩家手上的牌进行展示
player_one.sort(key=lambda x:x[2:]) player_two.sort(key=lambda x:x[2:]) player_three.sort(key=lambda x:x[2:]) for card in player_one: print(card, end=' ') print() for card in player_two: print(card, end=' ') print() for card in player_three: print(card, end=' ') print()
另外一种实现方法:
suites = ['黑桃', '红心', '草花', '方块'] faces = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
生产卡牌
cards = [f'{suite}{face}' for suite in suites for face in faces]
cards.append('小王') cards.append('大王')
random.shuffle(cards)
创建3个玩家
players = [[] for _ in range(3)]
for _ in range(17): for player in players: player.append(cards.pop())
# 对两个列表进行合并 players[0].extend(cards)
for player in players: # sort 对列表中的元素进行排序 player.sort(key=lambda x: x[1:]) for card in player: print(card, end=' ') print()
5、homework-2 保存5个学生 3门课程的成绩
names = ['faker', 'bang', 'wolf'] courses = ['s5', 's6', 's7', 's8'] scores = [[random.randrange(50, 101) for _ in range(len(courses))] for _ in range(len(names))]
# 每个学生的成绩
for i, name in enumerate(names): for j, course in enumerate(courses): print(f'{name}的{courses} 成绩:{scores[i][j]}')
# 求每个学生的平均成绩 for i, name in enumerate(names): print(f'{name} 平均成绩:{sum(scores[i]) / 3:.1f}') # 统计每门课的最高分和最低分 # 这个是取到 所有人 s5的分数 temp = [scores[i][0] for i in range(len(names))] print(temp) print(f's5的最高分:{max(temp)}') print(f's5的最低分:{min(temp)}') 这个是取到 所有人 s6的分数 temp = [scores[i][1] for i in range(len(names))] 这个是取到 所有人 s7的分数 temp = [scores[i][2] for i in range(len(names))] for j, course in enumerate(courses): temp = [scores[i][0] for i in range(len(names))] print(f'{course}的最高分:{max(temp)}') print(f'{course}的最低分:{min(temp)}')