我最近开始学习python,并希望通过使用循环变得更加知识和灵活。
我的问题是,假设我创建了一个名单列表:
names = ('Benjamin', 'Damien', 'Dexter', 'Jack', 'lucas', 'Norman', 'Thorn', 'Bella', 'Blair',
'Ivy', 'Lilth', 'Megan', 'Rue', 'Sabrina', 'Samara',
'Anthea', 'Jessica', 'Igor', 'Luther', 'Boris', 'Abel', )
现在我想使用for
循环或while
循环(我不知道哪一个是最好的,但从我的新手经验来看,我觉得{{1} }循环可以更好地工作,但我找不到解决方案)生成随机数并使我的循环生成该数量的名称。
这是我的代码,但它不起作用。
for
我只得到一个随机名称。这里缺少什么/错误?
提前致谢!
答案 0 :(得分:3)
在for循环中,每次循环迭代时都要替换变量generate_random_names
。相反,也许可以将它们放入列表中。注意choice()
会为您提供重复值,如果这是您想要的。
people_count = int(input("Enter how many names you wish to have, min 0, max 20: "))
generate_random_names = []
for l in range(people_count):
generate_random_names.append(random.choice(names))
print (generate_random_names)
现在你将有一个名单
此外,您不需要for循环来执行您想要的操作,您可以使用list comprehension:
people_count = int(input("Enter how many names you wish to have, min 0, max 20: "))
generate_random_names = [random.choice(names) for _ in range(people_count)]
如果你不想在新列表中有重复的值,那么你可以使用sample来收集一个集合以及在新列表中你想要多少。
people_count = int(input("Enter how many names you wish to have, min 0, max 20: "))
generate_random_names = random.sample(names,people_count)
print(generate_random_names)
答案 1 :(得分:1)
您正在寻找random.sample
:
from random import sample
names = ('Benjamin', 'Damien', 'Dexter', 'Jack', 'lucas', 'Norman', 'Thorn', 'Bella', 'Blair',
'Ivy', 'Lilth', 'Megan', 'Rue', 'Sabrina', 'Samara',
'Anthea', 'Jessica', 'Igor', 'Luther', 'Boris', 'Abel')
print(sample(names, k=4))
# ['lucas', 'Ivy', 'Dexter', 'Abel']
其中k
参数是您想要的元素数,因此选择。
random.choice
将始终只选择一个元素。
答案 2 :(得分:0)
您始终为同一个变量赋值,因此每次迭代时都会覆盖同一个变量,结果就是上一次迭代的字符串。
要获得你想要的东西,你必须将随机名称字符串添加到for循环中的某种列表或数组
答案 3 :(得分:0)
您正在循环" n" 次将值分配给变量,因此在您打印时,会返回最后指定的值。
您需要做的是存储这样的随机名称:
import random
names = ('Benjamin', 'Damien', 'Dexter', 'Jack', 'lucas', 'Norman', 'Thorn', 'Bella', 'Blair',
'Ivy', 'Lilth', 'Megan', 'Rue', 'Sabrina', 'Samara',
'Anthea', 'Jessica', 'Igor', 'Luther', 'Boris', 'Abel', )
people_count = int(input("Enter how many names you wish to have, min 0, max 20: "))
generate_random_names_list = []
for l in range(people_count):
generate_random_names_list.append(random.choice(names))
print(generate_random_names_list)
对于 3 的输入,结果如下:
['Norman', 'Rue', 'Rue']
要仅获取列表中的唯一名称,您可以执行以下操作:
import random
names = ('Benjamin', 'Damien', 'Dexter', 'Jack', 'lucas', 'Norman', 'Thorn', 'Bella', 'Blair',
'Ivy', 'Lilth', 'Megan', 'Rue', 'Sabrina', 'Samara',
'Anthea', 'Jessica', 'Igor', 'Luther', 'Boris', 'Abel', )
people_count = int(input("Enter how many names you wish to have, min 0, max 20: "))
generate_random_names_list = []
while len(generate_random_names_list) < people_count :
choice = random.choice(names)
if choice not in generate_random_names_list :
generate_random_names_list.append(choice)
print(generate_random_names_list)
这将导致 10 作为输入:
['Boris', 'Lilth', 'Jack', 'Igor', 'Luther', 'lucas', 'Damien', 'Rue', 'Abel', 'Blair']
答案 4 :(得分:0)
我会使用随机的lib 然后我会做dandom.randint(x,y)这样你就会从x到y返回一个随机数。然后,您可以使用
访问您的名单NAME_LIST [random.randint(0,LEN(NAME_LIST)] 是的,你有一个随机名称,现在需要将值保存在另一个列表中
通过做变量= name_list [random ... 你可以在var中写下这个名字,但每次你这样做都会被覆盖 所以... V = [] v.append(name_list [random.randint(0,len(name_list)]
正确?任何疑惑都可以随意提出
答案 5 :(得分:-1)
您需要将print语句放在for循环中,因此它会打印每次迭代