Trying to randomize students creatures in TeacherStudentsScene but it shows same students every time when i render
Closed this issue · 2 comments
I created new creatures named
- PlusCreature
- MinusCreature
- MultiCreature
- DivCreature
- RemCreature
- AndCreature
- EqualCreature
- RoundBracketsCreature
- CurlyBracketsCreature
- SquareBracketsCreature
- AngleBracketsCreature
- HashCreature
- QuestionCreature
Creatures are looks like
and added this creatures to the file c_creature (renamed pi_creature) for example this one
class PlusCreature(CCreature):
CONFIG = {
"file_name_prefix": "PlusCreatures"
}
and i changed method 'create_c_creatures()' in class TeacherStudentsScene in file c_creature_scene.py (renamed pi_creature_scene.py)
def create_c_creatures(self):
self.teacher = CCreature(color=self.teacher_color)
self.teacher.to_corner(DOWN + RIGHT)
self.teacher.look(DOWN + LEFT)
'''From that
self.students = VGroup(*[
Randolph(color=c)
for c in self.student_colors
])
'''
# To this
print("yessssss its runing, we are creating students.")
self.students = VGroup(*[
random.choice([PlusCreature,
MinusCreature,
MultiCreature,
DivCreature,
RemCreature,
AndCreature,
EqualCreature,
RoundBracketsCreature,
CurlyBracketsCreature,
SquareBracketsCreature,
AngleBracketsCreature,
HashCreature,
QuestionCreature])(color=c)
for c in self.student_colors
])
self.students.arrange(RIGHT)
self.students.scale(self.student_scale_factor)
self.students.to_corner(DOWN + LEFT)
self.teacher.look_at(self.students[-1].eyes)
for student in self.students:
student.look_at(self.teacher.eyes)
return [self.teacher] + list(self.students)
i created file manimlib.imports_with_c that imports c_creatures instead of pi_creatures
when i run following code ( i tried self.setup() and self.c_creatures = VGroup(*self.create_c_creatures()) but this lines just create another creatures onto previouse ones)
from manimlib.imports_with_c import *
class ts(TeacherStudentsScene):
def construct(self):
#self.setup()
#self.c_creatures = VGroup(*self.create_c_creatures())
self.teacher_says(
"Something different today!",
run_time = 2
)
Output always shows same students with two EqualCreatures and one QuestionCreature even when rendering code again and again but according to changes in method 'create_c_creatures()' in class TeacherStudentsScene in file c_creature_scene.py it should be create random creatures everytimes i run the code
it always print the output from line print("yessssss its runing, we are creating students.") in create_c_creatures() method that means it runs every time between multiple renders. this mean may be there is something wrong with random.choice() method
but i tried following code.
import random
def a1():
return "1"
def a2():
return "2"
def a3():
return "3"
def a4():
return "4"
def a5():
return "5"
numbers = [*[random.choice([a1,a2,a3,a4,a5])() for i in range(0,20)]]
print(numbers)
it allways print random numbers.
but when i put this code inside create_c_creatures() like follow
print("yessssss its runing, we are creating students.")
self.students = VGroup(*[
random.choice([PlusCreature,
MinusCreature,
MultiCreature,
DivCreature,
RemCreature,
AndCreature,
EqualCreature,
RoundBracketsCreature,
CurlyBracketsCreature,
SquareBracketsCreature,
AngleBracketsCreature,
HashCreature,
QuestionCreature])(color=c)
for c in self.student_colors
])
def a1():
return "1"
def a2():
return "2"
def a3():
return "3"
def a4():
return "4"
def a5():
return "5"
numbers = [*[random.choice([a1, a2, a3, a4, a5])() for i in range(0, 20)]]
print(numbers)
now it always shows same numbers.
then whats wrong with my code ? why always same students ?
it solved by putting random.seed()
random.seed()
self.students = VGroup(*[
random.choice([PlusCreature,
MinusCreature,
MultiCreature,
DivCreature,
RemCreature,
AndCreature,
EqualCreature,
RoundBracketsCreature,
CurlyBracketsCreature,
SquareBracketsCreature,
AngleBracketsCreature,
HashCreature,
QuestionCreature])(color=c)
for c in self.student_colors
])
following code is for selecting creatures without repetition
random.seed()
temp = random.sample(
[PlusCreature,
MinusCreature,
MultiCreature,
DivCreature,
RemCreature,
AndCreature,
EqualCreature,
RoundBracketsCreature,
CurlyBracketsCreature,
SquareBracketsCreature,
AngleBracketsCreature,
HashCreature,
QuestionCreature], len(self.student_colors)
)
self.students = VGroup(*[
i(color=c)
for c,i in zip(self.student_colors,temp)
])