如何增加发生事件的机会百分比?

时间:2017-01-19 19:42:32

标签: python

例如,我有

import random

TimeAdj = ("New", "Old")
adj = ("fancy", "elegant")
place = ("street", "market")

print random.choice(TimeAdj) + ' ' + random.choice(adj) + ' ' + random.choice(place)

但我希望{adj}有60%的机会发生(不添加空格),我该怎么做?

3 个答案:

答案 0 :(得分:1)

您要考虑的一个常见模式是在使用print语句之前构建要打印的字符串。

import random

TimeAdj = ("New", "Old")
adj = ("fancy", "elegant")
place = ("street", "market")

string = random.choice(TimeAdj) + ' ' 
if random.random() < 0.5:
    string += random.choice(adj)
    string += ' '
string += random.choice(place)

print string

此处百分比为50%,但可以修改为您想要的任何百分比。

此外,您不想在字符串上使用+ =,而是要查看Efficient String Concatenation in Python

答案 1 :(得分:0)

这将选择(对于形容词位置)空字符串或其中一个形容词的随机选择

import random

TimeAdj = ("New", "Old")
adj = ("fancy", "elegant")
place = ("street", "market")

print random.choice(TimeAdj) + random.choice(('',' ' + random.choice(adj))) + ' ' + random.choice(place)

答案 2 :(得分:0)

我需要使用C#开发的聊天机器人的类似功能。如果她的反应有所不同,她似乎更有人性。我通过创建builder来解决问题,以便能够分阶段完成完整的响应。

我已经尝试通过创建一个精简版来解决您的问题。 nbryan的解决方案如果您只需要有机会固定在50%就可以工作,但如果您想稍微调整概率,这将有助于您。

import random


class RandomStringBuilder(object):
    def __init__(self):
        self._string_parts = []

    def with_raw(self, string):
        self._string_parts.append(string)
        return self

    def from_any(self, *phrases, chance=1.0, prefix=' '):
        if random.random() < chance:
            self._string_parts.append(prefix + random.choice(phrases))

        return self

    def __repr__(self):
        return ''.join(self._string_parts)


if __name__ == '__main__':
    builder = RandomStringBuilder()
    print(builder\
        .with_raw('Hey, this is an example of a')\
        .from_any('terrible', 'bad', 'good', 'great', chance=0.7)\
        .with_raw(' solution to your problem'))

示例运行

Hey, this is an example of a great solution to your problem
Hey, this is an example of a solution to your problem
Hey, this is an example of a terrible solution to your problem