【问题标题】:Same result every time with random numbers (python)每次使用随机数的结果相同(python)
【发布时间】: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 &lt;= 25outcomeG &lt;= 22强。
  • 还需要修改if/elif语句的优先级
  • 这段代码有很多问题。在调用mainloop 之前只调用一次randint,并且永远不要在无限循环中调用mainloop
  • @Jean-FrançoisFabre 我将如何做到让if outcomeG &lt;= 25 有 25% 的机会在 if 语句中执行代码?
  • 25% 的机会需要被其他 75% 的机会所抵消。如果你重新投射一个随机值,如果它高于 25%,那么你有 100% 的机会在(统计上)4 次尝试后输入你的代码。这就像玩正面和反面,只有当你得到正面时才停止。当值 > 25 时,您需要一个“G3”案例

标签: python python-3.x random tkinter


【解决方案1】:

假设outcomeG &lt;= 22

那么您的代码首先遇到outcomeG &lt;= 25 条件,并进入第一个条件,总是

你必须先交换你的ifelif 来测试&lt;=22

当然,如果outcomeG &gt; 25,你必须一些事情,否则你将一无所获。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多