Python 猜谜游戏-Tkinter模块

Python 猜谜游戏-Tkinter模块,python,tkinter,Python,Tkinter,我用Python创建了一个代码来演示一个1到100之间的数字猜测游戏。我想用Tkinter模块在图形界面中实现这个游戏。我有一个想法,我用tkinter创建了一个代码,但之后我崩溃了。我的问题是,如何将创建的两个代码“合并”为一个,以创建这个图形界面 特金特部分 from tkinter import * import random i = Tk() i.title('Guess Game') i.geometry("400x200") texto = Label(i, text = "W

我用Python创建了一个代码来演示一个1到100之间的数字猜测游戏。我想用Tkinter模块在图形界面中实现这个游戏。我有一个想法,我用tkinter创建了一个代码,但之后我崩溃了。我的问题是,如何将创建的两个代码“合并”为一个,以创建这个图形界面

特金特部分

from tkinter import *
import random

i = Tk()

i.title('Guess Game')
i.geometry("400x200")

texto = Label(i, text = "Welcome to the Guess Game")
texto.pack()

texto = Label(i, text = "You have 10 chances to hit the number I'm thinking")
texto.pack()
texto = Label(i, text = "This is a value between 1 and 100. So, come on!")
texto.pack()

form = Entry(i, width=3)
form.pack()

b = Button(i, text ="Execute", fg= "green")
b.pack()

i.mainloop()
第二部分

import random

n = random.randrange(1, 101)
nrepete = []
estado1 = 7  # início
estado2 = 7


def SetStatus(tentativa):

    global estado2

    if abs(n - palpite) == 1:
        estado2 = 6  # Very Fucking Hot
    if abs(n - palpite) == 2 or abs(n - palpite) == 3:
        estado2 = 5  # Very Hot
    if abs(n - palpite) >= 4 and abs(n - palpite) <= 6:
        estado2 = 4  # Hot
    if abs(n - palpite) >= 7 and abs(n - palpite) <= 9:
        estado2 = 3  # Warm
    if abs(n - palpite) >= 10 and abs(n - palpite) <= 15:
        estado2 = 2  # Cold
    if abs(n - palpite) >= 16 and abs(n - palpite) <= 25:
        estado2 = 1  # Very Cold
    if abs(n - palpite) >= 26:
        estado2 = 0  #  Freezing


def FornecerPista():
    if estado1 == 7:
        if estado2 == 0:
            print('Freezing!')
        if estado2 == 1:
            print('Very cold!')
        if estado2 == 2:
            print('Cold!')
        if estado2 == 3:
            print('Warm!')
        if estado2 == 4:
            print('Hot!')
        if estado2 == 5:
            print('Very hot!')
        if estado2 == 6:
            print('Very fucking hot!')
    if estado1 - estado2 == 0:
        if estado2 == 0:
            print('Seu palpite continua congelando!')
        if estado2 == 1:
            print('Seu palpite continua muito frio!')
        if estado2 == 2:
            print('Seu palpite continua frio!')
        if estado2 == 3:
            print('Seu palpite continua morno!')
        if estado2 == 4:
            print('Seu palpite continua quente!')
        if estado2 == 5:
            print('Seu palpite continua muito quente!')
        if estado2 == 6:
            print('Seu palpite continua fervendo!')
    if estado1 - estado2 > 0:
        if estado2 == 0:
            print('Ops, seu palpite deu uma esfriada e agora está congelando!')
        if estado2 == 1:
            print('Ops, seu palpite deu uma esfriada e agora está muito frio!')
        if estado2 == 2:
            print('Ops, seu palpite deu uma esfriada e agora está frio!')
        if estado2 == 3:
            print('Ops, seu palpite deu uma esfriada e agora está morno!')
        if estado2 == 4:
            print('Ops, seu palpite deu uma esfriada e agora está quente!')
        if estado2 == 5:
            print('Ops, seu palpite deu uma esfriada e agora está muito quente!')
    if estado1 - estado2 < 0:
        if estado2 == 1:
            print('Ops, seu palpite deu uma esquentada e agora está muito frio!')
        if estado2 == 2:
            print('Ops, seu palpite deu uma esquentada e agora está frio!')
        if estado2 == 3:
            print('Ops, seu palpite deu uma esquentada e agora está morno!')
        if estado2 == 4:
            print('Ops, seu palpite deu uma esquentada e agora está quente!')
        if estado2 == 5:
            print('Ops, seu palpite deu uma esquentada e agora está muito quente!')
        if estado2 == 6:
            print('Ops, seu palpite deu uma esquentada e agora está fervendo!')


for tentativa in range(1, 11):
    while True:
        try:
            palpite = input('Tentativa' + str(tentativa) + ':')
            palpite = int(palpite)
            nrepete.append(palpite)
            if (palpite < 1) or (palpite > 100):
                raise ValueError
            if nrepete.count(palpite) >= 2:
                raise NameError
            else:
                break
        except NameError:
            print('Esse valor já foi testado! Tente de novo.')
        except ValueError:
            print('Invalid value! Try again.')

    if palpite == n:
        print('\nCongratulations !')
        print('\nYou hit the number', n, 'after', tentativa, 'tentativa(s)!')
        break
    if tentativa == 1:
        SetStatus(tentativa)
    if tentativa > 1:
        estado1 = estado2
        SetStatus(tentativa)
    FornecerPista()

    if tentativa == 10 and palpite != n:
        print('\nLamento, mas após', tentativa, 'tentativas')
        print('Você não conseguiu acertar o número', n, 'que eu estava pensando!')
随机导入
n=random.randrange(1101)
nRepet=[]
estado1=7#início
estado2=7
def设置状态(Tentiva):
全球estado2
如果abs(n-触诊)=1:
estado2=6#非常他妈的热
如果abs(n-触须)=2或abs(n-触须)=3:
estado2=5#非常热
如果abs(n-触须)>=4,abs(n-触须)=7,abs(n-触须)=10,abs(n-触须)=16,abs(n-触须)=26:
estado2=0#冻结
def FornecerPista():
如果estado1==7:
如果estado2==0:
打印('冻结!')
如果estado2==1:
打印(“非常冷!”)
如果estado2==2:
打印('Cold!')
如果estado2==3:
打印('Warm!')
如果estado2==4:
打印('Hot!')
如果estado2==5:
打印(“非常热!”)
如果estado2==6:
打印(“非常他妈的热!”)
如果estado1-estado2==0:
如果estado2==0:
打印('Seu perptite continua congelando!')
如果estado2==1:
打印('Seu-palpite continua muito-frio!')
如果estado2==2:
打印('Seu perptite continua frio!')
如果estado2==3:
打印('Seu perptite continua morno!')
如果estado2==4:
打印('Seu perptite continua quente!')
如果estado2==5:
打印('Seu perptite continua muito quente!')
如果estado2==6:
打印('Seu perptite continua fervendo!')
如果estado1-estado2>0:
如果estado2==0:
印刷品('Ops,seu palpite deu uma esfrieada e agora estácongelando!')
如果estado2==1:
印刷品('Ops,seu palpite deu uma esfrieada e agora estámuito frio!')
如果estado2==2:
印刷品('Ops,seu palpite deu uma esfrieada e agora estáfrio!')
如果estado2==3:
印刷品('Ops,seu palpite deu uma esfrieada e agora estámorno!')
如果estado2==4:
印刷品('Ops,seu palpite deu uma esfrieada e agora estáquente!')
如果estado2==5:
印刷品('Ops,seu palpite deu uma esfrieada e agora estámuito quente!')
如果estado1-estado2<0:
如果estado2==1:
印刷品('Ops,seu palpite deu uma esquentada e agora estámuito frio!')
如果estado2==2:
印刷品('Ops,seu Perptite deu uma esquentada e agora estáfrio!')
如果estado2==3:
印刷品('Ops,seu PAPPITE deu uma esquentada e agora estámorno!')
如果estado2==4:
印刷品('Ops,seu PAPPITE deu uma esquentada e agora ESTAQUENTE!')
如果estado2==5:
印刷品('Ops,seu palpite deu uma esquentada e agora estámuito quente!')
如果estado2==6:
印刷品('Ops,seu PAPPITE deu uma esquentada e agora estáfervendo!')
对于范围(1,11)内的Tentiva:
尽管如此:
尝试:
触诊=输入('tentiva'+str(tentiva)+':')
触诊=int(触诊)
追加(触诊)
如果(触诊<1)或(触诊>100):
升值误差
如果呼吸次数(触诊)>=2:
引发名称错误
其他:
打破
除名称错误外:
打印(“Esse valor jáfoi testado!Tent de novo.”)
除值错误外:
打印('无效值!请重试')
如果触诊==n:
打印('\n图表!')
打印(“\n您点击了数字”,n,“在”,tentativa,“tentativa(s)!”)
打破
如果Tentavia==1:
SetStatus(Tentiva)
如果tentiva>1:
estado1=estado2
SetStatus(Tentiva)
FornecerPista()
如果触须=10,触须=n:
打印('\nLamento,mas após',tentiva',tentivas')
印刷品('Vocènão conseguiu acertar o número',n'que eu estava pensando!')

我已经编写了一些代码,可以满足您的需要。我还对代码进行了一些其他的更改,这些更改不是使我的解决方案工作所必需的,但是您应该强烈地考虑实现它们,因为它们是更好的实践。我合并代码的方法是执行以下操作:

  • 向“执行”按钮添加操作侦听器(谷歌操作侦听器了解更多信息)
  • 使用MessageBox显示输出而不是打印
  • 将“动作代码”(分析猜测等的代码)放入一个每当点击execute按钮时执行的函数中
我对代码所做的一般更改是使用elif语句并使用列表来存储消息,而不是执行
如果x==3,则打印(“blablabla”)
使用elif语句,因为评估您知道将失败的条件没有意义(例如,如果执行了
x==3
,则无需检查
x==4
是否会执行-我们知道不会执行)。我鼓励您更深入地研究if/elif/else条件,以便我的评论更有意义

首先,这是一个解决方案:在你的电脑上运行它,看看你是否喜欢它

from tkinter import *
import random
from tkinter import messagebox

n = random.randrange(1, 101)
nrepete = []
estado1 = 7  # início
estado2 = 7

tentativa = 0


def execute():
    global tentativa, estado2, estado1
    if tentativa < 10:  # only play if you still have turns
        palpite = form.get()
        try:
            palpite = int(palpite)
            nrepete.append(palpite)
            if (palpite < 1) or (palpite > 100):
                raise ValueError
            if nrepete.count(palpite) >= 2:
                raise NameError

            tentativa += 1
            if palpite == n:
                message = "Congratulations!  You hit the number {} after {} tentativa(s)!".format(n, tentativa)
                messagebox.showinfo("You win!", message)

            else:
                SetStatus(tentativa, palpite)
                if tentativa > 1:
                    estado1 = estado2

                message = FornecerPista()
                messagebox.showinfo("Status", message)

                if tentativa == 10 and palpite != n:
                    message = "Lamento, mas após {} tentativas. Você não conseguiu acertar o número {} que eu estava pensando!".format(
                        tentativa, n)
                    messagebox.showinfo("Game over", message)

        except NameError:
            messagebox.showerror("Error", 'Esse valor já foi testado! Tente de novo.')
        except ValueError:
            messagebox.showerror("Error", 'Invalid value! Try again.')


    else:
        messagebox.showinfo("Game over", "You've already lost.  The answer was {}".format(n))


def SetStatus(tentativa, palpite):
    global estado2
    x = abs(n - palpite)

    if x == 1:
        estado2 = 6  # Very Fucking Hot
    elif x == 2 or x == 3:
        estado2 = 5  # Very Hot
    elif 4 <= x <= 6:
        estado2 = 4  # Hot
    elif 7 <= x <= 9:
        estado2 = 3  # Warm
    elif 10 <= x <= 15:
        estado2 = 2  # Cold
    elif 16 <= x <= 25:
        estado2 = 1  # Very Cold
    elif x >= 26:
        estado2 = 0  # Freezing


def FornecerPista():
    message = ""
    if estado1 == 7:
        messages = ["Freezing!", "Very cold!", "Cold!", "Warm!", "Hot!", "Very hot!", "Very fucking hot!"]
        message = messages[estado2] + "\n"
    elif estado1 == estado2:
        messages = ['congelando', 'muito frio', "frio", "morno", "quente", "muito quente", "fervendo"]
        message += "Seu palpite continua {}!".format(messages[estado2])

    elif estado1 > estado2:
        messages = ['congelando', 'muito frio', "frio", "morno", "quente", "muito quente"]
        message += "Ops, seu palpite deu uma esfriada e agora está {}!".format(messages[estado2])
    else:
        messages = ['muito frio', "frio", "morno", "quente", "muito quente", "fervendo"]
        message += "Ops, seu palpite deu uma esquentada e agora está".format(messages[estado2 - 1])

    return message


i = Tk()

i.title('Guess Game')
i.geometry("400x200")

texto = Label(i, text="Welcome to the Guess Game")
texto.pack()

texto = Label(i, text="You have 10 chances to hit the number I'm thinking")
texto.pack()
texto = Label(i, text="This is a value between 1 and 100. So, come on!")
texto.pack()

form = Entry(i, width=3)
form.pack()

b = Button(i, text="Execute", fg="green", command=execute)
b.pack()

i.mainloop()
从tkinter导入*
随机输入
从tkinter导入消息框
n=random.randrange(1101)
nRepet=[]
estado1=7#início
estado2=7
tentiva=0
def execute():
全球Tentiva、estado2、estado1
如果Tentavia<10:#只有在你还有轮次时才玩
帕尔皮特=form.get()
尝试:
触诊=int(触诊)
追加(触诊)
如果(触诊<1)或(触诊>100):
升值误差
如果呼吸次数(触诊)>=2: