2022.12.12-Python100day-day03-review

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)}')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值