能否让一个变量识别出它所持有的是一个字典变量,并按照规定使用它。

问题描述 投票:0回答:1

我在python 3中用tkinter做了一个简单的游戏,其中包含了一个我做的函数,每当我点击一个按钮时,这个函数就会通过一个文本部分的字典。

new_pokemon_dictionary = {
"1": "It's a new pokemon!", "2": "Are you ready to fight it?"#, "3": "3rd piece of text etc
}
text_scroll_n=0
def next_button():
    global text_scroll_n

    textbox.delete(0.0, END)
    text_scroll_n+=1  #Every time next_button run adds 1, this makes it print new part of the dictionary            

    if game_stage == 1:
        text_scroll("new_pokemon_dictionary")
    else:
        return
    textbox.insert(END, text_output)
    screen.update()

通过点击下一个按钮 text_scroll_n 增加一,并由 text_scroll 函数来选择要显示的字典的新部分。

def text_scroll(dictionary):

    if text_scroll_n<=len(dictionary):
        print(dictionary)
        text_output = dictionary[str(text_scroll_n)] #Textbox will insert at end of next_button function
    else:
        game_stage +=1 

然而,当运行这个函数时,(以及其他部分的代码,如创建未显示的texbox),我得到了错误的提示。TypeError: string indices must be integers . 我猜想这是因为它试图设置了 text_output 到信 dictionary,其在单词中的位置等于text_scroll_n的整数。然而,当我把这一行替换成 text_output = dictionary[str(text_scroll_n)]text_scroll 功能与 text_output = new_pokemon_dictionary[str(text_scroll_n) 识别new_pokemon_dictrionary变量是一个字典,工作得很完美。

有什么办法可以让我使用 text_scroll(dictionary) 在我的整个代码中,只是把不同的字典变量名,我想使用的paramater,或者是唯一的解决方法是重写所有不同的字典所需的代码?

我是新的编码,所以如果有任何的马虎,对不起。谢谢!我用tk做了一个简单的游戏。

python dictionary variables
1个回答
0
投票

因此,从我所知道的情况来看,真正发生的事情是你将字符串 "new_pokemon_dictionary"text_scroll 函数,而不是字典中的 new_pokemon_dictionary 掉下引号的每一个 text_scroll 打电话给你,你应该是罚款。

所以这个...

if game_stage == 1:
        text_scroll("new_pokemon_dictionary")

...变成了这个

if game_stage == 1:
        text_scroll(new_pokemon_dictionary)

0
投票

你想让代码根据传来的字符串选择合适的字典,应该是字典的名称吧?

你可以实现一个基于名称返回字典的函数,然后使用它。下面的代码将为你工作 -

dict_1={"name":"dict_1"}
dict_2={"name":"dict_2"}

def get_dict(name):
    import sys
    return sys.modules[__name__].__dict__[name]


if __name__ == "__main__":
    print(get_dict("dict_1"))
    print(get_dict("dict_2"))

在你的代码中,你可以用下面的方式来使用它----------。

text_scroll(get_dict("new_pokemon_dictionary"))

© www.soinside.com 2019 - 2024. All rights reserved.