Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算概率的更好方法?_Python_Python 2.7_Function_For Loop_Repeat - Fatal编程技术网

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您不必多次运行程序,只需使用循环即可。非常感谢!这正是我要找的。