我正在创建一个带有菜单的程序,该菜单通过raw_input
要求用户在他们想要阅读的程序中选择叙述的特定章节。代码的这一部分是:
mainma = raw_input ("Which chapter do you want? (1-10): ")
这就是我的问题所在:我正在尝试对调用进行编码,以便它将转到所请求的定义为的章节:
Chap(mainma)menu()
因为我正在假设如果mainma = 1
,它会调用存储特定章节数据的Chap1menu()
,如果mainma = 3
调用它Chap3menu()
{{1}} 。语法错误我不同意我的看法。我做错了什么?
答案 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)