【发布时间】:2018-05-20 21:31:09
【问题描述】:
def gDiceRoll():
gDiceOptions.destroy()
global gDiceRoll
gDiceRoll = Tk()
gDiceRoll.title("Green Dice Roll")
gDiceRoll.config(background="#32cd32")
lbloutcome = Label(gDiceRoll, text="?", width="12", height="8", bg="#32cd32")
play()
while True:
outcomeG = random.randint(1, 100)
lbloutcome = Label(gDiceRoll, text="?", width="12", height="8", bg="#32cd32")
if outcomeG <= 25:
lbloutcome.config(text="G1", font=(25))
gDiceRoll.update()
f = open("Logs.txt", "a")
ts = time.time()
sttime = datetime.datetime.fromtimestamp(ts).strftime('%Y%m%d_%H:%M:%S - ')
f.write(sttime + "G1 \n")
f.close()
photo = PhotoImage(file=r"C:\Temp\Dice_Roll\pics\G1.gif")
lblop = Label(gDiceRoll, image=photo)
lblop.pack()
lbloutcome.pack()
gDiceRoll.mainloop()
gDiceRoll.after(1)
os.execl(sys.executable, sys.executable, *sys.argv)
break
elif outcomeG <= 22:
lbloutcome.config(text="G2", font=(25))
gDiceRoll.update()
f = open("Logs.txt", "a")
ts = time.time()
sttime = datetime.datetime.fromtimestamp(ts).strftime('%Y%m%d_%H:%M:%S - ')
f.write(sttime + "G2 \n")
f.close()
photo = PhotoImage(file=r"C:\Temp\Dice_Roll\pics\G2.gif")
lblop = Label(gDiceRoll, image=photo)
lblop.pack()
lbloutcome.pack()
gDiceRoll.mainloop()
gDiceRoll.after(1)
os.execl(sys.executable, sys.executable, *sys.argv)
break
#etc
每次我运行程序时,我都会 总是 出现 G1。我尝试了很多方法来解决它,但它们只会产生其他问题。 elif G1
我该如何解决这个问题?任何帮助将不胜感激
【问题讨论】:
-
当然
outcomeG <= 25比outcomeG <= 22强。 -
还需要修改
if/elif语句的优先级 -
这段代码有很多问题。在调用
mainloop之前只调用一次randint,并且永远不要在无限循环中调用mainloop。 -
@Jean-FrançoisFabre 我将如何做到让
if outcomeG <= 25有 25% 的机会在 if 语句中执行代码? -
25% 的机会需要被其他 75% 的机会所抵消。如果你重新投射一个随机值,如果它高于 25%,那么你有 100% 的机会在(统计上)4 次尝试后输入你的代码。这就像玩正面和反面,只有当你得到正面时才停止。当值 > 25 时,您需要一个“G3”案例
标签: python python-3.x random tkinter