Python:有没有办法在使用它之后从列表中删除一个项目(随机)?或者更改random.choice的结果

时间:2016-06-22 06:44:32

标签: python string list random

我真的不知道如何提出这个问题,我可能听起来很愚蠢。我一直在寻找解决我遇到过的问题的方法,但我尝试过的一切都没有奏效。 我正在为我的计算机科学课做一个项目,作为我的决定,从名单,生日,城市,地址等列表中随机生成一个身份(旁注:我的老师实际上并没有教过我任何东西;我们读笔记并做了由笔记定义组成的小测验,当我们无法解决问题时,他只是告诉我们问邻居。这是我在这里发表的第一篇文章,所以如果格式不正确,我的编码技巧很糟糕,我会提前道歉。)无论如何,我会继续处理我的问题/问题。

在程序开始时,它会询问您是否要生成男性或女性身份:

def get_info():

global gender
global name
gender=input("Enter a gender of which you would like to randomly generate M=male F=female:")  
if gender==("F"):
    name=fname
elif gender==("M"):
    name=mname
else:
    print("Please enter either an M or F.")
    get_info()

然后用它来确定名称来自哪个列表:

fname=random.choice(list(set(["girlynames","tina","caroline","etc"])))

mname=random.choice(list(set(["guynames","richard","earl","etc"])))

然后打印出随机标识,包括姓名,生日等,如下所示:

Your new identity is: 
Nathaniel Ellis
Your birthday is :
September 5 1985
Your address is :
470 MacMurray Acres

我在程序的主要部分之后添加了一个函数,如果他们想再次使用该程序,则会询问用户输入。

def retry():

again=input("Would you like to generate another? Y/yes N/no: ")
if again==('Y'):
    get_info()
    generate_identity()
    retry()

elif again==('N'):
    print("Thanks for using the identity generator! Have a spectacular day")
    quit()

问题是,每次输入“Y”和性别时,它都会产生与第一次完全相同的结果,即使性别不同,除了名字外,所有结果都是相同的。

Your new identity is: 
Ava Ellis
Your birthday is :
September 5 1985
Your address is :
470 MacMurray Acres

我觉得有一个简单的解决方案,但我从这个网站(以及其他来源)阅读和尝试的一切都没有用。 有没有办法在使用后从列表中删除该项?或者让结果每次都变化?或者甚至是一种方式来重置Python,因为它只是伪随机?我已经被困在这3天了,它将在下周一到期,我已经在 stackoverflow 试图找到解决方案,因为我发现了问题。非常感谢帮助,您将成为一个救生员! :)

2 个答案:

答案 0 :(得分:1)

您可以使用pop从列表中删除随机项。

selection = random.choice(range(len(name_list)))
name = name_list.pop(selection)

这会从name_list中选择一个随机项,将其删除,然后将其分配给name

也就是说,看起来您的随机选择工作正常,但您没有正确地重新分配名称的值。但是您需要发布更多代码才能确定。仔细检查在retry运行后,您将重新分配fname / mname并按顺序重新分配名称。

答案 1 :(得分:-1)

如果每次启动程序时将seed设置为随机数,那么 random.choice 选项每次都会有所不同?

import random
seed = random.randint(0,9999)
random.seed(seed)