尝试在Python中调用嵌入在其中间的变量的函数

时间:2015-04-19 01:20:53

标签: python

我正在创建一个带有菜单的程序,该菜单通过raw_input要求用户在他们想要阅读的程序中选择叙述的特定章节。代码的这一部分是:

mainma = raw_input ("Which chapter do you want? (1-10): ")

这就是我的问题所在:我正在尝试对调用进行编码,以便它将转到所请求的定义为的章节:

Chap(mainma)menu()

因为我正在假设如果mainma = 1,它会调用存储特定章节数据的Chap1menu(),如果mainma = 3调用它Chap3menu() {{1}} 。语法错误我不同意我的看法。我做错了什么?

3 个答案:

答案 0 :(得分:4)

您并不想尝试将用户输入直接转换为变量名称;这是可能的,但它是凌乱,脆弱和不安全的。你想要做的是创建一个列表或字典,将输入映射到章节功能;类似的东西:

chapters = {'1': Chap1Menu,
            '2': Chap2Menu,
            #etc.
           }

然后像这样使用它:

chapters[mainma]()

答案 1 :(得分:0)

你有机会在这里进行高效的代码设计 - 可能是章节菜单功能在它们之间共享很多行为。你不应该在这样的程序中复制和粘贴代码,因为它更难以阅读并且有更新的风险(太容易让它们彼此打不开)。

无论您将哪些内容放入“章节#菜单”,请编写一个更为通用的功能,将章节编号作为参数。这有助于重用章节之间类似的代码。差异存储在某些列表或字典中(此处为insides,最小):

insides = list('qwertywuiop')

def ChapterMenus(chapternum, **kwargs):
    print('Chapter %d: About the Letter %s'%(chapternum, insides[chapternum]))
    print(kwargs)


if __name__=='__main__':
    mainma = raw_input("Which chapter do you want? (1-10): ")
    mainma = int(mainma) #Be more helpful validating this
    if mainma in range(1,11):
        ChapterMenus(mainma, text='Ants')
    else:
        print('Tsk! A real chapter number, please!')

答案 2 :(得分:0)

只需使用m作为函数Chapmenu的参数。例如:

def Chapmenu(m):
    if m == 1:
        # code for Chap1menu goes here
    elif m == 2:
        # code for Chap2menu goes here
    elif m == 3:
        # code for Chap3menu goes here

等。

然后只需致电Chapmenu(mainma)