例如,我有
import random
TimeAdj = ("New", "Old")
adj = ("fancy", "elegant")
place = ("street", "market")
print random.choice(TimeAdj) + ' ' + random.choice(adj) + ' ' + random.choice(place)
但我希望{adj}有60%的机会发生(不添加空格),我该怎么做?
答案 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