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

时间:2017-03-23 19:04:00

标签: python python-3.x loops variables generated-code

我最近开始学习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

我只得到一个随机名称。这里缺少什么/错误?

提前致谢!

6 个答案:

答案 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循环中,因此它会打印每次迭代