将多个if语句减少到表

时间:2017-03-05 02:23:18

标签: python database

我正在翻译孩子们将自己的冒险书选择到python程序中,例如,如果你选择x,请转到第y页或者如果你选择转到页面b'

虽然这个程序有效,但在本书的最后,将有超过100个if语句可以创建一个表,用于将用户输入与页面列表进行比较。我在研究时看到的一个例子显示了一个类似的表格:

#this would hold the potential user inputs
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0] 

但我不确定如何实施

#imports the pages of the book from another python file
from Content import *

clrscrn = (chr(27) + "[2J")

def page0():
    print "\n %s" % page1

page0()

#User input loop
while True:
    inp = raw_input(">>> ").lower()

#clears the screen then prints the variable (page) 

if inp == '3':
    print clrscrn
    print '%s' % page3

if inp == '10':
    print clrscrn
    print '%s' % page10

if inp == '5':
    print clrscrn
    print '%s' % page5

if inp == '14':
    print clrscrn
    print '%s' % page14

#quits python
elif inp == 'quit':
    raise SystemExit

2 个答案:

答案 0 :(得分:1)

在头脑中定义输入和输出将是什么。

对我而言,您可能会在不同页面上遇到多个问题。因此,一个输入将是“当前页码”。这将确定问题。

其他输入当然是用户的回复。在二进制(是/否)系统中,用户总是会有两个可能的响应(是或否)。在非二进制系统中,可能存在更多可能的响应。

我建议您假设非二进制,而且,即使只有一个问题可能是非二进制的,也可以使用它。它有助于保持一致。

那么,让我们假设您有一个包含100个问题的非二进制系统。每个问题都出现在“页面”的末尾。 (也许它在“章节”或“段落”的末尾或其他内容。随意替换单词。)当用户回答时,他们会被指示去另一个“页面”。

因此,您的地图将是“当前页面+用户输入 - >新页面”。

在python中实现它的最简单方法是使用字典列表。列表索引可以是当前页面。这将确定问题和可能的回应。响应(字典中的键)可以是文本字符串。结果(字典中的值)将为整数,表示新的页码。因此:

Pages = [ # List of questions, one per page. Use {} for page with no Q
    {}, # 0
    {}, # 1
    {   
      "yes": 12,
      "no": 16,
    },  # 2
 ]

如果您想提高效率,可以使用用户无法输入的" q "等密钥将问题存储在同一列表中(因为您将运行.strip()用户输入,自然而然)!

{
    " q ": "Do you like pizza?",
    "yes": 12,
    "no": 16,
}

如果你感觉精力充沛,你可以将词典变成一个带有属性的类,将各个页面存储为JSON等。

答案 1 :(得分:1)

每个if语句的唯一区别是您访问的页面变量。如果您希望在用户输入“14”时获得page14,则可以使用globals()返回的字典以动态方式访问页面变量。

因此,您根本不需要任何语句,而不是数百if语句。您可以改用以下行。

print clrscrn
print globals()['page' + inp]