Python 2.7 Tkinter输入替换

Python 2.7 Tkinter输入替换,python-2.7,tkinter,Python 2.7,Tkinter,我一直在Tkinter开发一个基于文本的游戏,我需要一种方法来允许输入更灵活。基本上,我要寻找的是如何编码: if Input.get() == "look at" Item: Item.look() 但由于“item”是一个类,具有子类的灵活性,所有这些都可以“查看”。这是我的当前(非工作)代码: def Check(): if Output == "look at" Item: Item.look() else: pass class

我一直在Tkinter开发一个基于文本的游戏,我需要一种方法来允许输入更灵活。基本上,我要寻找的是如何编码:

if Input.get() == "look at" Item:
    Item.look()
但由于“item”是一个类,具有子类的灵活性,所有这些都可以“查看”。这是我的当前(非工作)代码:

def Check():
    if Output == "look at" Item:
        Item.look()
    else:
        pass
class Item():
    def __init__(self, name, description, value, quantity):
        self.name = name
        self.description = description
        self.value = value

    def look(self):
        Look.Title = "{}".format(self.name)
        Look.Description = "{}".format(self.Description)
        Look.Value = "{} is worth {}.".format(self.name, self.value)
        Details.insert(Look.Title)
        Details.insert(Look.Description)
        Details.insert(Look.Value)
        Details.insert(Look.Quantity)
class Headphones(Item):
    def __init__(self):
        super.__init__(name = "Headphones", description = "A set of high quality white headphones.", value = 150)
非常感谢您的帮助,

Blaze

您需要在输入和要调用的函数之间进行某种映射。您需要解析字符串,以便从输入字符串中提取对象,并使用解析结果查找适当的对象或类

例如,您可以使用正则表达式来解析字符串“lookatx”,然后使用“X”作为字典的索引,以便知道实例化哪个类

下面是一个简单的例子:

import re

class Headphones(object):
    def look(self):
        print("you are looking at headphones")

class Goggles(object):
    def look(self):
        print("you are looking at goggles")

class Unknown(object):
    def look(self):
        print("I don't know what you're looking at")

def check(input):
    map = {
        "goggles": Goggles,
        "headphones": Headphones,
    }

    match = re.match(r'look at (.*)', input)
    if match:
        thing = match.group(1)
        cls = map.get(thing, Unknown)
        object = cls()
        object.look()

for phrase in ("look at headphones", 
               "look at goggles", 
               "look at something else"):
    check(phrase)
注意:这是解决问题的多种方法之一。关键是,您需要:

  • 编写一个可以从输入中提取重要部分的解析器,然后
  • 使用解析阶段的结果来决定如何处理数据

  • 解析器可以是任何形式,从简单地在空格上拆分输入并获取最后一个单词,到使用正则表达式,再到使用类似的完整解析器

    您认为这有什么作用:
    如果Input.get()=“查看”项:
    ?这是无效的语法,我猜不出您认为
    部分在做什么。你想让它和“看”连接起来吗?你是在问如何将用户输入的
    “查看耳机”
    转换为运行代码
    耳机。look()
    我是这样尝试的,因为还有一些代码(我已经忘记)是这样工作的。出于某种原因。我想问的是,如何将用户输入的“看耳机”转换为运行headphones.look(),或“看护目镜”转换为运行goggles.look(),或“看手机”转换为运行phone.look(),等等,这样它就可以在任何项目上运行。