我正在翻译孩子们将自己的冒险书选择到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
答案 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]