我对编程和python都很陌生。
我想创建一个“坏笑话生成器”。我想几个列表作为元组,我填充内容,并在结束时,它应该打印一个句子,它随机挑选出的列表,创造超级坏笑话。:)到目前为止一切顺利。我设法让它工作,但有一个问题,我遇到了。我希望列表中的每一个值只使用一次。从来没有两次。但我不知道要这样做。
这是我目前的项目:
import random
person = ("donkey", "snake", "a beaver")
say1 = ("Where are my pants?", "Why do you look so sad?")
say2 = ("I don't know.", "That's what she said.")
place = ("bar", "restaurant", "hospital")
def person1_func():
person1 = person[random.randint(0, len(person)-1)]
return person1
def person2_func():
person2 = person[random.randint(0, len(person)-1)]
if person2 == str(person1_func()):
person2_func() #This should restart the function, if person2 and person1 are identical.
return person2
def place_func():
place1 = place[random.randint(0, len(person)-1)]
return place1
print(person1_func())
print(person2_func())
print("A" + person1_func() + " and a " + person2_func() + " come into a " + place_func() + ". ")
在person2_func()中,它只是不将值与person1_func()的输出进行比较。我做错了什么?我如何才能实现这两个值的比较。谢谢你的帮助,圣诞快乐。:)
3条答案
按热度按时间eivnm1vs1#
请记住,每次调用这些函数都会返回一个新的随机字符串,您似乎认为
person1_func()
每次都将返回相同的字符串。这里你不需要两个不同的函数。只要有一个人函数,让调用者决定如何处理重复。像这样:
但是,请注意,这不是一个好的设计。您可以使用
random.choices
从给定的总体中挑选N个随机样本,而不重复。这是一个更好的计划。tag5nh1u2#
请原谅我没有用python编写代码,所以我不知道发布实际代码的语法,但是我可以解释伪代码。
您不需要定义两个函数来完成从Person列表中选取值的相同工作。
尝试以下方法:
维护一个集合,类似于HashMap,用于存储值沿着布尔值。
当您从该Map中拾取一个值时,将其标记为true,表示该值以前已被使用过。
deikduxw3#
另一种选择是用相同的
get_n_random_people
自定义函数生成两个随机索引,而不是person1_func
和person2_func
,这种方法可以避免在选定的人中进行额外的检查。在本例中,当输入
num
为2时,函数get_n_random_people
可以为您提供2个人,尽管根据您作为输入传递的值,它可以通用为任意数量的人。