为什么在 for 循环的每次迭代中我随机生成的名称都相同?

Why are the names that I am randomly generating the same in every iteration of my for loop?

我写了一些代码来生成一个简单的角色(比如故事角色,而不是字符),我的问题是我希望我的程序生成多个角色,但是在 运行 编译我的代码时,它简单地多次打印出相同的名称。

我必须归档,字符 class 所在的那个和我 运行 代码所在的那个。

我认为引起我问题的代码是以下代码:

``` 
from charClasses import Character
from charClasses import *

male_names = ["Xi", "Gonduang", "Lei", "Bei", "Guan"]
female_names = ["Song", "Wen", "Meihui", "Qiang", "Ling"]
surnames = ["Jin", "Ling", "Ma", "Yeun", "Kim"]
genders = ["Male", "Female"]

for t in range(3):
    randGender = random.choice(genders)

if randGender == "Male":
    randName = random.choice(male_names)
else:
    randName = random.choice(female_names)
randSurname = random.choice(surnames)
randAge = random.randrange(0, 100)

characters = [Character(randName, randSurname, randAge, randGender) for x in range(3)]

for character in characters:
character.print_char_info()

```

这是我的代码:

https://pastebin.com/suTampyw

https://pastebin.com/7DTk9JSq

我想我知道问题出在哪里,我想我把随机生成代码放在了错误的地方,但我似乎无法理解如何解决它。

我将如何修复我的代码?

您仅使用最新随机生成的数据来创建您的 characters 列表。您应该改为在每次迭代时附加到列表。尝试以下操作:

characters = list()
for t in range(3):
    randGender = random.choice(genders)
 
    if randGender == "Male":
        randName = random.choice(male_names)
    else:
        randName = random.choice(female_names)
    randSurname = random.choice(surnames)
    randAge = random.randrange(0, 100)
 
    characters.append(Character(randName, randSurname, randAge, randGender))

问题出在您创建字符数组的第二个文件中的第 19 行。

characters = [Character(randName, randSurname, randAge, randGender) for x in range(3)]

这条语句的实质是创建 3 个字符对象,其值存储在 randName、randSurname、randAge 和 randGender 中。这些值不会改变,直到您在第 9 行定义的 for 循环的下一次迭代。

您应该在迭代之前创建一个空字符列表并将每个字符附加到它,因为按照您现在的代码,它会在 for 循环的每次迭代中创建一个字符列表。

characters = []
for t in range(3):
    randGender = random.choice(genders)
 
    if randGender == "Male":
        randName = random.choice(male_names)
    else:
        randName = random.choice(female_names)
    randSurname = random.choice(surnames)
    randAge = random.randrange(0, 100)
 
    characters.append(Character(randName, randSurname, randAge, randGender))