【问题标题】:Better way of computing probabilities?计算概率的更好方法?
【发布时间】:2016-11-18 19:35:27
【问题描述】:

好的。我正在做的任务是通过改变赢得游戏的奖金来使游戏公平。 为了验证游戏现在是否更公平,我在同一个程序中有几个相同代码的实例。这是因为代码使用了 random 模块,并且通过打印每个段我会得到不同的输出,即使它是相同的代码。 唯一的区别是函数的名称。

现在,我想知道:有没有更好的方法来做到这一点?一遍又一遍地重复同一个函数非常难看,而且它使代码由多行组成。

我对此很陌生,非常感谢一些帮助,使我的代码更高效、更短。

除了balance_sumdiceX(N, r) 函数和重复的print 语句之外,您可以查看我代码的各个方面。 我在这里提供了代码的图片:

First section of code

Second section of code, mainly print statements

【问题讨论】:

  • 在您的问题中以正确的格式发布您的代码,而不是作为图片
  • 如果你只是想让它更有效率,最好属于codereview.stackexchange.com
  • 如果错了,请纠正我,你所有的方法不都是一样的吗?是什么阻止您每次只使用其中一种方法?
  • 当代码开始重复时,尤其是输出、字符串等,通常调用一个函数并传递特定于每个输出的参数就足以清理一切。
  • 你不需要多次定义同一个方法来让它返回不同的值。只需定义一次方法并多次调用它。 Example

标签: python python-2.7 function for-loop repeat


【解决方案1】:

函数的全部意义在于允许代码重用。为什么不将所有这些函数调用放在一个循环中。

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))

【讨论】:

  • 非常感谢!这正是我想要的。
【解决方案2】:

你不需要定义不同的方法来做同样的事情,只需要使用一个

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))

【讨论】:

  • 我想确实有几个输出,以表明这次游戏确实更公平。我知道我可以多次运行该程序并记录输出,但我想知道是否有一种方法可以完成我所做的事情,而无需那么多代码。
  • @JonasNorill 您不必多次运行程序,只需使用循环即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
相关资源
最近更新 更多