开启辅助访问      

站内搜索

搜索
热搜: 下载 1.19 1.20

Minecraft(我的世界)苦力怕论坛

[其他] 两种Python抽奖程序

发表于 2023-11-5 19:07:25 来自手机 | 显示全部楼层 |阅读模式 IP:浙江省
本帖最后由 用户名.txt 于 2023-11-5 19:14 编辑


源代码:
  1. import random
  2. AwardName=""
  3. prize=""
  4. WinnersNumber=0
  5. AwardNameList=[]
  6. PrizeList=[]
  7. WinnersNumberList=[]
  8. while AwardName!="q": #输入奖项名称、奖品以及中奖人数,直到输入奖项名称为“q”时停止
  9.     AwardName=input("请输入奖项名称:")
  10.     if AwardName=="q":
  11.         break
  12.     prize=input("请输入奖品:")
  13.     WinnersNumber=int(input("请输入中奖人数:"))
  14.     AwardNameList.append(AwardName)
  15.     PrizeList.append(prize)
  16.     WinnersNumberList.append(int(WinnersNumber))
  17. TotalWinnersNumber=0
  18. for WinnersNumber in WinnersNumberList: #获取中奖的总人数
  19.     TotalWinnersNumber+=WinnersNumber
  20. UserName=""
  21. UserList=[]
  22. while UserName!="q": #输入用户名,直到输入“q”时停止
  23.     UserName=input("请输入用户名:")
  24.     if UserName=="q":
  25.         break
  26.     UserList.append(UserName)
  27. UserNumber=len(UserList) #获取总人数
  28. WinnersList=[]
  29. for i in range(TotalWinnersNumber): #抽奖
  30.     n=random.randint(0, UserNumber-1)
  31.     while UserList[n] in WinnersList:
  32.         n=random.randint(0, UserNumber-1)
  33.     WinnersList.append(UserList[n])
  34. winners=""
  35. for AwardName,prize,WinnersNumber in zip(AwardNameList,PrizeList,WinnersNumberList): #输出结果
  36.     for i in range(WinnersNumber):
  37.         winners+=WinnersList[0]+" "
  38.         WinnersList.remove(WinnersList[0])
  39.     print(AwardName+":"+winners+","+"奖品:"+prize)
  40.     winners=""
复制代码

运行结果:
1.png


这个程序的思路来源于https://klpbbs.com/thread-112364-1-1.html
源代码:
  1. import random
  2. BonusPool=int(input("请输入奖池金额:"))
  3. UserName=""
  4. UserList=[]
  5. while UserName!="q": #输入用户名,直到输入“q”时停止
  6.     UserName=input("请输入用户名:")
  7.     if UserName=="q":
  8.         break
  9.     UserList.append(UserName)
  10. UserNumber=len(UserList) #获取总人数
  11. NewUserList=[]
  12. while len(NewUserList)!=UserNumber: #排序
  13.     n=random.randint(0,UserNumber-1)
  14.     while UserList[n] in NewUserList:
  15.         n=random.randint(0, UserNumber-1)
  16.     NewUserList.append(UserList[n])
  17. BonusList=[]
  18. n=0
  19. for i in range(UserNumber): #抽奖
  20.     n+=1
  21.     if BonusPool!=0:
  22.         if n!=UserNumber:
  23.             bonus=random.randint(1,BonusPool)
  24.             BonusList.append(bonus)
  25.             BonusPool-=bonus
  26.         else:
  27.             BonusList.append(BonusPool)
  28.     else:
  29.         BonusList.append(0)
  30. n=0
  31. for UserName,bonus in zip(NewUserList,BonusList): #输出结果
  32.     n+=1
  33.     print(str(n)+".",UserName,bonus)
复制代码

运行结果:
2.png

评分

参与人数 1铁粒 +30 收起 理由
我是redstone + 30 基础奖励

查看全部评分

苦力怕论坛,感谢有您~
回复

使用道具 举报

 楼主| 发表于 2024-3-25 22:47:59 来自手机 | 显示全部楼层 IP:浙江省
本帖最后由 用户名.txt 于 2024-3-25 22:55 编辑

2024.3.25补充
重写了这两个程序



  1. import random

  2. # 获取奖项名称和中奖人数
  3. prize_name_list = []
  4. winner_number_list = []
  5. while True:
  6.     prize_name = input("请输入奖项名称:")
  7.     if prize_name == "q":
  8.         break
  9.     winner_number = int(input("请输入中奖人数:"))
  10.     prize_name_list.append(prize_name)
  11.     winner_number_list.append(winner_number)

  12. # 获取用户列表
  13. user_list = []
  14. while True:
  15.     user_name = input("请输入用户名:")
  16.     if user_name == "q":
  17.         break
  18.     user_list.append(user_name)

  19. # 打乱用户列表
  20. random.shuffle(user_list)

  21. # 根据打乱后的用户列表生成获奖用户名单
  22. winner_list = []
  23. for winner_number in winner_number_list:
  24.     winner_list.append([user_list.pop(0) for n in range(winner_number)])

  25. # 输出结果
  26. for prize_name, winner_names in zip(prize_name_list, winner_list):
  27.     winner_name = "、".join(winner_names)
  28.     print(f"{prize_name}:{winner_name}"
复制代码




  1. import random

  2. # 获取奖池金额
  3. bonus_pool = int(input("请输入奖池金额:"))

  4. # 获取用户列表
  5. user_list = []
  6. while True:
  7.     user_name = input("请输入用户名:")
  8.     if user_name == "q":
  9.         break
  10.     user_list.append(user_name)

  11. # 打乱用户列表
  12. random.shuffle(user_list)

  13. # 抽奖
  14. winning_list = {user_name: 0 for user_name in user_list}
  15. for user_name in winning_list.keys():
  16.     if bonus_pool == 0:
  17.         break
  18.     bonus = random.randint(1, bonus_pool)
  19.     winning_list[user_name] += bonus
  20.     bonus_pool -= bonus

  21. # 输出结果
  22. n = 0
  23. for user_name, bonus in winning_list.items():
  24.     n += 1
  25.     print(f"{n}.{user_name}\t{bonus}")
复制代码
来自 3# 2024-3-25 22:47:59 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

发表于 2023-11-5 20:19:39 | 显示全部楼层 IP:浙江省
感觉 Python 比 C++ 抽象(
2# 2023-11-5 20:19:39 收起回复
nifpc 2023-11-7 11:57 IP:浙江省
回复
感觉command_block更抽象
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

发表于 6 天前 | 显示全部楼层 IP:广东省
好复杂啊,还是直接random.randint方便
4# 6 天前 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-4-27 20:32

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号