如何使用变量生成for循环?

How to generate a for loop using variables?

我最近开始学习 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 循环(我不知道哪个最好,但根据我的新手经验,我觉得 for 循环会工作得更好,但我找不到解决方案)来生成随机数并使我的循环生成该数量的名称。

这是我的代码,但它不起作用。

   people_count = int(input("Enter how many names you wish to have, min 0, max 20: "))

for l in range(people_count):
     generate_random_names = random.choice(names)

print (generate_random_names)

而且我只得到一个随机名称。这里的 missing/mistake 是什么?

提前致谢!

您总是分配给同一个变量,所以每次迭代都会覆盖同一个变量,结果是上次迭代的字符串。

要实现您想要的效果,您必须将随机名称字符串添加到 for 循环内的某种列表或数组中

您在循环中为变量赋值 "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']

在 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)

您正在寻找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 参数是您想要的元素数量,因此 select。

random.choice 将始终 select 只有一个元素。

我会使用随机库 然后我会做 dandom.randint(x,y) 这样你就会 return 从 x 到 y 的随机数。然后您可以使用

访问您的名单

name_list[random.randint(0,len(name_list)] 对了,你有一个随机的名字,现在你需要把这个值保存在另一个列表中

通过变量=name_list[随机... 你可以在 var 中写名字,但每次你这样做都会被覆盖 所以... v=[] v.append(name_list[random.randint(0,len(name_list)]

对吧?有任何疑问随时提问