【发布时间】: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或类似的东西,关键是不要导入所有内容,除非你真的知道你在做什么,因为今天我遇到了一个由通配符导入引起的问题;名称冲突是问题所在。