【问题标题】:Python Random Math Equation Generator programPython 随机数学方程生成器程序
【发布时间】:2021-07-15 13:04:01
【问题描述】:

我目前正在创建一个数学方程式生成器程序,它会询问您随机乘法问题。我一直在使用 if 语句时遇到问题,其中 ans == answer 将取决于用户的输入(正确答案)。但是,我的程序并不认为它是相等的,尽管与打印 ans 和 answer 的示例中的值相同,这表明它们是相同的值。我不知道我是否做错了什么,我想知道解决问题的方法。

此外,当我尝试为生成方程式创建 for 和 while 循环时,它会一次将它们全部打印出来,有没有办法也可以使循环不会打印新的随机方程式,直到用户得到正确答案了吗?

from tkinter import *
from random import *
import random
import time
import tkinter as tk
import math
import operator
from tkinter import messagebox


#This is for creating the tkinter window and fixing the specified dimensions into place
root = tk.Tk()
root.geometry("900x600")

#This section creates the canvas and its specifications
canvas_width = 900
canvas_height = 500
c = Canvas(root, width=canvas_width, height=canvas_height, bg="pink")
c.pack()

def quitgame():
    root.destroy()
    
class Game_Images:
    #Background Image
    bg = PhotoImage(file="../Data/sidescroll background flip.gif")
    bg = bg.zoom(2)
    c.create_image(0,0, anchor=NW, image=bg)

    #Insert Image of Enemy
    enemy = PhotoImage(file="../Data/monke2.png")
    enemy1 = c.create_image(0,260, anchor=NW, image=enemy)

    #Insert image of playable character
    player = PhotoImage(file="../Data/monke2.png")
    player1 = c.create_image(0,325, anchor=NW, image=player)
g = Game_Images()


score = 0
x = 1

def game_start():
    global answer, question
    int_1 = random.randint(1, 12)
    int_2 = random.randint(1, 12)
    displayQuestion = "What is "+str(int_1)+ "*" + str(int_2)+"?"
    operator = ["*"]
    ops = random.choice(operator)
    c.create_rectangle(353,0,550,75, fill = "white")
    c.create_text(450, 50, font = ("Helvetica", 15), fill="pink", text = displayQuestion)
    question = str(int_1) + str(ops) + str(int_2)
    answer = int_1 * int_2

def generateQ():
    ans = e1.get()
    e1.delete(0, END)
    if ans == answer:
        score += 1
        x += 1
        print("correct")
        print(ans)
        print(answer)
    else:
        print("wrong")
        print(ans)
        print(answer)


#Buttons show up below the canvas to run commands when pressed
Button(root, text = "Commence Forth",width = 15, command = game_start).place(x=10, y=570)
Button(root, text = "Quit",width = 11, command = quitgame).place(x=800, y=570)
e1 = Entry(root)
e1.pack(padx=30, pady=30)
b=Button(root,text="Enter", width=5, font=("Helvetica", 12), command = generateQ)
b.place(x=550, y=534)

            
root.mainloop()

【问题讨论】:

  • e1.get() 返回一个字符串。将字符串与整数进行比较始终为 False。 class Game_Images 这个意思是def Game_Images()
  • @Sujay 有趣的是,如果 OP 将 class Game_Images 更改为 def Game_Images(),图像将停止显示。看里面有一个PhotoImage。现在,当 OP 使用 g = Game_Images() 时,图像存储在变量中,它们可以像 g.bg 一样访问它们。如果他们将其更改为def ...,他们将丢失图像并且图像将被垃圾收集
  • @TheLizzard 那么两行添加全局列表和添加append 方法到函数(def)内的所述列表可以防止它们被垃圾收集,而不是它是我建议,但这应该可以解决您提到的问题
  • 我强烈建议您在导入某些东西时不要使用通配符 (*),您应该导入您需要的东西,例如from tkinter import Tk, Text, Entry 等等或导入整个模块:import tkinter 然后你也可以使用别名:import tkinter as tk 或类似的东西,关键是不要导入所有内容,除非你真的知道你在做什么,因为今天我遇到了一个由通配符导入引起的问题;名称冲突是问题所在。

标签: python tkinter


【解决方案1】:

改函数generateQ()这样-

def generateQ():
    global score,x
    ans = e1.get()
    e1.delete(0, END)
    if int(ans) == int(answer):
        score += 1
        x += 1
        print("correct")
        print(ans)
        print(answer)
    else:
        print("wrong")
        print(ans)
        print(answer)

使用int() 使它们具有相同的数据类型。并使用global score,x,因为它显示错误。你也可以写scorex 作为参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2014-09-07
    相关资源
    最近更新 更多