此问题已存在:
Customizing the random function without using append, or list, or other container?
4天前关闭。
这篇文章是编辑并提交审查4天前.
从理论上讲,当使用随机化时,同一个单词可能会连续打印几次,也可能会重复打印(例如,5次尝试中有3次可能会打印同一个单词),我知道,这是正确的,这是正确的,正常的。
我想设置一个变量的相同值再次打印ONLY AFTER 4 TIMES,因此在第FIFTH次尝试时。我只是想为每个值设置某种“块”,并且该块必须持续4次打印尝试。
例如,在我的代码中,我想在a_random变量中,如果Word A2
被打印,那么Word A2
将只能在4次后续打印尝试后再次打印,但我想打印四个中的一个(1)随机单词(而不是打印4个单词)
例如,如果我打印Word A2
,随后的打印必须是"Word A1", "Word A3", "Word A4", "Word A5", "Word A6", "Word A7", "Word A8"
中的4个随机,那么在第第五次尝试时,他将能够再次打印Word A2(但不是强制性的,因为除了Word A2之外,还可以打印任何单词)
重要提示:我想一次只打印一个单词。我不想一次打印4个单词或更多单词。我希望输出的单词只有一(1)个
谢谢你
import random
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('300x200')
def func():
a = "Word A1", "Word A2", "Word A3", "Word A4", "Word A5", "Word A6", "Word A7", "Word A8"
print("NEW")
a_random = print(random.choice(a))
print(" ")
return a_random
button = ttk.Button(root, text='Random', command=func)
button.place(x=10, y=10)
root.mainloop()
5条答案
按热度按时间sulc1iza1#
这使用一个列表来跟踪黑名单索引并从采样中删除那些索引。该列表不会超过四个项目。
5fjcxozz2#
这里有两个方法:
方法1:反复调用
random.choice
,直到得到你想要的结果。这有点傻,而且可以说是不好的做法,但它确实有效。但你必须确保有一个可能的有效结果,否则它将陷入无限循环。方法2:从
random.choice
的可用单词列表中删除不需要的单词。oogrdqng3#
你可以添加列表并像队列一样使用它
新代码是
如果您不熟悉队列,请检查此website
4xrmg8kj4#
deque
可以配置最大长度,以自动跟踪最后四个字。示例:这可用于跟踪最后选择的单词并重试选择:
输出(注解为调出间距):
Tk示例:
u3r8eeie5#
您可以尝试利用
random.sample
来减少重复(尽管它可能不完全符合您的要求,但可以“足够好”,并且应该更快):返回从总体序列中选择的唯一元素的k长度列表。用于不替换的随机抽样。
请注意,由于“窗口”边界(即“1,2,3,4,4,不是4,不是4,不是4,...”),您仍然可以重复
UPD
例如(可以 Package 成像iterator这样的类):