按百分比捕鱼 - pygame

如何解决按百分比捕鱼 - pygame

我想创建一个钓鱼游戏。每当玩家按下按钮时,游戏就会返回一条鱼。 每条鱼都有一个百分比(小鱼,45%;中鱼,25%;大鱼,15%;巨大的,4.9%;鲨鱼,0.1)。

fish_size = [("small",45),("medium",25),("big",15),("huge",4.9),("shark",0.1)]

如何按百分比从该列表中随机获取一条鱼?

解决方法

如果您有一个可供选择的元素列表(在您的情况下是鱼的类型)和一个权重列表(不必归一化为 1 或 100%),您可以使用choices 内置包的 random 方法。有关详细信息,请参阅 its documentation

示例:

>>> import random
>>> fish = ['small','medium','big','huge','shark']
>>> weights = [45,25,15,4.9,0.1]
>>> random.choices(fish,weights)[0]
'medium'

请注意,您可以使用 choices 返回多个元素(使用可选的 k 关键字参数)。因此,choices 返回一个列表。默认情况下为 k=1,因此列表中仅返回一个值。将 [0] 添加到函数调用的末尾会自动从列表中提取此值。

,

您可以执行以下操作:

#   Reconstructed via infocmp from file: /opt/sw/python/20201012/anaconda3/envs/i38/share/terminfo/x/xterm-256color
xterm-256color|xterm with 256 colors,am,bce,ccc,km,mc5i,mir,msgr,npc,xenl,colors#0x100,cols#80,it#8,lines#24,pairs#0x10000,acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,bel=^G,blink=\E[5m,bold=\E[1m,cbt=\E[Z,civis=\E[?25l,clear=\E[H\E[2J,cnorm=\E[?12l\E[?25h,cr=\r,csr=\E[%i%p1%d;%p2%dr,cub=\E[%p1%dD,cub1=^H,cud=\E[%p1%dB,cud1=\n,cuf=\E[%p1%dC,cuf1=\E[C,cup=\E[%i%p1%d;%p2%dH,cuu=\E[%p1%dA,cuu1=\E[A,cvvis=\E[?12;25h,dch=\E[%p1%dP,dch1=\E[P,dim=\E[2m,dl=\E[%p1%dM,dl1=\E[M,ech=\E[%p1%dX,ed=\E[J,el=\E[K,el1=\E[1K,flash=\E[?5h$<100/>\E[?5l,home=\E[H,hpa=\E[%i%p1%dG,ht=^I,hts=\EH,ich=\E[%p1%d@,il=\E[%p1%dL,il1=\E[L,ind=\n,indn=\E[%p1%dS,initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,invis=\E[8m,is2=\E[!p\E[?3;4l\E[4l\E>,kDC=\E[3;2~,kEND=\E[1;2F,kHOM=\E[1;2H,kIC=\E[2;2~,kLFT=\E[1;2D,kNXT=\E[6;2~,kPRV=\E[5;2~,kRIT=\E[1;2C,ka1=\EOw,ka3=\EOy,kb2=\EOu,kbs=^H,kc1=\EOq,kc3=\EOs,kcbt=\E[Z,kcub1=\EOD,kcud1=\EOB,kcuf1=\EOC,kcuu1=\EOA,kdch1=\E[3~,kend=\EOF,kent=\EOM,kf1=\EOP,kf10=\E[21~,kf11=\E[23~,kf12=\E[24~,kf13=\E[1;2P,kf14=\E[1;2Q,kf15=\E[1;2R,kf16=\E[1;2S,kf17=\E[15;2~,kf18=\E[17;2~,kf19=\E[18;2~,kf2=\EOQ,kf20=\E[19;2~,kf21=\E[20;2~,kf22=\E[21;2~,kf23=\E[23;2~,kf24=\E[24;2~,kf25=\E[1;5P,kf26=\E[1;5Q,kf27=\E[1;5R,kf28=\E[1;5S,kf29=\E[15;5~,kf3=\EOR,kf30=\E[17;5~,kf31=\E[18;5~,kf32=\E[19;5~,kf33=\E[20;5~,kf34=\E[21;5~,kf35=\E[23;5~,kf36=\E[24;5~,kf37=\E[1;6P,kf38=\E[1;6Q,kf39=\E[1;6R,kf4=\EOS,kf40=\E[1;6S,kf41=\E[15;6~,kf42=\E[17;6~,kf43=\E[18;6~,kf44=\E[19;6~,kf45=\E[20;6~,kf46=\E[21;6~,kf47=\E[23;6~,kf48=\E[24;6~,kf49=\E[1;3P,kf5=\E[15~,kf50=\E[1;3Q,kf51=\E[1;3R,kf52=\E[1;3S,kf53=\E[15;3~,kf54=\E[17;3~,kf55=\E[18;3~,kf56=\E[19;3~,kf57=\E[20;3~,kf58=\E[21;3~,kf59=\E[23;3~,kf6=\E[17~,kf60=\E[24;3~,kf61=\E[1;4P,kf62=\E[1;4Q,kf63=\E[1;4R,kf7=\E[18~,kf8=\E[19~,kf9=\E[20~,khome=\EOH,kich1=\E[2~,kind=\E[1;2B,kmous=\E[<,knp=\E[6~,kpp=\E[5~,kri=\E[1;2A,mc0=\E[i,mc4=\E[4i,mc5=\E[5i,meml=\El,memu=\Em,mgc=\E[?69l,oc=\E]104\007,op=\E[39;49m,rc=\E8,rep=%p1%c\E[%p2%{1}%-%db,rev=\E[7m,ri=\EM,rin=\E[%p1%dT,ritm=\E[23m,rmacs=\E(B,rmam=\E[?7l,rmcup=\E[?1049l\E[23;0;0t,rmir=\E[4l,rmkx=\E[?1l\E>,rmm=\E[?1034l,rmso=\E[27m,rmul=\E[24m,rs1=\Ec\E]104\007,rs2=\E[!p\E[?3;4l\E[4l\E>,sc=\E7,setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,sgr0=\E(B\E[m,sitm=\E[3m,smacs=\E(0,smam=\E[?7h,smcup=\E[?1049h\E[22;0;0t,smglr=\E[?69h\E[%i%p1%d;%p2%ds,smir=\E[4h,smkx=\E[?1h\E=,smm=\E[?1034h,smso=\E[7m,smul=\E[4m,tbc=\E[3g,u6=\E[%i%d;%dR,u7=\E[6n,u8=\E[?%[;0123456789]c,u9=\E[c,vpa=\E[%i%p1%dd,

返回示例


fish_size = [("small",45),("medium",25),("big",15),("huge",5),("shark",1)]
helper = []
for x in fish_size:
    for y in range(x[1]):
        helper.append(x[0])

rand = random.randint(0,len(helper)-1)

print(helper[rand])

唯一的问题是,您不能使用像 0.1 这样的浮点百分比,但除此之外它运行良好。它有效是因为百分比越高,帮助列表中的元素就越多。如果你然后得到一个兰特,如果百分比更高,则概率更高

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?