如何在Python中为石头剪刀布选项分配指定百分比概率?
为石头剪刀布游戏的选项分配自定义概率
问题背景
现有一款石头剪刀布Python程序,通过random.choice()让电脑随机选择三个选项。需求是添加第四个选项,且该选项的选中概率仅为1%,其余三个选项均分剩下的99%概率。
解决方案
使用Python的random.choices()函数替代random.choice(),该函数支持通过weights参数为每个选项指定权重,以此实现自定义概率分配。
修改后的完整代码
import random # 更新选项列表,添加第四个选项(示例为"SuperMove") possible_actions = ["Rock", "Paper", "Scissors", "SuperMove"] # 分配权重:三个原有选项各占33%,新选项占1%(权重总和为100,对应百分比) weights = [33, 33, 33, 1] user_action = input("Choose: Rock, Paper, Scissors, SuperMove") # 使用random.choices(),注意该函数返回列表,取第一个元素 computer_action = random.choices(possible_actions, weights=weights, k=1)[0] print(f"\nYou Chose {user_action}, Computer Chose {computer_action}.\n") if user_action == computer_action: print(f"Both player chose {user_action}. You Tied!") elif user_action == "Rock": if computer_action == "Scissors": print("Rock smashes scissors! You win!") elif computer_action == "Paper": print("Paper covers rock, you lose!") else: # 处理电脑选SuperMove的情况 print("Computer used SuperMove! You lose!") elif user_action == "Paper": if computer_action == "Rock": print("Paper covers rock, You Win!") elif computer_action == "Scissors": print("Scissors cut the paper into shreds! You lose!") else: print("Computer used SuperMove! You lose!") elif user_action == "Scissors": if computer_action == "Paper": print("Scissors cut the paper into shreds! You win!") elif computer_action == "Rock": print("Rock smashes scissors! You lose!") else: print("Computer used SuperMove! You lose!") elif user_action == "SuperMove": # 可自定义SuperMove的胜负规则 if computer_action != "SuperMove": print("Your SuperMove crushes everything! You win!")
关键说明
random.choices(population, weights=None, k=1):population是待选列表,weights是对应每个元素的权重(权重值无需严格等于百分比,只需比例正确,比如也可以用[99,99,99,3],比例和[33,33,33,1]一致),k是选择的数量,这里取1个所以取列表第一个元素。- 权重分配逻辑:总概率100%,新选项占1%,剩下99%由三个原有选项平分,每个占33%,因此权重设置为
[33,33,33,1]。 - 代码中补充了新选项的胜负判断逻辑,可根据需求自行调整规则。
内容的提问来源于stack exchange,提问作者RyanCSB
相关产品推荐
相关产品推荐

