Python 计算概率的更好方法?
好的。我正在做的任务是通过改变赢得比赛的奖金来使比赛公平。 为了验证游戏是否更加公平,我在同一个程序中有几个相同代码的实例。这是因为代码使用了随机模块,通过打印每个片段,我将获得不同的输出,即使是相同的代码。 唯一的区别是函数的名称 现在,我在想:有没有更好的方法?同一个函数一次又一次地重复,这非常难看,它使代码由许多行组成 我对这方面还不太熟悉,非常感谢您能帮助我提高代码的效率和缩短代码 除了Python 计算概率的更好方法?,python,python-2.7,function,for-loop,repeat,Python,Python 2.7,Function,For Loop,Repeat,好的。我正在做的任务是通过改变赢得比赛的奖金来使比赛公平。 为了验证游戏是否更加公平,我在同一个程序中有几个相同代码的实例。这是因为代码使用了随机模块,通过打印每个片段,我将获得不同的输出,即使是相同的代码。 唯一的区别是函数的名称 现在,我在想:有没有更好的方法?同一个函数一次又一次地重复,这非常难看,它使代码由许多行组成 我对这方面还不太熟悉,非常感谢您能帮助我提高代码的效率和缩短代码 除了balance_sumdiceX(N,r)函数和重复的print语句之外,您可以看到我的代码的各个方面
balance_sumdiceX(N,r)
函数和重复的print
语句之外,您可以看到我的代码的各个方面。
我在这里提供了代码的图片:
函数的全部要点是允许代码重用。为什么不把所有这些函数调用放在一个循环中呢
for trial in xrange(num_trials): # replace with the number of trials you want
print 'After playing the game %d times, your balance will be %d' % (N, balance_sumdice(N, r))
您不需要定义执行相同操作的不同方法,只需使用一种方法即可
from random import randint
import sys
def balance_sumdice(N, r):
w = 100
for reps in xrange(N):
s = 0
for dice in xrange(4):
outcome = randint(1,6)
s += outcome
if s < 9:
w += r-1
else:
w -= 1
return w
def prob_sumdice(N):
M = 0
for reps in xrange(N):
s = 0
for dice in xrange(4):
outcome = randint(1,6)
s += outcome
if s < 9:
M += 1
return float(M)/N
N = int(sys.argv[1])
r = float(sys.argv[2])
PW = 100*prob_sumdice(N)
PL = 100 - PW
print 'Your chance of winning is %.1f, aka the chance of losing is %.1f' % (PW,PL)
for x in range(1,10):
print 'After playing the game %d times, your balance will be %d' % (N, balance_sumdice(N,r))
来自随机导入randint
导入系统
def平衡油箱(N,r):
w=100
对于X范围内的代表(N):
s=0
对于xrange(4)中的骰子:
结果=randint(1,6)
s+=结果
如果s<9:
w+=r-1
其他:
w-=1
返回w
def prob_sumdice(N):
M=0
对于X范围内的代表(N):
s=0
对于xrange(4)中的骰子:
结果=randint(1,6)
s+=结果
如果s<9:
M+=1
返回浮点数(M)/N
N=int(sys.argv[1])
r=浮动(sys.argv[2])
PW=100*prob_sumdice(N)
PL=100-PW
打印“您获胜的几率为%.1f,也称为失败的几率为%.1f%”(PW,PL)
对于范围(1,10)内的x:
打印“在玩游戏%d次后,您的余额将为%d%”(N,balance_sumdice(N,r))
在你的问题中用正确的格式发布你的代码,而不是以图片的形式发布。如果你只是想让它更有效,那么最好是在上面发布。如果错误,请更正我,你所有的方法不是都一样吗?是什么阻止了您每次只使用其中一个方法?当代码开始重复时,尤其是输出、字符串等,通常调用函数并传递特定于每个输出的参数就足以解决问题。您不需要多次定义同一个方法以使其返回不同的值。只需定义一次方法并多次调用它。我想有几个输出,以表明游戏确实是更公平的这一次。我知道我可以多次运行程序并记录输出,但我想知道是否有一种方法可以做到我所做的,而不需要那么多代码。@JonasNorill您不必多次运行程序,只需使用循环即可。非常感谢!这正是我要找的。