为什么在 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()
```
这是我的代码:
我想我知道问题出在哪里,我想我把随机生成代码放在了错误的地方,但我似乎无法理解如何解决它。
我将如何修复我的代码?
您仅使用最新随机生成的数据来创建您的 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))
我写了一些代码来生成一个简单的角色(比如故事角色,而不是字符),我的问题是我希望我的程序生成多个角色,但是在 运行 编译我的代码时,它简单地多次打印出相同的名称。
我必须归档,字符 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()
```
这是我的代码:
我想我知道问题出在哪里,我想我把随机生成代码放在了错误的地方,但我似乎无法理解如何解决它。
我将如何修复我的代码?
您仅使用最新随机生成的数据来创建您的 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))