竞技场(无轮空)

游戏竞技场有8个角色,角色ID为1~8的正整数,每个角色带有战力数值,数值区间在1~100的正整数。
现随机打乱后两两配对进行淘汰赛,按照对阵图顺序执行,比较战力大小,大的那方进入下一轮,战力相同ID小的胜,直到决出冠亚季军。

首先生成带战力数值的角色列表:

# 生成带有战力数值的角色列表
def generate_characters():
    characters = []
    for i in range(1, 9):
        # 随机生成战力值
        strength = random.randint(1, 100)
        characters.append((i, strength))
    return characters

然后比较战力值,决出胜者:

# 比较两个角色的战力值
def compare_strength(char1, char2):
    if char1[1] > char2[1]:
        return char1
    elif char1[1] < char2[1]:
        return char2
    else:
        # 如果战力相同,ID小的胜
        return char1 if char1[0] < char2[0] else char2

生成单轮淘汰赛:

# 进行单轮淘汰赛,并打印比赛结果
def single_round(characters, round_number):
    # 随机配对
    pairs = random.sample(characters, len(characters))
    match_round = ["八进四", "四进二", "季军赛", "冠军赛"]
    print(match_round[round_number])

    matches = []
    for i in range(0, len(pairs), 2):
        match = compare_strength(pairs[i], pairs[i+1])
        print(f"比赛{(i+2)//2}: 角色{pairs[i][0]} 对战 角色{pairs[i+1][0]}, 角色{match[0]}获胜")
        matches.append(match)
    return matches

全部程序:

import random


# 生成带有战力数值的角色列表
def generate_characters():
    characters = []
    for i in range(1, 9):
        # 随机生成战力值
        strength = random.randint(1, 100)
        characters.append((i, strength))
    return characters


# 比较两个角色的战力值
def compare_strength(char1, char2):
    if char1[1] > char2[1]:
        return char1
    elif char1[1] < char2[1]:
        return char2
    else:
        # 如果战力相同,ID小的胜
        return char1 if char1[0] < char2[0] else char2


# 进行单轮淘汰赛,并打印比赛结果
def single_round(characters, round_number):
    # 随机配对
    pairs = random.sample(characters, len(characters))
    match_round = ["八进四", "四进二", "季军赛", "冠军赛"]
    print(match_round[round_number])

    matches = []
    for i in range(0, len(pairs), 2):
        match = compare_strength(pairs[i], pairs[i+1])
        print(f"比赛{(i+2)//2}: 角色{pairs[i][0]} 对战 角色{pairs[i+1][0]}, 角色{match[0]}获胜")
        matches.append(match)
    return matches

# 主程序
if __name__ == '__main__':
    # 生成角色列表
    characters = generate_characters()
    print("初始角色:")
    for char in characters:
        print(f"角色 ID {char[0]} 战力 {char[1]}")

    # 八进四淘汰赛
    round1_winners = single_round(characters, 0)

    # 四进二淘汰赛
    round2_winners = single_round(round1_winners, 1)

    # 转换成集合,使用集合的差操作,来获取季军赛的参加者
    round3 = list(set(round1_winners) - set(round2_winners))
    # 季军赛
    round3_winners = single_round(round3, 2)

    # 冠军赛
    final_winners = single_round(round2_winners, 3)

    # 确定冠军、亚军、季军
    champion = final_winners[0]
    runner_up = list(set(round2_winners) - set(final_winners))[0]
    third_place = round3_winners[0]

    print(f"冠军: 角色 {champion[0]} 战斗力 {champion[1]}")
    if runner_up:
        print(f"亚军: 角色 {runner_up[0]} 战斗力 {runner_up[1]}")
    if third_place:
        print(f"季军: 角色 {third_place[0]} 战斗力 {third_place[1]}")

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

algorithm6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值