[英]Coding Efficiency in a Branching Storyline
在过去的3个月中,我一直是python的学生,并且正在尝试满足以下要求的作业。
您必须创建具有4个级别的多文本冒险。
做出的每个选择都必须在下一个级别中导致3个独特的选择。
这意味着分配需要在1 级中 选择3个 , 在2级中选择9个 , 在3级中选择27个 , 在4级中选择81个 。 对于python来说,我是很陌生的,我发现使这两者高效,有条理和正确地工作很困难。
这是到目前为止我所拥有的一个例子:
while adventure_running: # the entire branch of choices.. there might be an easier way to do this but I couldn't figure it out
print_situation('1')
answer = input().upper()
if answer == 'A':
print_situation('2_A')
answer = input().upper()
if answer == 'A':
print_situation('3_A1')
answer = input().upper()
if answer == 'A':
print_situation('4_A1_A1')
answer = input().upper()
if answer == 'A':
print("FINAL STATEMENT")
adventure_running = False
answer = 'D' # I set the answer value to D at the end so the program doesn't save the value throughout multiple runs
适当重复上述代码以适应所有120个选择。
print_situation函数查看字典,并找到与之相关的提示和选择。
我的主要问题是,如果用户输入错误,它将重新启动整个文本浏览过程,而不是再次打印当前情况。
我知道这可能效率非常低,所以我很乐意听取有关上述问题的任何改进建议。
没有面向对象的编程,有没有办法做到这一点?
您可以使用状态机:
state = '1'
table = {'1':{'A':'2_A'}, '2_A':{'A':'3_A1'},
'3_A1':{'A':'4_A1_A1'}, '4_A1_A1':{'A':'done'}}
while True:
print_situation(state)
if state == 'done':
break
state = table[state][input().upper()]
这将打印情况。 检查我们是否处于完成状态。 否则,通过查找表进行转换。
请注意,如果您说的话:
级别1中有3个选择,级别2中有9个选择,级别3中有27个选择,级别4中有81个选择。
你有:
>>> 1+3+3*9+3*9*27+3*9*27*81
59809
状态。
这就是为什么存在面向对象编程的原因。 您需要为Choice,Answer和Level提供另一个类,然后构造对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.