Python:有没有办法在使用一个项目后从列表(随机)中删除它?或者改变随机选择的结果
我真的不知道怎么问这个问题,我可能听起来很愚蠢。我一直在寻找解决问题的方法,但我所尝试的一切都没有奏效。 我正在为我的计算机科学课做一个项目,作为我的期末考试,从姓名、生日、城市、地址等列表中随机生成一个身份。(旁注:我的老师实际上没有教我任何东西;我们阅读笔记,做由笔记中的定义组成的测验,当我们弄不懂一些东西时,他只是告诉我们去问我们的邻居。这是我在这里的第一篇帖子,所以如果格式不正确,我的编码技能很差,我提前道歉。)无论如何,我会继续我的问题 在课程开始时,它会询问您是否要生成男性或女性身份:Python:有没有办法在使用一个项目后从列表(随机)中删除它?或者改变随机选择的结果,python,string,list,random,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"])))
或
然后打印出一个随机的身份,包括姓名、生日等,如下所示:
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,因为它只是伪随机的?我已经被困在这个问题上三天了,下周一到期,我一直在stackoverflow上试图找到解决方案在上,因为我注意到了这个问题。我们将非常感谢您的帮助,您将成为一名救生员!:)如果您在每次启动程序时将
种子设置为随机数,那么您的random.choice选项每次都会有所不同,会怎么样
import random
seed = random.randint(0,9999)
random.seed(seed)
如果每次启动程序时都将种子设置为随机数,那么您的random.choice选项每次都会有所不同,那会怎么样
import random
seed = random.randint(0,9999)
random.seed(seed)
您可以使用pop
从列表中删除随机项
selection = random.choice(range(len(name_list)))
name = name_list.pop(selection)
这将从name\u列表
中选择一个随机项,将其删除,并将其分配给name
也就是说,看起来您的随机选择工作正常,但是您没有正确地重新分配name的值。但您需要发布更多的代码才能确定。再次检查运行重试后,您是否按照顺序重新分配fname/mname并将其重新分配给name。您可以使用pop
从列表中删除随机项
selection = random.choice(range(len(name_list)))
name = name_list.pop(selection)
这将从name\u列表
中选择一个随机项,将其删除,并将其分配给name
也就是说,看起来您的随机选择工作正常,但是您没有正确地重新分配name的值。但您需要发布更多的代码才能确定。再次检查运行retry
后,您是否按照顺序重新分配fname/mname并将其重新分配给name。您是如何生成地址的?您忘记发布代码的这一部分。@Burhan对于地址,它使用与名称生成器相同的概念,除了门牌号和生日/年份。对于这些,我有random.randint。你是如何生成地址的?您忘记发布代码的这一部分。@Burhan对于地址,它使用与名称生成器相同的概念,除了门牌号和生日/年份。对于这些,我有random.randint。起初,我在理解这个解决方案时遇到困难,但最终,我找到了它,现在它正按照我想要的方式工作!这正是我一直在寻找的,我很欣慰,我得到了这么快的答复!非常感谢,太好了!很高兴我能帮上忙。:)我忘了加上这个,但是有没有办法用一个random.randint数字?我用这个bdayear=random.randint(19701999)来生成出生年份,但我不能使用上面显示的相同东西,是否也有一个简单的解决方案?当然,将年份设置为一个列表,years=[x代表范围内的x(1970,2000)]
。然后使用years
,就像我在上面使用的name\u list
一样。起初,我在理解这个解决方案时遇到困难,但最终,我找到了它,现在它正按照我想要的方式工作!这正是我一直在寻找的,我很欣慰,我得到了这么快的答复!非常感谢,太好了!很高兴我能帮上忙。:)我忘了加上这个,但是有没有办法用一个random.randint数字?我用这个bdayear=random.randint(19701999)来生成出生年份,但我不能使用上面显示的相同东西,是否也有一个简单的解决方案?当然,将年份设置为一个列表,years=[x代表范围内的x(1970,2000)]
。然后使用years
,就像我在上面使用的name\u列表一样。