【问题标题】:How to ensure output is based on number entered python如何确保输出基于输入的数字python
【发布时间】:2015-05-06 20:34:49
【问题描述】:

我正在尝试创建一个接受两个列表的程序。第一个列表是任何数字,第二个列表是输出数字的概率。该程序将要求输入数字,然后是概率。然后程序将这两者合并,使它们相互映射。然后程序应该根据输入的概率返回一个数字。

我已经创建了这个程序并且它做到了这一点,我只有一个问题,我怎样才能得到它,以便在概率列表中,你可以输入浮点数(0.1,0.2)。我可以这样做,但是代码的其他部分会返回错误。另外,如果使用浮点数(0.5、0.5)或不使用浮点数,用户输入的概率只能加到 1 或 10?

pos_values = [] 
probability = []
maxLengthList = 5

while len(pos_values) < maxLengthList:
        number = input("Enter a number: ")
        pos_values.append(number)
        prob = input("Enter a probability: ")
        probability.append(prob)

cumulative_probability = list(zip(pos_values, probability))

prob = [val for val, cnt in cumulative_probability for i in range(cnt)]
outcome = []
for i in range (1):
    outcome.append(random.choice(prob))

print('Possible outcome returned is: ', outcome)

我的代码完全符合我的要求,我的问题是如何使输入的概率总和不能超过 1 或 10。

【问题讨论】:

标签: python list probability


【解决方案1】:

这是您需要的代码:

pos_values = []
probability = []
maxLengthList = 5

while len(pos_values) < maxLengthList:
    number = input("Enter a number: ")
    pos_values.append(number)
    prob = input("Enter a probability: ")
    probability.append(prob)

all_values = list(zip(pos_values, probability))

print all_values

prob = [cnt for val, cnt in all_values]
if sum(prob) > 1.0:
    print "Error in probabilities"
else:
    lookup = input("Enter probability to search: ")
    for val, cnt in all_values:
        if cnt == lookup:
            print val

现在,快速分析一下您的代码:

  • 您不能在浮点数上进行范围,例如 range(cnt)

  • range(1) 总是输出0,因此在你的代码中使用它没有意义。 事实上,我想知道在循环中使用它背后的原因是什么。

【讨论】:

  • 我不想搜索概率,我希望代码根据与之相关的概率输出其中一个数字。还确保共同确保概率总和为 1
  • 第二部分在代码中处理。我仍然无法理解第一部分:“根据与之相关的概率输出一个数字”是什么意思?
  • 例如,如果输入的结果是 1、2、3、4,输入的概率是 0.1、0.1、0.1 和 0.7,则程序很可能会返回 4,因为它的概率最高。代码应返回/打印输入的 1 个结果。
  • 我的代码是这样做的,我就是做不到,所以你只能输入总和为 10 的概率,所以如果它超过 10,它会给出错误消息。
【解决方案2】:

问题在于列表理解。 range 的参数必须是整数,否则会报错。

实现您想要的效果的更简单,更pythonic的方式如下:

    def returnRandom(probability_distribution):
        r = random.random()
        for value, prob in probability_distribution:
            r -= prob
            if r <= 0: return value
        print("Error! The total probability was less than one!")

您也可以将列表上的概率格式化为存储累积概率,然后代码将自行简化:

    def returnRandom(probability_distribution):
        r = random.random()
        for value, cum_prob in probability_distribution:
            if r <= cum_prob: return value

【讨论】:

  • 我想要它以便用户可以输入结果和概率@jsevillamol
  • @noodle 首先检查输入是否位于值之间。然后得到累积概率。如果它超过 1 或 10(我不明白为什么您希望概率加权超过 10,但无论如何)会引发错误。
猜你喜欢
  • 2021-07-23
  • 2022-07-23
  • 1970-01-01
  • 2021-06-02
  • 2016-10-05
  • 1970-01-01
  • 2022-01-25
  • 2021-09-15
  • 1970-01-01
相关资源
最近更新 更多