在 While 循环中使用随机一次
Using Random Once in a While loop
我在使用 类 时遇到一点问题,同时在 while 循环中使用随机数。目标是第一次生成随机字符串并在整个课程中使用它。这是有问题的四行。
def run_review(self, key_history):
level = reviewer.ReviewLesson(self.history_list)
if self.counter:
level.shuffled()
self.counter = False
return shuffle
level.review()
level.review_lesson()
来自另一个模块
def shuffled(self):
self.shuffled_list = sorted(self.history_list, key=lambda k: random.random())
return self.shuffled_list
def review(self):
for item in self.shuffled_list:
self.word = item+self.word
self.word = self.word*7
return self.word
def review_lesson(self):
word = ''
self.word = word+self.word
return self.word
问题是在第一个块之后 review_lesson 是空的 space 因为 level.review() 没有被调用,但是如果 level.review 被调用它就会变成另一个随机序列。
编辑:使代码更加清晰并删除了重复的函数。
您似乎在您的方法中将 self.word 分配给多个事物,因此不完全确定它在做什么,但能够使用 review
并获得相同的随机数 shuffled_list
每次将 shuffled_list 声明为 class 属性:
# either declare before init, or use self.shuffled_list = .. in your init method
shuffled_list = sorted(self.history_list, key=lambda k: random.random())
def review(self):
for item in class_name.shuffled_list:
self.word = item+self.word
self.word *= 7
return self.word
例如:
class Foo():
r = randint(1, 7) # either here as class attribute so it will be the same for all instances
def func(self):
return Foo.r
## -- End pasted text --
In [13]: for _ in range(5):
f = Foo()
print(f.func())
f1 = Foo()
print(f1.func())
....:
2
2
2
2
2
2
2
2
2
2
class 属性将在所有实例中保持相同:
class Foo():
r = randint(1, 7)
def func(self):
return Foo.r
如果您想为每个实例设置不同的值,请将其设为实例属性:
class Foo():
def __init__(self)
self.r = randint(1, 7)
def func(self):
return self.r
我在使用 类 时遇到一点问题,同时在 while 循环中使用随机数。目标是第一次生成随机字符串并在整个课程中使用它。这是有问题的四行。
def run_review(self, key_history):
level = reviewer.ReviewLesson(self.history_list)
if self.counter:
level.shuffled()
self.counter = False
return shuffle
level.review()
level.review_lesson()
来自另一个模块
def shuffled(self):
self.shuffled_list = sorted(self.history_list, key=lambda k: random.random())
return self.shuffled_list
def review(self):
for item in self.shuffled_list:
self.word = item+self.word
self.word = self.word*7
return self.word
def review_lesson(self):
word = ''
self.word = word+self.word
return self.word
问题是在第一个块之后 review_lesson 是空的 space 因为 level.review() 没有被调用,但是如果 level.review 被调用它就会变成另一个随机序列。
编辑:使代码更加清晰并删除了重复的函数。
您似乎在您的方法中将 self.word 分配给多个事物,因此不完全确定它在做什么,但能够使用 review
并获得相同的随机数 shuffled_list
每次将 shuffled_list 声明为 class 属性:
# either declare before init, or use self.shuffled_list = .. in your init method
shuffled_list = sorted(self.history_list, key=lambda k: random.random())
def review(self):
for item in class_name.shuffled_list:
self.word = item+self.word
self.word *= 7
return self.word
例如:
class Foo():
r = randint(1, 7) # either here as class attribute so it will be the same for all instances
def func(self):
return Foo.r
## -- End pasted text --
In [13]: for _ in range(5):
f = Foo()
print(f.func())
f1 = Foo()
print(f1.func())
....:
2
2
2
2
2
2
2
2
2
2
class 属性将在所有实例中保持相同:
class Foo():
r = randint(1, 7)
def func(self):
return Foo.r
如果您想为每个实例设置不同的值,请将其设为实例属性:
class Foo():
def __init__(self)
self.r = randint(1, 7)
def func(self):
return self.r