将多个if语句缩减为一个选项卡

2024-05-28 18:42:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在把一本孩子们自己选择的冒险书翻译成一个python程序,例如,“如果你选择x,转到y页,或者如果你选择a,转到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

Tags: the方法from程序程序运行inputif结尾
2条回答

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

因此,除了成百上千的if语句之外,您实际上根本不需要任何语句。您可以改为使用以下行。你知道吗

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

在你的头脑中定义什么是输入和输出。你知道吗

在我看来,你可能会有多个问题,在不同的页面。所以一个输入就是“当前页码”,它将识别问题。你知道吗

当然,另一个输入是用户的响应。在二进制(yes/no)系统中,用户总是有两个可能的响应(yes或no)。在非二进制系统中,可能有更多可能的响应。你知道吗

我建议你假设非二进制,而且,即使只有一个问题可能是非二进制的,也要这样做。它有助于保持事情的一致性。你知道吗

假设你有一个非二进制系统,有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等等

相关问题 更多 >

    热门问题